
    tKg                        d dl Z d dlZd dlmZmZmZ d dlmZm	Z	 d dl
mc mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d	d
l m!Z! d Z"d Z#d Z$d Z%d Z&d Z'g e"ddfe"ddfe"ddfe"ddfe"ddfe"ddfe"ddfe"ddfe"d dfe"d!dfe"d"d#fe#dd$fe#dd%fe#dd%fe#dd&fe#dd$fe#dd$fe#dd'fe#ddfe#d dfe#d!d(fe#d"dfe$ddfe$ddfe$ddfe$dd)fe$dd*fe$dd(fe$ddfe$dd+fe$d d+fe$d!dfe$d"dfe%d,d'fe%d-dfe%d.dfe%d/dfe%d0dfe%d1d'fe%d2d'fe%d3d'fe%d4d)fe%d5d)fe%d6d)fe&d,d%fe&d-d&fe&d.d$fe&d/d)fe&d0d'fe&d1d$fe&d2d&fe&d3d&fe&d4d'fe&d5d'fe&d6d$fZ( G d7 d8      Z)ee jT                  jW                  d9      e jT                  jY                  d:d;d<d=g>       G d? d@e!                           Z-y)A    N)assert_allcloseassert_equalassert_array_less)statsspecial)array_api_compatible)array_namespacexp_assert_closexp_assert_equalxp_assert_less
xp_minimumis_numpyis_cupy)_chandrupatla_minimize_chandrupatla)_CHANDRUPATLA_TESTS)permutations   )TestScalarRootFindersc                 H    dd| dz  z
  dz  z  d| dz  z
  z   dd| z
  dz  z  z   S )Nd   r         @          @ xs    j/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_chandrupatla.pyf1r      s7    ArE	A~1b5)AqsRiK77    c                     d| dz
  dz  z   S )N   r      r   r   s    r   f2r$      s    B{?r    c                 8    t        j                  |       d| z  z
  S )Nr"   )npexpr   s    r   f3r(      s    66!9qs?r    c                 0    | dz  d| dz  z  z
  d| z  z
  dz   S )N      @r"   r   g      4@r   r   s    r   f4r+      s&    b51QU7?SU"R''r    c                 6    d| dz  z  d| dz  z  z
  d| z  z
  dz   S )N      r      r   r   s    r   f5r0   "   s*    QT6AadF?QqS 1$$r    c                     d}d} | |      } | |      }||z
  }||kD  r||||| fn|||||f\  }}}}}t        |      D ]&  }||z  }||z   }	 | |	      }
|
|k  r||	||
f\  }}}}& n ||	||
fS )Ngw?r   )range)funcx1x2phimaxiterr   r$   stepix3r(   s              r   _bracket_minimumr;   &   s    
CG	bB	bB7D79BwRRdU3"$b"b$!7 BBD 7^$Y"X7R^NBB  r2r2r!!r          i   i   i   i   i   i i i    r-   r#   r/   	      
         皙gg333333ÿgɿg      пg333333ӿgffffffֿgٿgܿg      gc            	          e Zd Zd Zej
                  j                  dd ej                  ddd      g      d        Z	ej
                  j                  d e
       d	d
dg      d        Zd Zd Zd Zej
                  j                  de      d        Zej
                  j                  ddddgf      ej
                  j                  dej"                  ej$                  ej&                  f      d               Zd Zd Zd Zy)TestChandrupatlaMinimizec                 T    t        j                         }|j                  ||z
         S N)r   normpdf)selfr   locdists       r   fzTestChandrupatlaMinimize.fw   s#    zz|S!!!r    rT   333333?g?rI   c                    t        | j                  ddd|f      }|}t        j                  j	                  |j
                  |d       t        j                  j	                  |j                  t        j                  j                  d       dd       |j
                  j                  t        j                  |      k(  sJ y )Nr   r"   argsư>rtol)atolr_   )r   rV   r&   testingr   r   funr   rQ   rR   shape)rS   rT   resrefs       r   
test_basicz#TestChandrupatlaMinimize.test_basic{   s     %TVVRASFC


""355#D"9


