o
    i                     @   s4   d dl Zd dlmZmZ dd Zdd Zdd ZdS )	    N)_lbfgsbminimizec                 C   s   g d}g d}g d}g d}d}d}d}d}t g d	}	t g d
}
t g d}t g d}t | |r?|}|	}n%t | |rJ|}|
}nt | |rU|}|}nt | |r`|}|}ntdt |t |fS )z8simplified objective func to test lbfgsb bound violationg     ?g     ?gleffff?g%I$I?gbsE]?)      ?        r   r   r   )r   r   gDW?r   gB|m?)r   r   gҥ?r   g0Ԕ?gܥ+@g5s@g2a@g`_@)gFg ?gwQgb@gf漍B@)g8ۿg	MpB#?g8B92@g柇P?@g 3)g8F޿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g0g1g2Zg3fg r   a/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/optimize/tests/test_lbfgsb_setulb.pyobjfun   s8   r   c                  C   s  d} d}d}d}d}t j| fdt jd}t j| t jd}t j| t jd}t g d	}t |}	t jd
t jd}
t j| t jd}t jd| |  d|   d| |  d|  t jd}t jd|  t jd}t jdt jd}t jdt jd}t jdt jd}t jdt jd}t jdt jd}tdD ]-}t	|	\}
}t
||	||||
||||||||||| |	|k r|	|k sJ dqdS )zdtest if setulb() violates bounds

    checks for violation due to floating point rounding error
       
   g    cAgh㈵>      )shapeZ
fill_valuedtype)r   r   r               ,         z9_lbfgsb.setulb() stepped to a point outside of the boundsN)r   fullZint32ZzerosZfloat64Zonesr   r
   ranger   r   Zsetulball)nmZfactrZpgtolZmaxlsZnbdZlow_bndZ	upper_bndr   r   r   r   waZiwataskZln_taskZlsaveZisaveZdsaveZn_iterr   r   r   test_setulb_floatroundE   s<   
4r+   c                  C   s:   dd } t | tddgddd}tjj|jddd	 d S )
Nc                 S   s"   |  tj} t| d d|  fS )Nr   )Zastyper   Zfloat32sum)r   r   r   r   fun_single_precisiont   s   z0test_gh_issue18730.<locals>.fun_single_precisionr   Tzl-bfgs-b)r   Zjacmethodr   gV瞯<)Zatol)r   r   r   ZtestingZassert_allcloseZfun)r-   resr   r   r   test_gh_issue18730q   s
   r0   )numpyr   Zscipy.optimizer   r   r   r+   r0   r   r   r   r   <module>   s
    @,