
    xKg*                     *   d Z ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZmZ  eej&                        d	        Z eej*                        d
        Z eej.                        dd       Zd Zd Z eej6                        d        Z eej:                        d        Z eej>                        d        Z  eejB                  d      dd       Z" eejF                        dd       Z$ eejJ                        d        Z&y)z5
Implementation of operations involving polynomials.
    N)
polynomial)	polyutils)literal_unroll)typeserrors)overload)type_can_asarrayas_dtype
from_dtypec                     t        | d|       }t        |t        j                        rt        j
                  nt        |      fd}|S )Ndtypec                    t        | j                        dk7  rt        d      t        j                  |       d   }t        |      dk(  rt        j
                  d      S t        |       |d   z
  dz
  }| t        |d         t        |d         dz    } t        |       }|dkD  rkt        j                  t        j                  |dz
  f      d      j                  }| dd   | d   z  |dd d f<   t        j                  j                  |      }nt        j
                  d      }|dkD  r,t        j                  |t        j
                  |      f      S |S )N   zInput must be a 1d array.r   r      )lenshape
ValueErrornpnonzerozerosintdiagonesTlinalgeigvalshstack)pnon_zerotznArootscast_ts         l/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/np/polynomial/polynomial_functions.py
roots_implzroots_impl.<locals>.roots_impl   s3    qww<1899::a=#x=A88AV,,Vhrl"Q& c(1+s8B<0145Fq5 Q&11577AufqtmAadGII%%a(EHHQf-E 699eRXXb%?@AAL    )getattr
isinstancer   Integerr   float64r
   )r    tyr(   r&   s      @r'   r(   r(      sA    
 
GQ	B"emm$" D r)   c                    t        |       sd}t        j                  |      t        | t        j
                        rd}t        j                  || z        t        j                  |       dkD  rd}t        j                  |      d }|S )Nz%The argument "seq" must be array-likez&Unsupported type %r for argument "seq"r   Coefficient array is not 1-dc                     t        |       dk(  r| S t        t        |       dz
  dd      D ]  }| |   dk7  s n | d dz    S )Nr   r   r   )r   range)seqis     r'   implzpolyutils_trimseq.<locals>.implN   sM    s8q=J3s8a<R0q6Q; 1 vA;r)   )	r	   r   TypingErrorr+   r   	BaseTupler   ndimNumbaValueError)r3   msgr5   s      r'   polyutils_trimseqr;   @   sz    C 5  %%#u'6  --	wws|a,$$S)) Kr)   Tc           
      \   t        |       sd}t        j                  |      t        |t        t
        j                  f      sd}t        j                  |      t        j                  t        | t
        j                        t        | t
        j                        rjt        j                  t        j                  | D cg c]  }t        j                  |      dkD   c}            rt        j                  d      t        |  nr9t!        t#        |             }t        j$                  |t        j                        nWt        j                  |       dk  r*t        j$                  t!        | j&                              nt        j                  d      dfd	}|S c c}w )Nz'The argument "alist" must be array-likez#The argument "trim" must be booleanr   r0   r   c                    	rYg }t        |       D ]H  }|j                  t        j                  t        j                  |            j                               J nrE| D cg c]9  }t        j                  t        j                  |            j                        ; }}nYt        j                  |       }|D cg c]9  }t        j                  t        j                  |            j                        ; }}t        |D cg c]  }|j                   c}      dk(  rt        d      |r"|D cg c]  }t        j                  |       }}|}|S c c}w c c}w c c}w c c}w )Nr   zCoefficient array is empty)r   appendr   
atleast_1dasarrayastypeminsizer   putrimseq)
alisttrimarraysitema	alist_arrret
list_input	res_dtypetuple_inputs
          r'   r5   z!polyutils_as_series.<locals>.imply   s;   F&u-bmmBJJt,<=DDYOP . $&$! mmBJJqM299)D$  & 