""377UZZ^^A->,>QQ"Ouu{{bhhsm+++r    rc   rH   r.      r.   r   r   c                     |r&t        j                  ddd      j                  |      nd}|f}t         j                   fd       } fdd_        t        ddd	|
      } ||      j                         }|D cg c]  }|j                   }}t        |j                  j                         |       t        |j                  j                  |       |D cg c]  }|j                   }	}t        |j                  j                         |	       t        |j                  j                  |       t        |j                    j                  |j                  g|        |D cg c]  }|j                   }
}t        |j                  j                         |
       t        |j                  j                  |       t        j                  |j                  j                  t         j                         sJ |D cg c]  }|j"                   }}t        |j"                  j                         |       t        |j"                  j                  |       t        j                  |j"                  j                  t         j$                        sJ |D cg c]  }|j&                   }}t        |j&                  j                         |       t        t        j(                  |j&                        j                         t        |j&                  j                  |j                  j                         t        j                  |j&                  j                  t         j$                        sJ |D cg c]  }|j*                   }}t        |j*                  j                         |       t        t        j(                  |j*                        j                  dz
         t        |j*                  j                  |j                  j                         t        j                  |j*                  j                  t         j$                        sJ |D cg c]  }|j,                   }}t        |j,                  j                         |       t        |j,                  j                  |       |D cg c]  }|j.                   }}t        |j.                  j                         |       t        |j.                  j                  |       |D cg c]  }|j0                   }}t        |j0                  j                         |       t        |j0                  j                  |       |D cg c]  }|j2                   }}t        |j2                  j                         |       t        |j2                  j                  |       t        |j2                    j                  |j,                  g|        |D cg c]  }|j4                   }}t        |j4                  j                         |       t        |j4                  j                  |       t        |j4                    j                  |j.                  g|        |D cg c]  }|j6                   }}t        |j6                  j                         |       t        |j6                  j                  |       t        |j6                    j                  |j0                  g|        y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )NrL   rX   rH   rW   c                 :    t        j                  ddd| f      S )NrZ   r   r"   r[   )r   rV   )
loc_singlerS   s    r   chandrupatla_singlezHTestChandrupatlaMinimize.test_vectorization.<locals>.chandrupatla_single   s    )$&&"a*OOr    c                  R    xj                   dz  c_          j                  | i |S Nr   f_evalsrV   r\   kwargsrV   rS   s     r   rV   z6TestChandrupatlaMinimize.test_vectorization.<locals>.f   &    IINI4664*6**r    r   rZ   r"   r[   r.   )r&   linspacereshape	vectorizerr   r   ravelr   r   r   rc   rb   rV   success
issubdtypedtypebool_statusintegernfevmaxnitxlxmxrflfmfr)rS   rc   rT   r\   rn   rd   refsre   ref_xref_funref_successref_flagref_nfevref_nitref_xlref_xmref_xrref_flref_fmref_frrV   s   `                   @r   test_vectorizationz+TestChandrupatlaMinimize.test_vectorization   s    >Cbkk%r*2259v		P 
	P	+ 	$QAqt<"3'--/"&'$3$'u-SUU[[%(&*+ds377d+1SWW]]E*SWWfdffSUU2T23.23dss{{d3S[[&&(+6S[[&&.}}S[[..999*./$3CJJ$/SZZ%%'2SZZ%%u-}}SZZ--rzz:::(,-CHH-SXX^^%x0RVVCHH%qyy1SXX^^SWW]]3}}SXX^^RZZ888&*+ds377d+SWW]]_g.RVVCGG_aiik2SWW]]CGGMM2}}SWW]]BJJ777$()DS#&&D)/SVV\\5)$()DS#&&D)/SVV\\5)$()DS#&&D)/SVV\\5)$()DS#&&D)/SVV\\5)svv 5 56$()DS#&&D)/SVV\\5)svv 5 56$()DS#&&D)/SVV\\5)svv 5 56q ( ,
 4
 0
 . , * * * *
 *
 *sH   ?\\*\\$\)6\.\34\8\=.]<]
]c                 z   d }t        j                  dt         j                        f}t        |dgdz  dgdz  t         j                  gdz  |d      }t        j
                  t        j                  t        j                  t        j                  t        j                  g      }t        |j                  |       y )Nc                 r    d d d d g}t        | |      D cg c]  \  }} ||   |       c}}S c c}}w )Nc                     | dz
  dz  S )N      @r   r   r   s    r   <lambda>z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>       CA~r    c                     | dz
  S NrI   r   r   s    r   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>       q2vr    c                     | dz
  dz  S )Nr   ri   r   r   s    r   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>   r   r    c                 "    t         j                  S rP   )r&   nanr   s    r   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>   s    rvvr    )zip)xsjsfuncsr   js        r   rV   z.TestChandrupatlaMinimize.test_flags.<locals>.f   sC    -%-%'E
 -0BK8KDAqHE!HQKK888s   3ri   r|   r   r   rI   r\   r7   )r&   arangeint64r   piarrayeim_ECONVERGED	_ESIGNERR	_ECONVERR
_EVALUEERRr   r~   )rS   rV   r\   rd   	ref_flagss        r   
test_flagsz#TestChandrupatlaMinimize.test_flags   s    	9 		!288,.$QAs1uruugaid-/1 HHcoo!mm!mm!nn. /	 	SZZ+r    c                    t         j                  j                  d      }|j                  d      }d}|f}t        |dddd      }|j	                         }d|d<   t        | j                  g|i |}t        |j                  |j                  z
        }t        |d	|d   z         d
|d<   t        | j                  g|i |}	t        |	j                  |	j                  z
        }
t        |
d	|d   z         t        |
|       |j	                         }d|d<   t        | j                  g|i |}t        |j                  |j                  z
        }t        |d	|d   z  t        |j                        z         d
|d<   t        | j                  g|i |}	t        |	j                  |	j                  z
        }
t        |
d	|d   z  t        |	j                        z         t        |
|       |j	                         }d|d<   t        | j                  g|i |}t        |j                  d|j                  z  z
  |j                  z         }t        |d|d   z         d
|d<   t        | j                  g|i |}	t        |	j                  d|	j                  z  z
  |	j                  z         }t        |d|d   z         t        ||       |j	                         }d|d<   t        | j                  g|i |}t        |j                  d|j                  z  z
  |j                  z         }t        |d|d   z  t        |j                        z         d
|d<   t        | j                  g|i |}	t        |	j                  d|	j                  z  z
  |	j                  z         }t        |d|d   z  t        |	j                        z         t        ||       y )N   FA92 r.   sizerZ   r   r"   r   r\   xatolxrtolfatolfrtolMbP?r   ri   r]   r   r   r   r   )r&   randomdefault_rngdictcopyr   rV   absr   r   r   r   r   r   r   rb   )rS   rngpbracketr\   kwargs0rt   res1j1res2j2h1h2s                r   test_convergencez)TestChandrupatlaMinimize.test_convergence   sY   ii##$78JJAJtD!1Ew%dffAwA&A477"#"aw/0w%dffAwA&A477"#"aw/0"b!w%dffAwA&A477"#"aw/DFF;<w%dffAwA&A477"#"aw/DFF;<"b!w%dffAwA&A1tww;&01"aw/0w%dffAwA&A1tww;&01"aw/0"b!w%dffAwA&A1tww;&01"aw/DHH=>w%dffAwA&A1tww;&01"aw/DHH=>"b!r    c                      dddt         j                  gfd}t        j                  |j                        rJ t        j
                  |j                  dz   k(        sJ t        j
                  |j                  k(        sJ  fdt        j                  _	        t        j                  _
        d_        d _        t         j                  gfd}|j                         D ]}  }|d	k(  rS||   t        j                  k(  sJ j                  |   t        j                   k(  sJ ||   t        j"                  k(  rYJ ||   j                  |   cxk(  r
||   k(  rzJ  J  y )
N~,?r   r"   r   r.   c                    xj                   dz  c_         | _        t        | d      sJ j                   dk(  r(| j                  | j                  | j
                  fk(  sJ | j                  j                  k(  | j
                  j
                  k7  z  }| j                  j                  k7  | j
                  j
                  k(  z  }t        j                  ||z        sJ | j                  _        | j
                  _        | j                  t        j                  k(  sJ t        j                  | j                        | j                         t        j                  | j                        | j                         t        j                  | j
                        | j                         t        j                  | j                         | j"                         j                   k(  rt$        y Nr   r   r   )iterrd   hasattrr   r   r   r&   allr~   r   _EINPROGRESSr   rV   r   r   r   r   rb   StopIteration)rd   
changed_xr
changed_xlr   callbackrT   r7   rS   s      r   r   z@TestChandrupatlaMinimize.test_maxiter_callback.<locals>.callback(  sm   MMQMHL3$$$}}!/7:::!ff3(++8MN
!ff3(++8MN
vvj:5666&&HK&&HK::!1!1111,cff5,cff5,cff5s+SWW5}}'## (r    r<   r\   r   r~   )r   rV   r&   anyrz   r   r   r   r   r   r   r   rd   keysr   r   r   
_ECALLBACK)rS   rd   r   keyr   r   rT   r7   s   `   @@@@r   test_maxiter_callbackz.TestChandrupatlaMinimize.test_maxiter_callback  sd   $TVV 6g 6SF-4666#++&&&vvchh'!)+,,,vvcgg()))	$ 	$, ffff%dff 9w 9cV/79
 88:Ch3x3==000||C(C,<,<<<<CyCNN222CyHLL$5ASAAAAA r    casec           
          |\  }}}d}||z   }t        |||      \  }}}}}	}
