
    doi                          S r SSKrSSKJs  Jr  SSKJrJrJ	r	J
r
Jr   SSKJr  S rS rSS jrSS jrS	 rS
 rS rS rSS.S jrSS.S jrSS.S jrg! \ a	    SSKJr   N@f = f)a0  Partial replacements for numpy polynomial routines, with Array API compatibility.

This module contains both "old-style", np.poly1d, routines from the main numpy
namespace, and "new-style", np.polynomial.polynomial, routines.

To distinguish the two sets, the "new-style" routine names start with `npp_`
    N)
xp_promotexp_default_dtypexp_size	xp_deviceis_numpy)RankWarningc                     UR                  U 5      n UR                  U R                  S5      (       a3  [        U 5      UR	                  U 5      -   UR                  U 5      S-  -   nOU nUR                  U5      nX   $ )Ncomplex floating   )asarrayisdtypedtypeabsrealimagargsort)arrxpsorteridxss       S/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/signal/_polyutils.py_sort_cmplxr      si     **S/C	zz#))/00SBGGCL(2773<?:::fD9    c                    U R                   S   S:  a  UR                  / U R                  S9$ [        USS5      nU(       a  U" U 5      $ U R                   S   nUR	                  US-
  US-
  SU R                  S9nUR                  U SS 5      * U S   -  USS2S4'   [        UR                  S	5      (       a  UR                  R                  U5      $ SSK	nUR                  UR                  R                  UR                  U5      5      5      $ )
z(numpy.roots, best-effor replacement
    r      r   rootsN   )kr   eigvals)
shaper   r   getattreyefliphasattrlinalgr!   numpy)coefr   	root_funcnanps         r   	polyrootsr.   "   s     zz!}qzz"DJJz//GT*I  	

1A
q1ua!er4AQR!!DG+AaeH ryy)$$yy  ##zz"))++BJJqM:;;r   c                     SnUR                  5       nSU;   a  U  H  nUS:w  a    O	US-   nM     U R                  S   nSU;   a  U S S S2    H  nUS:w  a    O	US-
  nM     XU $ )Nr   F        r   Br   )upperr"   )filttrimfirstilasts        r   _trim_zerosr9   <   s~    E::<D