5)I(*(! mmBJJqM299)D(  * '1'(A-9::-34VbjjmVF4
&
* ( 5s   #>E=>EE 4E%T)r	   r   r6   r+   boolr   Booleanr   r-   r7   Listanyarrayr8   r9   _poly_result_dtyper
   _get_list_typeresult_typer   )	rF   rG   r:   rJ   dtr5   rM   rN   rO   s	         @@@r'   polyutils_as_seriesrZ   Z   s9   E"7  %%dT5==123  %%

IUEOO4KE5::.J66"((E:EqBGGAJNE:;<(()GHH&.		nU+,NN2rzz2	 775>Qy(5;;2GHI (()GHH0 KQ ;s   F)c                 ~    | j                   }t        |t        j                        st	        |      rt        |      S |S N)r   r+   r   Numberr	   rW   )lrY   s     r'   rW   rW      s3     
Br5<<(.>r.Bb!!	r)   c                  z   t         j                  }| D ]  }t        |t        j                        r|j                  }nt        |t        j
                        rt        |      g}n]t        |t        j                        r|g}n?t        |t        j                        r|j                  g}nd}t        j                  |      	 |D cg c]  }t        |       }}|j                  |       t        j                  | } t!        |      S c c}w # t        j                  $ r d}t        j                  |      w xY w)NzInput dtype must be scalarzInput dtype must be scalar.)r   r-   r+   r   r7   rS   rW   r]   Arrayr   r   r6   r
   r>   rX   NumbaNotImplementedErrorr   )argsrN   rI   s1r:   tr^   s          r'   rV   rV      s    

IdEOO,Bejj) &'Bell+Bekk***B.C$$S))	*&()b!bA)HHY+I! * i   * .. 	*/C$$S))	*s   DD
%D
D+D:c                     t        |       sd}t        j                  |      t        |      sd}t        j                  |      d }|S )N$The argument "c1" must be array-like$The argument "c2" must be array-likec                 ^   t        j                  | |f      \  }}t        |      t        |      z
  }|dkD  r,t        j                  |      }t        j
                  ||f      }|dk  r-t        j                  |       }t        j
                  ||f      }||z   }t        j                  |      S Nr   rD   	as_seriesr   r   r   concatenaterE   c1c2arr1arr2diffzrvals          r'   r5   znumpy_polyadd.<locals>.impl       \\2r(+
d4y3t9$!8$B>>4*-D!84%B>>4*-DTkzz#r)   r	   r   r6   rn   ro   r:   r5   s       r'   numpy_polyaddrx      J    B4  %%B4  %%
 Kr)   c                     t        |       sd}t        j                  |      t        |      sd}t        j                  |      d }|S )Nrf   rg   c                 ^   t        j                  | |f      \  }}t        |      t        |      z
  }|dkD  r,t        j                  |      }t        j
                  ||f      }|dk  r-t        j                  |       }t        j
                  ||f      }||z
  }t        j                  |      S ri   rj   rm   s          r'   r5   znumpy_polysub.<locals>.impl   ru   r)   rv   rw   s       r'   numpy_polysubr|      ry   r)   c                     t        |       sd}t        j                  |      t        |      sd}t        j                  |      d }|S )Nrf   rg   c                     t        j                  | |f      \  }}t        j                  ||      }t        j                  |      S r\   )rD   rk   r   convolverE   )rn   ro   rp   rq   rt   s        r'   r5   znumpy_polymul.<locals>.impl   s6    \\2r(+
dkk$%zz#r)   rv   rw   s       r'   numpy_polymulr      sJ    B4  %%B4  %%
 Kr)   )prefer_literalc                 
   t        |       sd}t        j                  |      t        |      sd}t        j                  |      t        |t        t
        j                  f      sd}t        j                  |      t        ||       t        | t
        j                         dt        | t
        j                        rdt        j                  |       z  t        |t              r|n|j                  dfd	}|S )Nz#The argument "x" must be array-like#The argument "c" must be array-likez%The argument "tensor" must be booleanr   c                 T   t        j                  |      j                  	      }t        j                  |       j                  	      }r 