d}d}d}d}t        ||||||||      }t        |j                  |       y )Ng?g-C6?r]   gؗҜ<)r   r   r   r   )r;   r   r   r   )rS   r   r3   r4   r   r8   r5   r:   r   r$   r(   r   r   r   r   rd   s                   r   test_nit_expectedz*TestChandrupatlaMinimize.test_nit_expectedP  sz    
 b# $Y!1$B!?BBB $T2r2U+0ULSWWc"r    g?gffffff?r|   c           	      ,    |      }fd}t        | d       d       d      |f      }|j                  j                  k(  sJ t        |j                  |t	        j
                  t	        j                        j                               y )Nc                 T    | j                   k(  sJ | |z
  dz  j                        S Nr   )r|   astype)r   rT   r|   s     r   rV   z.TestChandrupatlaMinimize.test_dtype.<locals>.fm  s.    77e###WN**511r    r   r"   r[   r^   )r   r   r|   r   r&   sqrtfinfoeps)rS   rT   r|   rV   rd   s     `  r   
test_dtypez#TestChandrupatlaMinimize.test_dtypef  su    
 Cj	2 %Qb	58U1X+.&2uu{{e###s%1D1D)EFr    c                    d}t        j                  t        |      5  t        d ddd       d d d        d}t        j                  t        |      5  t        d ddd       d d d        d	}t        j                  t        |      5  t        d
 ddgddgg d       d d d        d}t        j                  t        |      5  t        d ddgddgddg       d d d        d}t        j                  t        |      5  t        d dddd       d d d        t        j                  t        |      5  t        d dddt        j
                         d d d        t        j                  t        |      5  t        d dddd       d d d        t        j                  t        |      5  t        d dddt        j
                         d d d        d}t        j                  t        |      5  t        d dddd       d d d        t        j                  t        |      5  t        d  dddd       d d d        d!}t        j                  t        |      5  t        d" dddd#$       d d d        y # 1 sw Y   KxY w# 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   ?xY w# 1 sw Y   	xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)%N`func` must be callable.matchr@   r   ri   3Abscissae and function output must be real numbers.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>      Qr                ?z+shape mismatch: objects cannot be broadcastc                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    r>   r   r.   ri   r"   z:The shape of the array returned by `func` must be the samec                     | d   | d   | d   gS Nr   r   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  s    adAaD!A$-?r    r"   (Tolerances must be non-negative scalars.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    r<   )r   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    )r   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    ekki)r   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    )r   )`maxiter` must be a non-negative integer.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r          ?r7   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    `callback` must be callable.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r   r    	shrubbery)r   )pytestraises
