
    J/Ph*                     >   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j                  d             Z eej                  d             Z eej                  d             Z  eej!        d          dd            Z" eej#                  dd            Z$ eej%                  d             Z&dS )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k    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k    rlt          j        t          j        |dz
  f          d          j	        }| dd           | d         z  |dd d f<   t          j
                            |          }nt          j        d          }|dk    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         h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/np/polynomial/polynomial_functions.py
roots_implzroots_impl.<locals>.roots_impl   sd    qw<<18999:a==#x==A8AV,,,,VVhrl"Q& c(1+s8B<001445FFq55 Q&111557AufqtmAadGI%%a((EEHQf---E 669eRXb%?%?%?@AAAL    )getattr
isinstancer   Integerr   float64r
   )r    tyr(   r&   s      @r'   r(   r(      s`    
 
GQ		B"em$$ "         D r)   c                    t          |           sd}t          j        |          t          | t          j                  rd}t          j        || z            t          j        |           dk    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k    r n| d |dz            S )Nr   r   r   )r   range)seqis     r'   implzpolyutils_trimseq.<locals>.implN   sd    s88q==J3s88a<R00  q6Q;;E vAv;r)   )	r	   r   TypingErrorr+   r   	BaseTupler   ndimNumbaValueError)r3   msgr5   s      r'   polyutils_trimseqr;   @   s    C   &5 %%%#u'' .6 ---	ws||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
                  rNt          j        t          j        d | D                                 rt          j        d          t          |  nr<t          t!          |                     }t          j        |t          j                  nTt          j        |           dk    r(t          j        t          | j                            nt          j        d          dfd	}|S )	Nz'The argument "alist" must be array-likez#The argument "trim" must be booleanc                 >    g | ]}t          j        |          d k    S r   )r   r8   .0as     r'   
<listcomp>z'polyutils_as_series.<locals>.<listcomp>i   s$    :::qBGAJJN:::r)   r0   r   Tc                    rag }t          |           D ]N}|                    t          j        t          j        |                                                             On3rfd| D             }n"t          j        |           }fd|D             }t          d |D                       dk    rt          d          |rd |D             }|}|S )Nc                     g | ];}t          j        t          j        |                                                  <S  r   
atleast_1dasarrayastyper@   rA   	res_dtypes     r'   rB   z5polyutils_as_series.<locals>.impl.<locals>.<listcomp>   sI     & & & mBJqMM2299)DD & & &r)   c                     g | ];}t          j        t          j        |                                                  <S rE   rF   rJ   s     r'   rB   z5polyutils_as_series.<locals>.impl.<locals>.<listcomp>   sI     * * * mBJqMM2299)DD * * *r)   c                     g | ]	}|j         
S rE   )sizer?   s     r'   rB   z5polyutils_as_series.<locals>.impl.<locals>.<listcomp>   s    '''1'''r)   r   zCoefficient array is emptyc                 6    g | ]}t          j        |          S rE   )putrimseqr?   s     r'   rB   z5polyutils_as_series.<locals>.impl.<locals>.<listcomp>   s     444bjmm444r)   )r   appendr   rG   rH   rI   minr   )	alisttrimarraysitem	alist_arrret
list_inputrK   tuple_inputs	         r'   r5   z!polyutils_as_series.<locals>.imply   s+    	*F&u-- Q QbmBJt,<,<==DDYOOPPPPQ  	*& & & &$& & &FF 
5))I* * * *(* * *F '''''((A--9::: 	544V444F
r)   T)r	   r   r6   r+   boolr   Booleanr   r-   r7   Listanyarrayr9   _poly_result_dtyper
   _get_list_typeresult_typer8   r   )rT   rU   r:   dtr5   rZ   rK   r[   s        @@@r'   polyutils_as_seriesrf   Z   s~   E"" &7 %%%dT5=122 &3 %%%
IUEO44KE5:..J I6"(::E:::;;<< 	I()GHHH&.			 	InU++,,N2rz22		 75>>Qy(5;2G2GHHII ()GHHH       0 Kr)   c                     | j         }t          |t          j                  st	          |          rt          |          S |S N)r   r+   r   Numberr	   rc   )lre   s     r'   rc   rc      sB     
Br5<(( .>r.B.B b!!!	r)   c                  <   t           j        }| D ]}t          |t          j                  r|j        }nt          |t          j                  rt          |          g}nWt          |t          j                  r|g}n9t          |t          j                  r	|j	        g}nd}t          j        |          	 d |D             }|                    |           t          j        | }# t          j        $ r d}t          j        |          w xY wt          |          S )NzInput dtype must be scalarc                 ,    g | ]}t          |          S rE   )r
   )r@   ts     r'   rB   z&_poly_result_dtype.<locals>.<listcomp>   s    )))!)))r)   zInput dtype must be scalar.)r   r-   r+   r   r7   r_   rc   ri   Arrayr   r   r6   rR   rd   NumbaNotImplementedErrorr   )argsrK   rW   s1r:   rj   s         r'   rb   rb      s+    
