o
    0 i*                     @   s   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	d
 Zeejdd Zeejd"ddZdd Zdd Zeejdd Zeejdd Zeejdd Z eej!ddd"ddZ"eej#d#ddZ$eej%d 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                    s8   t | d| }t|tjrtj nt|  fdd}|S )Ndtypec                    s   t | jdkrtdt| d }t |dkrtjd dS t | |d  d }| t|d t|d d  } t | }|dkrgtt|d f dj	}| dd   | d  |dd d f< tj
|}ntjd d}|dkr~t|tj| dfS |S )N   zInput must be a 1d array.r   r      )lenshape
ValueErrornpZnonzerozerosintZdiagZonesTZlinalgZeigvalsZhstack)pZnon_zerotznArootsZcast_t t/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/np/polynomial/polynomial_functions.py
roots_impl   s     "zroots_impl.<locals>.roots_impl)getattr
isinstancer   Integerr   float64r	   )r   tyr   r   r   r   r      s   "r   c                 C   s\   t | sd}t|t| tjrd}t||  t| dkr(d}t|dd }|S )Nz%The argument "seq" must be array-likez&Unsupported type %r for argument "seq"r   Coefficient array is not 1-dc                 S   sJ   t | dkr| S tt | d ddD ]
}| | dkr nq| d |d  S )Nr   r   r   )r   range)seqir   r   r   implN   s   zpolyutils_trimseq.<locals>.impl)	r   r   TypingErrorr!   r   	BaseTupler   ndimNumbaValueError)r'   msgr)   r   r   r   polyutils_trimseq@   s   

	r/   Tc                    s   t | sd}t|t|ttjfsd}t|tjt| tj	t| tj
 rBttdd | D r=tdt|  n& rRtt| }t|tjnt| dkrctt| jntdd
 fdd		}|S )Nz'The argument "alist" must be array-likez#The argument "trim" must be booleanc                 S   s   g | ]	}t |d kqS r   )r   r,   .0ar   r   r   
<listcomp>i   s    z'polyutils_as_series.<locals>.<listcomp>r%   r   Tc                    s   rg }t | D ]}|tt| qn r&fdd| D }nt| }fdd|D }tdd |D dkrCtd|rLdd |D }|}|S )Nc                    "   g | ]}t t | qS r   r   
atleast_1dasarrayastyper1   	res_dtyper   r   r4          z5polyutils_as_series.<locals>.impl.<locals>.<listcomp>c                    r5   r   r6   r1   r:   r   r   r4      r<   c                 S   s   g | ]}|j qS r   )sizer1   r   r   r   r4      s    r   zCoefficient array is emptyc                 S   s   g | ]}t |qS r   )putrimseqr1   r   r   r   r4      s    )r   appendr   r7   r8   r9   minr   )alisttrimZarraysitemZ	alist_arrretZ
list_inputr;   Ztuple_inputr   r   r)   y   s&   


z!polyutils_as_series.<locals>.implT)r   r   r*   r!   boolr   Booleanr   r#   r+   Listanyarrayr-   _poly_result_dtyper	   _get_list_typeresult_typer,   r   )rB   rC   r.   dtr)   r   rF   r   polyutils_as_seriesZ   s*   




rQ   c                 C   s&   | j }t|tjst|rt|S |S N)r   r!   r   Numberr   rN   )lrP   r   r   r   rN      s   rN   c               	   G   s   t j}| D ]V}t|tjr|j}n(t|tjrt|g}nt|tjr'|g}nt|tjr2|j	g}nd}t
|zdd |D }|| t j| }W q t
jy[   d}t
|w t|S )NzInput dtype must be scalarc                 S   s   g | ]}t |qS r   )r	   )r2   tr   r   r   r4      s    z&_poly_result_dtype.<locals>.<listcomp>zInput dtype must be scalar.)r   r#   r!   r   r+   rJ   rN   rS   Arrayr   r   r*   r@   rO   ZNumbaNotImplementedErrorr
   )argsr;   rD   s1r.   rT   r   r   r   rM      s*   



