U
    /dd                     @   s(   d dl Zd dlmZ dd Zdd ZdS )    N)_lbfgsbc                 C   s  dddddg}dddddg}ddddd	g}ddd
ddg}d}d}d}d}t dddddg}	t dddddg}
t dddddg}t dd d!d"d#g}t | |r|}|	}nJt | |r|}|
}n4t | |r|}|}nt | |r|}|}ntd$t |t |fS )%z8simplified objective func to test lbfgsb bound violation     ?     ?leffff?%I$I?bsE]?g      ?        gDW?gB|m?gҥ?g0Ԕ?gܥ+@g5s@g2a@g`_@gFg ?gwQgb@gf漍B@g8ۿg	MpB#?g8B92@g柇P?@g 3g8F޿gƌJ?g%Gg;S9H@gMG@g4</޿g dZ?gc4y?g(,7H@g @z<Simplified objective function not defined at requested point)nparrayZallclose
ValueErrorcopy)xx0x1Zx2Zx3Zf0f1f2Zf3Zg0Zg1Zg2Zg3fg r   K/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/optimize/tests/test_lbfgsb_setulb.pyobjfun   s~    r   c                  C   s  d} d}d}d}d}d}t | fd}t | t j}t | t j}t dd	d
ddg}	t |	}
t dt j}t | t j}tjj	j
}t d| |  d|   d| |  d|  t j}t d|  |}t dd}t dd}t d|}t d|}t dt j}d|dd< tdD ]b}t|
\}}t||
|||||||||||||||| |
|k rr|
|k stdqdS )zdtest if setulb() violates bounds

    checks for violation due to floating point rounding error
       
   g    cAgh㈵>      r   r   r   r   r   r               ZS60   ,      s   STARTN   z9_lbfgsb.setulb() stepped to a point outside of the bounds)r	   fullzerosZfloat64Zonesr
   r   r   typesZintvarZdtyperanger   ZsetulballAssertionError)nmZfactrZpgtolZmaxlsZiprintZnbdZlow_bndZ	upper_bndr   r   r   r   Zfortran_intwaZiwaZtaskZcsaveZlsaveZisaveZdsaveZn_iterr   r   r   test_setulb_floatroundE   s\    

2        r-   )Znumpyr	   Zscipy.optimizer   r   r-   r   r   r   r   <module>   s   @