ValueErrorr   r&   r   )rS   messages     r   test_input_validationz.TestChandrupatlaMinimize.test_input_validationv  s.    -]]:W5"4Q2 6 H]]:W5";q!< 6 @]]:W5";R1a&)L 6 O]]:W5"#?"b$%q6Aq63 6 =]]:W5";AqC 6]]:W5";AqG 6]]:W5";AqG 6]]:W5";AqG 6 >]]:W5";Aq#F 6]]:W5";Aq"E 6 1]]:W5";Aq;O 65E 65 65
 65 65
 65555555 6555 65s   I6JJJ=J*2 J75K* K/K$K*K66J JJJ'*J47KKKK'*K36K?c                 ,   t        j                  ddd      d d t         j                  f   }t        j                  t	        t        g d                  j                  }t        | j                  g|d|fi}t        j                  t        j                  |j                  |      |j                  | j                  ||      k(  z        sJ |j                  d d df   }t        t        j                  |j                  j                  |      ddi y )	Nr<   r   r#   r   r\   r   r_   V瞯<)r&   rv   newaxisr   listr   Tr   rV   r   iscloser   rb   r   broadcast_arrays)rS   rT   bracketsrd   re   s        r   test_bracket_orderz+TestChandrupatlaMinimize.test_bracket_order  s    kk"a#ArzzM288Dj!9:;==$TVVDhDcVDvvbjj,466#s;K0KLMMMeeAqDk,,SUUWWc:GGr    c           
         d }t        j                  d      5  t        |ddddd      }d d d        j                  sJ t	        |j
                  dd	
       t        |j                  d       d }t        |ddd      }|j                  sJ t        |j
                  d       d }d}t        |g|ddi}|j                  sJ |j                  |k(         |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j
                  dk(  sJ d }t        |dddd      }t	        |j
                  d       d }t        |ddt         j                  dddd      }|j                  sJ |j                  |j                  cxk  r|j                  k  sJ  J  ||j                         ||j                        cxk(  r ||j                        k(  sJ  J y # 1 sw Y   xY w)Nc                 r    t        j                  | j                  t         j                        sJ | dz
  dz  S )Nr   r   )r&   r{   r|   floatingr   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s,    =="++666aCC<r    ignoreinvalidr   r-   )r   r   r   r   r^   c                     | dz
  dz  S Nr   r   r   r   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f      aC!8Or    c                     | dz
  dz  S r  r   r   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  r  r    )r   皙?r"   r7   r.   r>   r!  c                     | |z
  dz  dz
  S )Nr   r   r   r   cs     r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s    aC!8a<r    r<   UUUUUU?r[   c                 .    t        j                  |        S rP   )r&   sinr   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s    FF1I:r    )r   r   r   r   )r&   errstater   rz   r   r   r   rb   r   r   r   r   r~   r   r   )rS   rV   rd   r   s       r   test_special_casesz+TestChandrupatlaMinimize.test_special_cases  s   
	  [[*(B1AQGC +{{{qt,SWWa 	 %Q1a0{{{SUUA	 $Q<<!<vv(svv((vww!||xx1}}zzRuu||	  %QAqs;s#	 %Q1bee1A+,A7{{{vv''''''yAcffI236622222Y +*s   G''G1N)__name__
__module____qualname__rV   r  markparametrizer&   rv   rf   tupler   r   r   r   casesr   float16float32float64r   r  r  r)  r   r    r   rN   rN   u   s   " [[US+"++eT2*F$GH, I, [[Wuwvy&IJJ7 KJ7X,,2"h2Bh [[VU+# ,#* [[UTD#;$78[[Wrzz2::rzz&JKG L 9G'PRH53r    rN   skip_xp_backendsarray_api_strictz	jax.numpyz)Currently uses fancy indexing assignment.z*JAX arrays do not support item assignment.)reasonsc            	          e Zd Zd Zej
                  j                  dd ej                  ddd      g      d        Z	ej
                  j                  d e
       d	d
dg      d        Zd Zd Zd Zej
                  j                  de      d        Zej
                  j                  ddddgf      ej
                  j                  dd      d               Zd Zd Zy)TestChandrupatlac                 2    t        j                  |      |z
  S rP   )r   ndtr)rS   qr   s      r   rV   zTestChandrupatla.f  s    ||A""r    r   rW   rL   rX   rI   c                 `   |j                  d      |j                  d      }}t        | j                  |||j                  |      f      }|j                  t        j                         j                  |      |j                  |      j                        }t        |j                  |       y )N      r*   r[   r   )	asarray_chandrupatla_rootrV   r   rQ   ppfr|   r
   r   )rS   r   xpabrd   re   s          r   rf   zTestChandrupatla.test_basic  s{     zz#

21 ARZZ]4DEjj))!,BJJqM4G4GjHs#r    rc   rg   rh   rj   c           
          |r&t        j                  ddd      j                  |      nt        j                  d      }|j	                  |      }|f}|j
                  }t        |      }t         j                   fd       } fdd_        t        |j	                  d      |j	                  d	      |
      }	 ||      j                         }
|
D cg c]  }|j                   }}|j                  |j	                  ||      |      }t        |	j                  |       |
D cg c]  }|j                   }}|j                  |j	                  ||      |      }t        |	j                  |d       t        |	j                    j                  |	j                  g|        |
D cg c]  }t!        |j"                         }}|j                  |j	                  ||j                         |      }t        |	j"                  |       |
D cg c]  }|j$                   }}|j                  |j	                  ||j&                        |      }t        |	j$                  |       |
D cg c]  }|j(                   }}|j                  |j	                  ||j&                        |      }t+        |      r@t        |	j(                  |       |j-                  |	j(                        j                  k(  sBJ |	j(                  j.                  |k(  sJ |	j(                  j
                  |j&                  k(  sJ |
D cg c]  }|j0                   }}|j                  |j	                  ||j&                        |      }t+        |      rCt        |	j0                  |       |j-                  |	j0                        j                  dz
  k(  sBJ |	j0                  j.                  |k(  sJ |	j0                  j
                  |j&                  k(  sJ |
D cg c]  }|j2                   }}|j                  |j	                  ||      |      }t        |	j2                  |       |
D cg c]  }|j4                   }}|j                  |j	                  ||      |      }t        |	j4                  |       t7        |	j2                  |	j4                         |j9                  |	j                        }|j;                  |	j                  |   |	j2                  |   k(  |	j                  |   |	j4                  |   k(  z        sJ t+        |      rdnd}|
D cg c]  }|j<                   }}|j                  |j	                  ||      |      }t        |	j<                  ||       t        |	j<                    j                  |	j2                  g|        |
D cg c]  }|j>                   }}|j                  |j	                  ||      |      }t        |	j>                  ||       t        |	j>                    j                  |	j4                  g|        |j;                  |jA                  |	j                  |         tC        |jA                  |	j<                  |         |jA                  |	j>                  |               k(        sJ y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )NrL   rX   rH   rW   c                 8    t        j                  dd| f      S )NrZ   r"   r[   )r?  rV   )r   rS   s    r   rn   z@TestChandrupatla.test_vectorization.<locals>.chandrupatla_single  s    %dffb!1$??r    c                  R    xj                   dz  c_          j                  | i |S rp   rq   rs   s     r   rV   z.TestChandrupatla.test_vectorization.<locals>.f  ru   r    r   r=  r*   r[   r   r  r`   r   g&.>)"r&   rv   rw   r3  r>  r|   r	   rx   rr   r?  ry   r   r
   rb   r   rV   boolrz   r~   int32r   r   r   rc   r   r   r   r   isfiniter   r   r   r   r   )rS   rc   rA  r   p_xpargs_xpr|   xp_testrn   rd   r   re   r   r   r   r   r   r   r   r   finiter`   r   r   rV   s   `                       @r   r   z#TestChandrupatla.test_vectorization  s    =BR[[b)11%8**S/ 	
zz!}'

!$'		@ 
	@	+ 	 BJJsORZZ^'R"1%++-"&'$3$'

2::e5:95Au%&*+ds377d+**RZZuZ=uEu5!8!89489DStCKK(D9jjKw||!LeT[1*./$3CJJ$/::bjjjBEJ

H-(,-CHH-::bjjjBEJB<CHHh/66#((#qyy00088>>U***88>>RXX---&*+ds377d+**RZZrxxZ@%HB<CGGW-66#''?aiik11177==E)))77==BHH,,,$()DS#&&D)BJJvUJ;UC'$()DS#&&D)BJJvUJ;UC'svvsvv&SUU#vvsuuV}v6v#&&.8: ; 	; ; !u$$()DS#&&D)BJJvUJ;UCT2svv 8 89$()DS#&&D)BJJvUJ;UCT2svv 8 89vvbffSWWV_- v!7!#v!799 : 	: :{ ( ,
 : 0 . , * * *
 *s<   [)[.[[/[! [&[+&[0[5[:c                    fd}j                  dj                        f}j                  dgdz        j                  j                  gdz        }}t	        ||||d      }j                  t
        j                  t
        j                  t
        j                  t
        j                  gj                        }t        |j                  |       y )Nc           	      J   |j                   j                  k(  sJ t              r=d d d fdg}t        | |      D cg c]  \  }} |t	        |         |       c}}S d d d fdg}t        | |      D cg c]  \  }} ||   |       c}}S c c}}w c c}}w )	Nc                     | dz
  S Nr   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>S  s    1s7r    c                     | dz
  S r   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>T  s    1r6r    c                     | dz
  dz  S N皙?r.   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>U  s    AGa<r    c                 <    j                  | j                        S rP   )	full_liker   r   rA  s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>V  s    2<<266#:r    c                     | dz
  S rR  r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>Y  s    q3wr    c                     | dz
  S r   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>Z  r   r    c                     | dz
  dz  S rU  r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>[  r   r    c                     j                   S rP   )r   rY  s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>\  s	    rvvr    )r|   r   r   r   int)r   r   r   r   r   rA  s        r   rV   z&TestChandrupatla.test_flags.<locals>.fM  s     88rxx'''r{*)/:< 69R[A[TQc!fa([AA&%-%'E -0BK8KDAqHE!HQKK88 B 9s   B Bri   r           r   r   )r   r   r>  r   r?  r   r   r   r   r   rI  r   r~   )rS   rA  rV   r\   rB  rC  rd   r   s    `      r   r   zTestChandrupatla.test_flagsJ  s    	9$ 		!288	,.zz2$q&!2::ruugai#81 AqtQ?JJ # # # 0 8:xx  A	 	

I.r    c           	      	   t         j                  j                  d      }|j                  |j                  d            }|j                  d       |j                  d      f}|f}t	        |dddd      }|j                         }d|d<   t        | j                  g|i |}t        |j                  |j                  z
  |j                  |d             d	|d<   t        | j                  g|i |}	t        |	j                  |	j                  z
  |j                  |d	             t        |	j                  |	j                  z
  |j                  |j                  z
         |j                         }d|d
<   t        | j                  g|i |}t        |j                  |j                  z
  d|j                  |j                        z         d	|d
<   t        | j                  g|i |}	t        |	j                  |	j                  z
  d	|j                  |	j                        z         t        |	j                  |	j                  z
  |j                  |j                  z
         |j                         }d|d<   t        | j                  g|i |}t        |j                  |j                        |j                  |d             d	|d<   t        | j                  g|i |}	t        |j                  |	j                        |j                  |d	             t        |j                  |	j                        |j                  |j                               |j                         }d|d<   |\  }
}t        |j                   | j                  |
g|       |j                   | j                  |g|             }t        | j                  g|i |}t        |j                  |j                        d|z         d	|d<   t        | j                  g|i |}	t        |j                  |	j                        d	|z         t        |j                  |	j                        |j                  |j                               y )Nr   r.   r   r*   r   r   r   r   r]   r   r   r   )r&   r   r   r>  r   r   r?  rV   r   r   r   rX  r   r   rb   r   )rS   rA  r   r   r   r\   r   rt   r   r   r4   r5   f0s                r   r   z!TestChandrupatla.test_convergencei  s~   ii##$78JJszzqz)*JJrN?BJJrN3tD!1Ew!$&&=7=f=tww(",,q$*?@w!$&&=7=f=tww(",,q$*?@tww($''DGG*;<w!$&&=7=f=tww($*?@w!$&&=7=f=tww($*?@tww($''DGG*;<w!$&&=7=f=rvvdhh'a)>?w!$&&=7=f=rvvdhh'a)>?rvvdhh')9:wBvtvvb0401266&$&&:Kd:K3LM!$&&=7=f=rvvdhh'b1w!$&&=7=f=rvvdhh'b1rvvdhh')9:r    c                 P   	 j                  d      	j                  d      j                  d      fdfdd _        d _        t        g	fd}j	                  |j
                        rJ j                  |j                  dz   k(        sJ j                  |j                  k(        sJ 	 fdd	_	        d _
        d _        d _        t        g	fd
}|j                         D ]  }|dk(  rqt        ||   j                  t        j                   j"                               t        ||   j                  t        j$                  j"                               y|j'                  d      rt        ||   ||           y )Nr   r=  r*   r"   c                 T    t        j                  |       |z
  }| _        |_        |S rP   )r   r:  r   rb   )r;  r   rd   rV   s      r   rV   z1TestChandrupatla.test_maxiter_callback.<locals>.f  s(    ,,q/A%CACAEJr    r   r   c                 r   xj                   dz  c_         | _        t        | d      sJ j                   dk(  r| j                  | j                  fk(  s|J | j                  j                  k(  | j                  j                  k7  z  | j                  j                  k7  | j                  j                  k(  z  z  }j                  |      sJ | j                  _        | j                  _        | j                  t        j                  k(  sJ t        j                  | j                        | j                         t        j                  | j                        | j                         t        j                  | j                        | j                         j                   k(  rt        y r   )r   rd   r   r   r   r   r~   r   r   r   rV   r   r   r   rb   r   )rd   changedr   r   r7   r   rS   rA  s     r   r   z8TestChandrupatla.test_maxiter_callback.<locals>.callback  sG   MMQMHL3$$$}}!'7222 VVx{{2svv7LM"vv48;;9NOQvvg&&&HK&&HK::!1!1111DFF3661-svv6DFF3661-svv6DFF355!,cgg6}}'## (r    r<   r   r~   r   _)r>  r   rb   r?  r   rz   r   r   r   r   rd   r   r   r   r   r   r   rI  r   
startswith)
rS   rA  rd   r   r   r   r   rV   r7   r   s
   ``   @@@@@r   r   z&TestChandrupatla.test_maxiter_callback  sm   JJx ::c?BJJrN3	
  IWIA4I66#++&&&vvchh'!)+,,,vvcgg()))	$ 	$( !!LgLQD8L 88:ChC"**S]]"((**STS	2::cnnBHH:+UV$S	3s84 r    r   c                    |\  }}}}}|j                  |d   |j                        |j                  |d   |j                        f}|j                  ||j                        }t        |g|ddd}t        |j                  |j                   ||      |j                        dd	       t        |j                  |j                  ||j                               y )
Nr   r   r   g|=gh㈵>)r   r   g:0yE>gMb`?)r_   r`   )r>  r3  r?  r
   rb   r   r   rI  )	rS   r   rA  rV   r   rootnfevalidrd   s	            r   r   z"TestChandrupatla.test_nit_expected  s    
 (,$7D&"
 ::gaj

:;::gaj

:;=zz$bjjz1 FWFEFAdG2::!F!	."**V288*"DEr    ri  gCl?gV-?r|   )r1  r2  r3  c                    t               }|rdk(  rt        j                  d       t        d       t        j                   d        fd}j	                  d      j	                  d      }}j	                  |      }t        ||||fd	      }	 t        |j                  |d
       y # t        $ r< |j                  j                  k(  sJ j                  |j                  dk(         Y y w xY w)Nr1  z0`float16` dtype only supported for NumPy arrays.z does not support c                 T    | |z
  dz  }t              rj                  |      S |S )Nr   r   )r   r>  )r   ri  rd   r|   rA  s      r   rV   z&TestChandrupatla.test_dtype.<locals>.f  s0    t8"C|zz#Uz33Jr    r   r   r.   r   )r\   r   rG  r   )r   r  skipgetattrr>  r?  r
   r   AssertionErrorr|   r   rb   )	rS   ri  r|   rA  	not_numpyrV   rB  rC  rd   s	     ``     r   r   zTestChandrupatla.test_dtype  s     !$	)+KKJKE4(=KK2$089	 zz"Ez*BJJqJ,F1zz$ez, AqwdC	!CEE4d3 	!55;;%'''FF377a< 	!s   %B> >ADDc                 "   d }d}t        j                  t        |      5  |j                  d      |j                  d      f}t	        d g|  d d d        d}t        j                  t        |      5  |j                  d      |j                  d      f}t	        |g|  d d d        d}t        j                  t        t
        f|      5  |j                  d	d
