
    bi                          d Z ddlZddlmc mZ ddlmZmZm	Z	m
Z
mZ 	 ddlmZ d Zd ZddZddZd	 Zd
 Zd Zd ZdddZdddZdddZy# e$ r	 ddlmZ Y :w xY w)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                     |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       R/home/cdr/jupyterlab/.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   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                    t        | |d|      \  } }|L|j                  | j                        j                  t	        | j
                  d   | j
                  d         z  }t        |      rddlm}  || ||      S t        |j                  dd       x}r || ||	      S |j                  j                  | d
      \  }}}||kD  }	t        j                  |	|fd d      }|j                  |j
                  d         |z  }
|j                  |
z  |j                  z  |z  }|j!                  |	      }|j#                  g       }||||fS )NTforce_floatingr   r   r   )lstsq)condr>   rcondF)full_matricesc                     d| z  S )N      ? )xs    r   <lambda>z_lstsq.<locals>.<lambda>d   s
    26 r   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   s1   a4B7DAq}!%%AGGBK(EE|1q!%((ryy'48	8	8!Qe,, 99==%=81bE	OOMA41AbQqwwqz"Q&DD5L133". JJrN	)T1$$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)r5   r   r   )rN   
atleast_ndr_   
ValueErrorr9   r"   r   r   )c_or_rr   s     r   _poly1drd   t   sf     ^^Fr2F{{Q677c*F||A!QCv||4Mr   c                    |j                  |       } |j                  |      }|j                  |      }t        | j                  d         D ]  }||z  | |df   z   } |S )z( Old-style polynomial, `np.polyval`
    r   .)r   
zeros_likeranger"   )prF   r   yjs        r   polyvalrk      se     	

1A


1A
aA 1771: EAafIHr   c          
          |j                  |       } t        j                  | d|      } | j                  d   dk(  r,|j                  d|j	                  |       j
                        S t        |dd       }|ddlm} | j
                  }|j                  d|      }|j                  | d         }| D ]  } |||j                  || f      d	
      }! |j                  |j
                  d      r|j                  | |j                        }|j                  |j                  |j!                  |            |j                  |j!                  |j#                  |                  k(        r"|j                  |j	                  |      d      }|S )Nr   r^   r   rD   r   convolverm   r   full)moder
   T)copy)r   rN   ra   r"   r   r   r#   scipy.signalrm   ones	ones_likestackr   
complex128allsortr   conj)seq_of_zerosr   convolve_funcdtr,   onezeror   s           r   polyr      sS   ::l+L>>,Q2>L!!zz#RWW\%:%@%@zAA B
D1M:			B
BA
,,|A
'C B!RXXsTEl3&AB 
zz!''-.

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

2771:D
1AHr   c                v    t        | |      t        ||      }} t        |dd       }|ddlm}  || |      }|S )N)r   rm   r   rn   )rd   r#   rs   rm   )a1a2r   r|   vals        r   polymulr      sC    RB!3B B
D1M:
B
CJr   r@   c          	         t        |      dz   }|j                  |       } |j                  |      }t        | |d|      \  } }|dk  rt        d      | j                  dk7  rt        d      t        |       dk(  rt        d      |j                  dk  s|j                  dkD  rt        d	      | j                  d   |j                  d   k7  rt        d
      |5| j                  d   |j                  | j                        j                  z  }|j                  |j                  || j                  t        |                   }| d d d f   |d d d f   z  }|j                  |j                  ||z  d            }||z  }t!        ||||      \  }	}
}}
|	j"                  |z  j"                  }	||k7  rd}t%        j&                  |t(        d       |	S )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   rb   r_   	TypeErrorr   r"   rI   r   rJ   r%   aranger   sqrtsumr\   rP   warningswarnr   )rF   ri   degr   rA   orderpowerslhsscalec_rZ   msgs                r   polyfitr      s   HqLE


1A


1Aa4B7DAq Qw,--vv{233qzQ9::vvzQVVaZ788wwqzQWWQZ>?? }
RXXagg.222 WWRYYuAGGIaLYIJF
AtG*tQw
'C GGBFF391F-.E5LC326MAq$	
uA u}1c;15Hr   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   r^   ro   )r   .T)	broadcastr   r   r   .)r   r   astyper   rN   ra   
isinstancetuplelistr   reshaper"   r_   r   rg   )rF   r   r   r   c0r   r7   s          r   npp_polyvalr      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   r^   ro   z,x.ndim must be < r.ndim when tensor == Falser   r   )rN   ra   r   r   r   r   r   r"   r_   rb   prod)rF   rr   r   s       r   npp_polyvalfromrootsr      s    qqR(A !UT\"JJqMJJq!''D166M12	
166	GHH771q5q7!!r   )fb)NN)__doc__r   scipy._lib.array_api_extra_libarray_api_extrarN   scipy._lib._array_apir   r   r   r   r   numpy.exceptionsr   ImportErrorr(   r   r.   r9   r\   rd   rk   r   r   r   r   r   rE   r   r   <module>r      s     ( ( ",
<4.%B	:	 %) '\ %) " .2 "S  "!"s   A A A 