o
    Ö­jþ  ã                   @   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ê?gbsÑE]ä?)ç      ð?ç        r   r   r   )r   r   gDÊÔW«¥ï?r   gB¦|müš?)r   r   gá·Ò¥ï?r   gèý0Ÿ‡Ô”?g‘ÚÜ¥+´@g¡5sÑ´@g2ìa´@g`� Þ_´@)gF§Îýâ¿g¼Çî¢ ú?gœ¬¦ÂwÿQÀg’½þÌôb@gfæ¼�B@)g8‘‚µÛ¿g	MpB#ð?g‘öû8B92@gÄæŸ‡Pí?@g ¨µâª3À)gÊÀÿ8FÞ¿gÆŒíÇJî?gŸƒ…%ƒG‘¿g;S™9H@g€Ñô‚MG@)g4</­Þ¿g ŠdZ½Âî?g”c�4’y?g(¹,ÿÀ7H@g ¾Äëœ@z<Simplified objective function not defined at requested point)ÚnpÚarrayÚallcloseÚ
ValueErrorÚcopy)ÚxÚx0Úx1Úx2Úx3Úf0Úf1Úf2Úf3Úg0Úg1Úg2Úg3ÚfÚg© r   úd/var/www/html/CropPilot/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 ¡ s½J dƒ‚q�dS )zdtest if setulb() violates bounds

    checks for violation due to floating point rounding error
    é   é
   g    ÐcAgñhãˆµøä>é   é   )ÚshapeÚ
fill_valueÚdtype)r$   r   r   é   é   é   é   é,   é   é   z9_lbfgsb.setulb() stepped to a point outside of the boundsN)r   ÚfullÚint32ÚzerosÚfloat64Úonesr   r   Úranger   r   ÚsetulbÚall)ÚnÚmÚfactrÚpgtolÚmaxlsÚnbdÚlow_bndÚ	upper_bndr   r   r   r   ÚwaÚiwaÚtaskÚln_taskÚlsaveÚisaveÚdsaveÚn_iterr   r   r   Útest_setulb_floatroundE   s<   ÿ
4ÿÿúrD   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!   )Úastyper   Úfloat32Úsum)r   r   r   r   Úfun_single_precisiont   s   z0test_gh_issue18730.<locals>.fun_single_precisionr   Tzl-bfgs-b)r   ÚjacÚmethodr   gVçž¯Ò<)Úatol)r   r   r   ÚtestingÚassert_allcloseÚfun)rH   Úresr   r   r   Útest_gh_issue18730q   s
   ÿrP   )Únumpyr   Úscipy.optimizer   r   r   rD   rP   r   r   r   r   Ú<module>   s
    @,