r|j                  |j                  z         }t        |      }||dz
     |dz  z   }t        |dz
  dd      D ]  }||dz
     ||z  z   } |S )Nr   r   r   )r   r@   rA   reshaper   r   r2   )xctensorarrinputsr^   yr4   	new_shaperN   
tensor_arg
x_nd_arrays           r'   r5   zpoly_polyval.<locals>.impl  s    jjm""9-A%%i0*++cii)34CHAJ!#q1ua$AAE
QZ'A % r)   rP   )r	   r   r6   r+   rQ   r   BooleanLiteralRequireLiteralValuerV   r]   r`   r   r8   literal_value)	r   r   r   r:   r5   r   rN   r   r   s	        @@@@r'   poly_polyvalr      s    A3  %%A3  %%ftU%9%9:;5((--"1a(I
  5<<00JI!U[[!2771:%	&$
))
  Kr)   c                 D   t        |       sd}t        j                  |      t        |t        t
        j                  f      sd}t        j                  |      t        t        |             t        j                  t        j                        sd d}t        j                  |      t        j                  |       dk(  xsP t        | t
        j                  t
        j                  f      xr$ t        | j                  t
        j                         dfd	}|S )Nr   z#The argument "m" must be an integerz"Input dtype must be scalar. Found z insteadr   c                    t        j                  |       j                        } | j                  }t	        |      D ]o  }t        |       }t        j                  |dz   f| j                  dd  z   |      }| d   dz  |d<   | d   |d<   t	        d|      D ]  }| |   |dz   z  ||dz   <    |} q rt        j                  |       S | S )Nr   r   r   )
r   r@   rA   r   r2   r   emptyr   rD   rE   )	r   mcdtr4   r#   tmpjis1DrN   s	          r'   r5   zpoly_polyint.<locals>.implB  s    JJqM  +ggqAAA((AE8aggabk1=CqTAXCFqTCF1a[qTQU^AE
 !A  ::a= Hr)   r   )r	   r   r6   r+   r   r   r,   r
   rV   r   
issubdtypenumberr8   rS   r7   r   r]   )r   r   r:   r5   r   rN   s       @@r'   poly_polyintr   -  s     A3  %%a#u}}-.3  %%+A./I==BII.29+XF  %%WWQZ1_ 4EJJ89 3AGGU\\2 	" Kr)   c                     t        |       sd}t        j                  |      t        |      sd}t        j                  |      d }|S )Nrf   rg   c                    t        j                  | |f      \  }}|d   dk(  r
t               t        |      }t        |      }||k  r
|d d dz  |fS |dk(  r||d   z  |d d dz  fS ||z
  }|d   }|d d |z  }|}|dz
  }	|dk\  r$|||	xxx |||	   z  z  ccc |dz  }|	dz  }	|dk\  r$||	dz   d  |z  t        j                  |d |	dz          fS )Nr   r   r   )rD   rk   ZeroDivisionErrorr   rE   )
rn   ro   rp   rq   l1l2dlensclr4   r   s
             r'   r5   znumpy_polydiv.<locals>.impl`  s   \\2r(+
d8q=#%%YY78a<%%1W$r(?D!HqL007Dr(C9s?DAQAq&Qq	TDG^+	QQ q& A<#%rzz$vA,'???r)   rv   rw   s       r'   numpy_polydivr   V  sK    B4  %%B4  %%@. Kr)   rP   r   )'__doc__numpyr   numpy.polynomialr   polyr   rD   numbar   
numba.corer   r   numba.core.extendingr   numba.np.numpy_supportr	   r
   r   r%   r(   rE   r;   rk   rZ   rW   rV   polyaddrx   polysubr|   polymulr   polyvalr   polyintr   polydivr    r)   r'   <module>r      s9  
  / ,   $ ) I I 
"((, ,^ 
"** 2 
",,6 6r!8 
$,, 0 
$,, 0 
$,, " 
$,,t,+ -+\ 
$,,% %P 
$,,   r)   