I * *dEO,, 
	*BBej)) 	* &&'BBel++ 	*BBek** 	**BB.C$S)))	*))b)))AHHY+II. 	* 	* 	*/C$S)))	* i   s   6/C&&&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                 f   t          j        | |f          \  }}t          |          t          |          z
  }|dk    r*t          j        |          }t          j        ||f          }|dk     r+t          j        |           }t          j        ||f          }||z   }t          j        |          S Nr   rP   	as_seriesr   r   r   concatenaterQ   c1c2arr1arr2diffzrvals          r'   r5   znumpy_polyadd.<locals>.impl       \2r(++
d4yy3t99$!88$B>4*--D!884%B>4*--DTkz#r)   r	   r   r6   r{   r|   r:   r5   s       r'   numpy_polyaddr      d    B &4 %%%B &4 %%%
 
 
 Kr)   c                     t          |           sd}t          j        |          t          |          sd}t          j        |          d }|S )Nrs   rt   c                 f   t          j        | |f          \  }}t          |          t          |          z
  }|dk    r*t          j        |          }t          j        ||f          }|dk     r+t          j        |           }t          j        ||f          }||z
  }t          j        |          S rv   rw   rz   s          r'   r5   znumpy_polysub.<locals>.impl   r   r)   r   r   s       r'   numpy_polysubr      r   r)   c                     t          |           sd}t          j        |          t          |          sd}t          j        |          d }|S )Nrs   rt   c                     t          j        | |f          \  }}t          j        ||          }t          j        |          S rh   )rP   rx   r   convolverQ   )r{   r|   r}   r~   r   s        r'   r5   znumpy_polymul.<locals>.impl   s8    \2r(++
dk$%%z#r)   r   r   s       r'   numpy_polymulr      sd    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 booleanr>   Tc                 v   t          j        |                              	          }t          j        |                               	          }r
r|                    |j        z             }t          |          }||dz
           |dz  z   }t          |dz
  dd          D ]}||dz
           ||z  z   }|S )Nr   r   r   )r   rH   rI   reshaper   r   r2   )xctensorarrinputsrj   yr4   	new_shaperK   
tensor_arg
x_nd_arrays           r'   r5   zpoly_polyval.<locals>.impl  s    jmm""9--A%%i00 	5* 	5++ci)344CHHAJ!#q1ua$$ 	( 	(AAE
QZ'AAr)   r\   )r	   r   r6   r+   r]   r   BooleanLiteralRequireLiteralValuerb   ri   rn   r   r8   literal_value)	r   r   r   r:   r5   r   rK   r   r   s	        @@@@r'   poly_polyvalr      s'   A &3 %%%A &3 %%%ftU%9:;; .5(---"1a((I
  5<000JI!U[!! &271::%	&$ *

)
         Kr)   r   c                 4   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    pDt          | t
          j        t
          j        f          o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        }t	          |          D ]}}t          |           }t          j        |dz   f| j        dd          z   |          }| d         dz  |d<   | d         |d<   t	          d|          D ]}| |         |dz   z  ||dz   <   |} ~rt          j	        |           S | S )Nr   r   r   )
r   rH   rI   r   r2   r   emptyr   rP   rQ   )	r   mcdtr4   r#   tmpjis1DrK   s	          r'   r5   zpoly_polyint.<locals>.implB  s    JqMM  ++gq 	 	AAA(AE8agabbk1===CqTAXCFqTCF1a[[ , ,qTQU^AE

AA 	:a== Hr)   r>   )r	   r   r6   r+   r   r   r,   r
   rb   r   
issubdtypenumberr8   r_   r7   r   ri   )r   r   r:   r5   r   rK   s       @@r'   poly_polyintr   -  s    A &3 %%%a#u}-.. &3 %%%+A..//I=BI.. &F9FFF %%%WQZZ1_ 4EJ899 3AGU\22 	      " Kr)   c                     t          |           sd}t          j        |          t          |          sd}t          j        |          d }|S )Nrs   rt   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         |||	         z  z  cc<   |dz  }|	dz  }	|dk    +||	dz   d          |z  t          j        |d |	dz                      fS )Nr   r   r   )rP   rx   ZeroDivisionErrorr   rQ   )
r{   r|   r}   r~   l1l2dlensclr4   r   s
             r'   r5   znumpy_polydiv.<locals>.impl`  s=   \2r(++
d8q==#%%%YYYY778a<%%1WW$r(?D!HqL007Dr(C9s?DAQAq&&QqS			TDG^+			QQ q&& A<#%rz$vAv,'?'???r)   r   r   s       r'   numpy_polydivr   V  sg    B &4 %%%B &4 %%%@ @ @. Kr)   r\   r>   )'__doc__numpyr   numpy.polynomialr   polyr   rP   numbar   
numba.corer   r   numba.core.extendingr   numba.np.numpy_supportr	   r
   r   r%   r(   rQ   r;   rx   rf   rc   rb   polyaddr   polysubr   polymulr   polyvalr   polyintr   polydivr   rE   r)   r'   <module>r      sC   
     / / / / / / , , , , , ,             $ $ $ $ $ $ $ $ ) ) ) ) ) ) I I I I I I I I I I 
"(, , ,^ 
"*  2 
",6 6 6 6r  ! ! !8 
$,  0 
$,  0 
$,  " 
$,t,,,+ + + -,+\ 
$,% % % %P 
$,         r)   