rM   c                 C   8   t | sd}t|t |sd}t|dd }|S )N$The argument "c1" must be array-like$The argument "c2" must be array-likec                 S   sv   t | |f\}}t|t| }|dkr!t|}t||f}|dk r2t| }t||f}|| }t |S Nr   r>   	as_seriesr   r   r   Zconcatenater?   c1c2arr1arr2diffZzrvalr   r   r   r)         

znumpy_polyadd.<locals>.implr   r   r*   r`   ra   r.   r)   r   r   r   numpy_polyadd      

ri   c                 C   rY   )NrZ   r[   c                 S   sv   t | |f\}}t|t| }|dkr!t|}t||f}|dk r2t| }t||f}|| }t |S r\   r]   r_   r   r   r   r)      rf   znumpy_polysub.<locals>.implrg   rh   r   r   r   numpy_polysub   rj   rk   c                 C   rY   )NrZ   r[   c                 S   s(   t | |f\}}t||}t |S rR   )r>   r^   r   Zconvolver?   )r`   ra   rb   rc   re   r   r   r   r)      s   
znumpy_polymul.<locals>.implrg   rh   r   r   r   numpy_polymul   s   

rl   )Zprefer_literalc                    s   t | sd}t|t |sd}t|t|ttjfs%d}t|t|| t| tj	 d t| tj
r@dt|   t|trH|n|jd fdd	}|S )	Nz#The argument "x" must be array-like#The argument "c" must be array-likez%The argument "tensor" must be booleanr0   Tc                    s   t |}t | }rr||j  }t|}||d  |d  }t|d ddD ]}||d  ||  }q2|S )Nr   r   r   )r   r8   r9   Zreshaper   r   r&   )xctensorZarrZinputsrT   yr(   Z	new_shaper;   Z
tensor_argZ
x_nd_arrayr   r   r)     s   zpoly_polyval.<locals>.implrG   )r   r   r*   r!   rH   r   ZBooleanLiteralZRequireLiteralValuerM   rS   rV   r   r,   Zliteral_value)rn   ro   rp   r.   r)   r   rr   r   poly_polyval   s&   




rs   r   c                    s   t | sd}t|t|ttjfsd}t|tt| t	
t	js2d d}t|t	| dkpHt| tjtjfoHt| jtj d fdd	}|S )	Nrm   z#The argument "m" must be an integerz"Input dtype must be scalar. Found z insteadr   c                    s   t | } | j}t|D ];}t| }t j|d f| jdd   |d}| d d |d< | d |d< td|D ]}| | |d  ||d < q9|} q rRt	| S | S )Nr   r   r   )
r   r8   r9   r   r&   r   emptyr   r>   r?   )ro   mZcdtr(   r   tmpjZis1Dr;   r   r   r)   B  s   "
zpoly_polyint.<locals>.implr0   )r   r   r*   r!   r   r   r"   r	   rM   r   Z
issubdtypenumberr,   rJ   r+   r   rS   )ro   ru   r.   r)   r   rx   r   poly_polyint-  s    


rz   c                 C   rY   )NrZ   r[   c           
      S   s  t | |f\}}|d dkrt t|}t|}||k r(|d d d |fS |dkr:||d  |d d d fS || }|d }|d d | }|}|d }	|dkrn|||	  |||	  8  < |d8 }|	d8 }	|dksT||	d d  | t |d |	d  fS )Nr   r   r   )r>   r^   ZeroDivisionErrorr   r?   )
r`   ra   rb   rc   l1l2dlenZsclr(   rw   r   r   r   r)   `  s(   *znumpy_polydiv.<locals>.implrg   rh   r   r   r   numpy_polydivV  s   

r   rG   r0   )'__doc__numpyr   Znumpy.polynomialr   Zpolyr   r>   Znumbar   Z
numba.corer   r   Znumba.core.extendingr   Znumba.np.numpy_supportr   r	   r
   r   r   r?   r/   r^   rQ   rN   rM   Zpolyaddri   Zpolysubrk   Zpolymulrl   Zpolyvalrs   Zpolyintrz   Zpolydivr   r   r   r   r   <module>   s8    
/
9



.(