
    Џkh                     n    d Z ddlmc mZ ddlmZmZ d Zd Z	ddZ
d Zd Zd	 Zd
 ZdddZdddZy)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_dtypec                     |j                  |       } |j                  | j                  d      r3t        |       |j	                  |       z   |j                  |       dz  z   }n| }|j                  |      }| |   S )Ncomplex floating   )asarrayisdtypedtypeabsrealimagargsort)arrxpsorteridxss       S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/signal/_polyutils.py_sort_cmplxr      sh     **S/C	zz#))/0SBGGCL(2773<?:::fDt9    c                   | j                   d   dk  r|j                  g | j                        S t        |dd      }|r ||       S | j                   d   }|j	                  |dz
  |dz
  d| j                        }|j                  | dd        | d   z  |dddf<   t        |j                  d	      r|j                  j                  |      S ddl	}|j                  |j                  j                  |j                  |                  S )
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                     d}|j                         }d|v r| D ]  }|dk7  r n|dz   } | j                  d   }d|v r| d d d   D ]  }|dk7  r n|dz
  } | || S )Nr   Fg        r   Br   )upperr   )filttrimfirstilasts        r   _trim_zerosr4   3   s    E::<D
d{ 	"ABw			"
 ::a=D
d{dd 	 ABwax		 
 dr   c                    t        j                  | d|      } | j                  dkD  rt        d      t	        | d      } | j
                  d   dk(  r|j                  dg| j                        } | S )zM Constructor of np.poly1d object from an array of coefficients (r=False)
    r   ndimr   zPolynomial must be 1d only.f)r0   r   r   )xpx
atleast_ndr7   
ValueErrorr4   r   r   r
   )c_or_rr   s     r   _poly1dr=   J   sf     ^^Fr2F{{Q677c*F||A!QCv||4Mr   c                F    |j                  |      }| D ]
  }||z  |z   } |S )z( Old-style polynomial, `np.polyval`
    )
zeros_like)pxr   ypvs        r   polyvalrD   W   s3     	aA EBJHr   c                z   |j                  |       } t        j                  | d|      } | j                  d   dk(  ryt	        |dd       }|ddlm} | j                  }|j                  d|      }|j                  | d         }| D ]  } |||j                  || f      d	
      }! |j                  |j                  d      rv|j                  | |j                        }|j                  t        ||      t        |j                  |      |      k(        r"|j                  |j!                  |      d      }|S )Nr   r6   r   g      ?convolverF   r   r   full)moder   T)copy)r   r9   r:   r   r   scipy.signalrF   r
   ones	ones_likestackr	   
complex128allr   conjr   )seq_of_zerosr   convolve_funcdtr(   onezeror   s           r   polyrX   b   s   ::l+L>>,Q2>L!! B
D1M:			B
BA
,,|A
'C B!RXXsTEl3&AB 
zz!''-.

<r}}
=66+eR(K,KKL

2771:D
1AHr   c                v    t        | |      t        ||      }} t        |dd       }|ddlm}  || |      }|S )N)r   rF   r   rG   )r=   r   rL   rF   )a1a2r   rT   vals        r   polymulr]      sC    RB!3B B
D1M:
B
CJr   T)tensorc                   |j                  |j                  d      r|j                  |t        |            }t	        j
                  |d|      }t        | t        t        z        r|j                  |       } |r,|j                  ||j                  d| j                  z  z         }t        |d   | d|      \  }}t        d|j                  d	   dz         D ]  }|| d
f   || z  z   } |S )Nintegralr   r6   rH   )r   .T)	broadcastr   r   r   .)r	   r
   astyper   r9   r:   
isinstancetuplelistr   reshaper   r7   r   range)rA   cr   r^   c0_r2   s          r   npp_polyvalrk      s    	zz!'':&IIa)"-.qqR(A!UT\"JJqMJJq177T!&&[02qz1<EB1aggaj1n% r3wZ"Q$Ir   c                T   t        j                  |d|      }t        | t        t        z        r|j                  |       } |r-|j                  ||j                  d| j                  z  z         }n$| j                  |j                  k\  rt        d      |j                  | |z
  d      S )Nr   r6   rH   z,x.ndim must be < r.ndim when tensor == Falser   )axis)r9   r:   rc   rd   re   r   rf   r   r7   r;   prod)rA   rr   r^   s       r   npp_polyvalfromrootsrp      s    qqR(A !UT\"JJqMJJq!''D166M12	
166	GHH771q5q7!!r   )fb)__doc__scipy._lib.array_api_extra_libarray_api_extrar9   scipy._lib._array_apir   r   r   r*   r4   r=   rD   rX   r]   rk   rp    r   r   <module>rx      sL    ) ( >
<4.	:	  %) " .2 "r   