g      |j                  g d      f}t	        |g|  d d d        d}t        j                  t        |      5  |j                  d
d
g      |j                  ddg      f}t	        d g|  d d d        d}|j                  d      |j                  d      f}t        j                  t        |      5  t	        |g|ddi d d d        t        j                  t        |      5  t	        |g|d|j                  i d d d        t        j                  t        |      5  t	        |g|ddi d d d        t        j                  t        |      5  t	        |g|d|j                  i d d d        d}t        j                  t        |      5  t	        |g|ddi d d d        t        j                  t        |      5  t	        |g|ddi d d d        d}t        j                  t        |      5  t	        |g|ddi d d d        y # 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   3xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                     | S rP   r   r   s    r   r3   z4TestChandrupatla.test_input_validation.<locals>.func  s    Hr    r   r   r@   ri   r   r   z...not be broadcast...r>   r   r   z,The shape of the array returned by `func`...r"   c                     | d   | d   | d   gS r   r   r   s    r   r   z8TestChandrupatla.test_input_validation.<locals>.<lambda>  s    !A$!ad);r    r   r   r<   r   r   r   r   r   r7   r  r  r   r  )r  r	  r
  r>  r?  RuntimeErrorr   )rS   rA  r3   r  r   s        r   r  z&TestChandrupatla.test_input_validation  s   	 -]]:W5jjnbjjm3Gt.g. 6 H]]:W5jj'A6Gt.g. 6
 +]]J5WEjj"b*BJJy,AAGt.g. F A]]:W5jj"b*BJJ1v,>>G;FgF 6 =**R."**Q-/]]:W5t8g8R8 6]]:W5t<g<RVV< 6]]:W5t<g<V< 6]]:W5t<g<RVV< 6 >]]:W5t;g;s; 6]]:W5t:g:r: 6 1]]:W5tDgDD 65M 65
 65 FE
 65 65555555 6555 65s   /L5/L3L'4L,"L9MMM M-7M9,NLLL),L69MMM M*-M69NNc                 

   d }|j                  g d      |j                  g d      }}t        j                  dd      5  t        |||      }d d d        |j	                  j
                        sJ t        |j                  dd  |j                  d|j                  d                t        |      fd	}t        ||j                  d
      |j                  d            }|j
                  sJ t        |j                  |j                  d             d }|j                  ddg      }t        ||j                  d      |j                  d      |f      }t        |j
                  |j                  ddg             t        |j                  |j                  t        j                  dg             d }t        j                  d      5  |j                  |j                        }t        |||      }d d d        |j
                  sJ t        |j                  |j                  t        j                               d }|j                  d      |j                  d      }}t        |||d      }t        |j
                  |j                  d             t        |j                  |j                  d|j                               t        |j                  |j                  d|j                               t        |j                   |j                  d|j                               t        |j"                  |       t        |j$                  |       t        |j                  |       t        || | d      }t        |j                  |        t        |||d      }t        |j
                  |j                  d             t        |j                  |j                  d|j                               t        |j                  |j                  d|j                               t        |j                   |j                  d|j                               t        |j                  |j                  d             d }t        ||j                  d      |j                  d      |j                  d            }t        |j                  |j                  d             y # 1 sw Y   xY w# 1 sw Y   xY w)Nc                 &    d| z  dz   d|  dz   z  z
  S rp   r   r   s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.f2  s    q519qQBF|++r    )rV  r_  r_  rV  )?      ?rx  ry  r  )divider  r   )r.   r   c                 P    j                  | j                  d      sJ | dz  dz
  S )Nzreal floating   r   )isdtyper|   )r   rM  s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.f@  s)    ??177O<<<7Q;r    r  r"   ry  c                     | dz  |z
  S r   r   )r   ri  s     r   rV   z.TestChandrupatla.test_special_cases.<locals>.fL  s    a4$;r    r[   FTc                     d| z  S rp   r   r   s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.fT  s    Q3Jr    r  c                     | dz  dz
  S )Nr.   r   r   r   s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.f^  s    a4!8Or    g      r*   r  r>   r   r   r.   c                     || z  dz
  S rp   r   r#  s     r   rV   z.TestChandrupatla.test_special_cases.<locals>.fx  s    Q37Nr    r<   r%  )r>  r&   r(  r?  r   rz   r
   r   fullr	   r   r   infr~   rI  r   r   r   r   )	rS   rA  rV   rB  rC  rd   ri  r  rM  s	           @r   r)  z#TestChandrupatla.test_special_cases.  s   	, zz,-