d{ABw		 
 ::a=D
d{ddABwax	 
 dr   c                 |   [        XSUS9u  pUcL  UR                  U R                  5      R                  [	        U R
                  S   U R
                  S   5      -  n[        U5      (       a  SSKJn  U" XUS9$ [        UR                  SS 5      =n(       a  U" XUS	9$ UR                  R                  U S
S9u  pgnXs:  n	[        R                  " X4S SS9nUR                  UR
                  S   5      U-  n
UR                  U
-  UR                  -  U-  nUR!                  U	5      nUR#                  / 5      nXX4$ )NTforce_floatingr   r   r   )lstsq)condr>   rcondF)full_matricesc                     SU -  $ )N      ? )xs    r   <lambda>_lstsq.<locals>.<lambda>d   s    26r   r1   )
fill_value)r   finfor   epsmaxr"   r   scipy.linalgr>   r#   r'   svdxpxapply_wherer$   Tcount_nonzeror   )r,   br   rA   s_lstsq
lstsq_funcusvtsing_val_masksigmarF   rank	residualss                 r   _lstsqr]   S   s!   a4B7DA}!%%AGGBK(EE||1q%((ryy'48	8	8!e,, 99==%=8b	OOM41AbQqwwqz"Q&DD5L133". JJrN	T$$r   c                    [         R                  " U SUS9n U R                  S:  a  [        S5      e[	        U SS9n U R
                  S   S:X  a  UR                  S/U R                  S9n U $ )zLConstructor of np.poly1d object from an array of coefficients (r=False)
    r   ndimr   zPolynomial must be 1d only.f)r5   r   r   )rO   
atleast_ndr`   
ValueErrorr9   r"   r   r   )c_or_rr   s     r   _poly1dre   t   sf     ^^Fr2F{{Q677c*F||A!QCv||4Mr   c                    UR                  U 5      n UR                  U5      nUR                  U5      n[        U R                  S   5       H  nX1-  XS4   -   nM     U$ )z'Old-style polynomial, `np.polyval`
    r   .)r   
zeros_likeranger"   )prF   r   yjs        r   polyvalrl      s\     	

1A


1A
aA 1771:EAfI Hr   c          
         UR                  U 5      n [        R                  " U SUS9n U R                  S   S:X  a)  UR                  SUR	                  U 5      R
                  S9$ [        USS 5      nUc  SSKJn  U R
                  nUR                  SUS9nUR                  U S   5      nU  H  nU" XAR                  XV* 45      S	S
9nM     UR                  UR
                  S5      (       a  UR                  XR                  S9nUR                  UR                  UR!                  U5      5      UR                  UR!                  UR#                  U5      5      5      :H  5      (       a  UR                  UR	                  U5      SS9nU$ )Nr   r_   r   rD   r   convolvern   r   full)moder
   T)copy)r   rO   rb   r"   r   r   r#   scipy.signalrn   ones	ones_likestackr   
complex128allsortr   conj)seq_of_zerosr   convolve_funcdtr,   onezeror   s           r   polyr      sL   ::l+L>>,Q2>L!!zz#RWW\%:%@%@zAA B
D1M:			B
BA
,,|A
'C!XXsEl3&A  
zz!''-..

<}}
=66"''"''%.)RWWRWWRWWU^5L-MMNN

2771:D
1AHr   c                d    [        XS9[        XS9p[        USS 5      nUc  SSKJn  U" X5      nU$ )N)r   rn   r   ro   )re   r#   rt   rn   )a1a2r   r}   vals        r   polymulr      s;    R!3 B
D1M:

CJr   r@   c          	         [        U5      S-   nUR                  U 5      n UR                  U5      n[        XSUS9u  pUS:  a  [        S5      eU R                  S:w  a  [        S5      e[        U 5      S:X  a  [        S5      eUR                  S:  d  UR                  S:  a  [        S	5      eU R                  S   UR                  S   :w  a  [        S
5      eUc5  U R                  S   UR                  U R                  5      R                  -  nUR                  UR                  XPR                  [        U 5      S95      nU S S 2S 4   US S S 24   -  nUR                  UR                  Xw-  SS95      nXx-  n[!        XqXCS9u  ppU	R"                  U-  R"                  n	X:w  a  Sn[$        R&                  " U[(        SS9  U	$ )Nr   Tr;   r   zexpected deg >= 0zexpected 1D vector for xzexpected non-empty vector for xr   zexpected 1D or 2D array for yz$expected x and y to have same length)r   deviceaxis)rA   r   z!Polyfit may be poorly conditioned)
stacklevel)intr   r   rc   r`   	TypeErrorr   r"   rJ   r   rK   r%   aranger   sqrtsumr]   rQ   warningswarnr   )rF   rj   degr   rA   orderpowerslhsscalec_r[   msgs                r   polyfitr      s   HqLE


1A


1Aa4B7DA Qw,--vv{233qzQ9::vvzQVVaZ788wwqzQWWQZ>?? }
RXXagg.222 WWRYYuGGIaLYIJF
AtG*tQw
'C GGBFF391F-.ELC36MA$	
uA }1c;15Hr   T)tensorc                   UR                  UR                  S5      (       a  UR                  U[        U5      5      n[        R
                  " USUS9n[        U [        [        -  5      (       a  UR                  U 5      n U(       a+  UR                  XR                  SU R                  -  -   5      n[        US   U SUS9u  pE[        SUR                  S	   S-   5       H  nX* S
4   X@-  -   nM     U$ )Nintegralr   r_   rp   )r   .T)	broadcastr   r   r   .)r   r   astyper   rO   rb   
isinstancetuplelistr   reshaper"   r`   r   rh   )rF   r   r   r   c0r   r7   s          r   npp_polyvalr      s    	zz!'':&&IIa)"-.qqR(A!UT\""JJqMJJq77T!&&[02qz1<EB1aggaj1n%r3wZ"$ &Ir   c                \   [         R                  " USUS9n[        U [        [        -  5      (       a  UR                  U 5      n U(       a,  UR                  XR                  SU R                  -  -   5      nO%U R                  UR                  :  a  [        S5      eUR                  X-
  SS9$ )Nr   r_   rp   z,x.ndim must be < r.ndim when tensor == Falser   r   )rO   rb   r   r   r   r   r   r"   r`   rc   prod)rF   rr   r   s       r   npp_polyvalfromrootsr      s    qqR(A !UT\""JJqMJJq''D166M12	
166	GHH7715q7!!r   )fb)NN)__doc__r   scipy._lib.array_api_extra_libarray_api_extrarO   scipy._lib._array_apir   r   r   r   r   numpy.exceptionsr   ImportErrorr(   r   r.   r9   r]   re   rl   r   r   r   r   r   rE   r   r   <module>r      s     ( ( ",
<4.%B	:	 %) '\ %) " .2 "S  "!"s   A A&%A&