;O0P1[[(;$Q1-C < vvckk"""ab	2774q#:; "!$	 !BJJrNBJJqMB{{{rzz"~.	 zz1a&! BJJqM2::a=wORZZ%>?rzz2662,78	 [[***RVV$C$QS1C + {{{rzz"&&12	 zz#

21 Aq!4RZZ%67

BJJrJ$BCARXX!>?"**Qbhh*"?@""q! QBA6r" !Aq!4RZZ%56

BJJqJ$ABARXX!>?"**Qbhh*"?@rzz"~.	 !BJJrNBJJqM

STVrzz#/K <;@ +*s   S+)S8+S58TN)r*  r+  r,  rV   r  r-  r.  r&   rv   rf   r/  r   r   r   r   r   r   r   r  r)  r   r    r   r8  r8    s   # [[S3E4(D"EF$ G$ [[Wuwvy&IJU: KU:n/>,;\75r [[V%89F :F$ [[VeeU^%<=[[W&GH! I >!2.E`N0r    r8  ).r  numpyr&   numpy.testingr   r   r   scipyr   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy.conftestr   scipy._lib._array_apir	   r
   r   r   r   r   r   scipy.optimize._chandrupatlar   r   r?  scipy.optimize._tstutilsr   	itertoolsr   
test_zerosr   r   r$   r(   r+   r0   r;   r0  rN   r-  usefixturesr4  r8  r   r    r   <module>r     ss     J J   6 6 /R R RO 8 " -8(%"(8	RL8	RL8	 RL8	 RL	8	
 bM8	 bM8	 bM8	 rN8	 rN8	 rN8	 O8	 QK8	 QK8	 QK8	 QK8	  aL!8	" aL#8	$ aL%8	& rN'8	( rN)8	* rN+8	, O-8	. RL/8	0 RL18	2 RL38	4 RL58	6 bM78	8 bM98	: bM;8	< rN=8	> rN?8	@ rNA8	B OC8	D NE8	F OG8	H OI8	J OK8	L OM8	N NO8	P NQ8	R NS8	T OU8	V OW8	X OY8	Z N[8	\ N]8	^ N_8	` Oa8	b Nc8	d Ne8	f Ng8	h Ni8	j Nk8	l Nm8	n No8	vh3 h3V +,0+'R'S'U  VW0, W0V - 
W0r    