o
    Ô­jëG  ã                   @  s2  d dl mZ ddlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ d d	lmZ erFdd
lmZmZmZmZmZmZ d dlmZ d dlZd dlZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!ddœdodd„Z"ddœdpd$d%„Z#dqd&d'„Z$d d(œdrd*d+„Z%dsd,d-„Z&dqd.d/„Z'dqd0d1„Z(dtd2d3„Z)dd4d5œdud9d:„Z*dvd<d=„Z+dd>œdwdAdB„Z,dqdCdD„Z-dtdEdF„Z.dd>œdwdGdH„Z/dIdJœdxdMdN„Z0dydOdP„Z1dQdR„ Z2dtdSdT„Z3dUdVœdzdXdY„Z4d{d[d\„Z5dd]œd|d`da„Z6d ddbœd}dedf„Z7ddœdpdgdh„Z8ddddiœd~dldm„Z9g dn¢Z:dS )é    )Úannotationsé   )Ú_floating_dtypesÚ_numeric_dtypesÚfloat32Úfloat64Ú	complex64Ú
complex128)Úreshape)Úconj)ÚArrayé   )Únormalize_axis_tuple)ÚTYPE_CHECKING)ÚLiteralÚOptionalÚSequenceÚTupleÚUnionÚDtype)Ú
NamedTupleNc                   @  ó   e Zd ZU ded< ded< dS )Ú
EighResultr   ÚeigenvaluesÚeigenvectorsN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r    r    úS/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/array_api/linalg.pyr      ó   
 r   c                   @  r   )ÚQRResultr   ÚQÚRNr   r    r    r    r!   r#      r"   r#   c                   @  r   )ÚSlogdetResultr   ÚsignÚ	logabsdetNr   r    r    r    r!   r&   "   r"   r&   c                   @  s&   e Zd ZU ded< ded< ded< dS )Ú	SVDResultr   ÚUÚSÚVhNr   r    r    r    r!   r)   &   s   
 r)   F)ÚupperÚxr   r-   ÚboolÚreturnc               C  sT   | j tvr	tdƒ‚tj | j¡}|r%t |¡j	}|j t
tfv r#t|ƒ}|S t |¡S )zŽ
    Array API compatible wrapper for :py:func:`np.linalg.cholesky <numpy.linalg.cholesky>`.

    See its docstring for more information.
    z2Only floating-point dtypes are allowed in cholesky)Údtyper   Ú	TypeErrorÚnpÚlinalgÚcholeskyÚ_arrayr   Ú_newÚmTr   r	   r   )r.   r-   ÚLr*   r    r    r!   r5   -   s   

r5   éÿÿÿÿ©ÚaxisÚx1Úx2r<   Úintc               C  sr   | j tvs
|j tvrtdƒ‚| j|jkrtdƒ‚| jdkr!tdƒ‚| j| dkr,tdƒ‚t tj	| j
|j
|d�¡S )zz
    Array API compatible wrapper for :py:func:`np.cross <numpy.cross>`.

    See its docstring for more information.
    z(Only numeric dtypes are allowed in crossz"x1 and x2 must have the same shaper   z/cross() requires arrays of dimension at least 1é   zcross() dimension must equal 3r;   )r1   r   r2   ÚshapeÚ
ValueErrorÚndimr   r7   r3   Úcrossr6   )r=   r>   r<   r    r    r!   rD   @   s   
rD   c                C  ó&   | j tvr	tdƒ‚t tj | j¡¡S )z„
    Array API compatible wrapper for :py:func:`np.linalg.det <numpy.linalg.det>`.

    See its docstring for more information.
    z-Only floating-point dtypes are allowed in det)	r1   r   r2   r   r7   r3   r4   Údetr6   ©r.   r    r    r!   rF   R   s   
rF   )ÚoffsetrH   c               C  s   t  tj| j|ddd�¡S )z€
    Array API compatible wrapper for :py:func:`np.diagonal <numpy.diagonal>`.

    See its docstring for more information.
    éþÿÿÿr:   )rH   Úaxis1Úaxis2)r   r7   r3   Údiagonalr6   )r.   rH   r    r    r!   rL   _   s   rL   c                C  ó,   | j tvr	tdƒ‚tttjtj 	| j
¡ƒŽ S )z†
    Array API compatible wrapper for :py:func:`np.linalg.eigh <numpy.linalg.eigh>`.

    See its docstring for more information.
    z.Only floating-point dtypes are allowed in eigh)r1   r   r2   r   Úmapr   r7   r3   r4   Úeighr6   rG   r    r    r!   rO   j   ó   
rO   c                C  rE   )zŽ
    Array API compatible wrapper for :py:func:`np.linalg.eigvalsh <numpy.linalg.eigvalsh>`.

    See its docstring for more information.
    z2Only floating-point dtypes are allowed in eigvalsh)	r1   r   r2   r   r7   r3   r4   Úeigvalshr6   rG   r    r    r!   rQ   z   ó   
rQ   c                C  rE   )z„
    Array API compatible wrapper for :py:func:`np.linalg.inv <numpy.linalg.inv>`.

    See its docstring for more information.
    z-Only floating-point dtypes are allowed in inv)	r1   r   r2   r   r7   r3   r4   Úinvr6   rG   r    r    r!   rS   ‡   rR   rS   c                C  s2   | j tvs
|j tvrtdƒ‚t t | j|j¡¡S )z|
    Array API compatible wrapper for :py:func:`np.matmul <numpy.matmul>`.

    See its docstring for more information.
    z)Only numeric dtypes are allowed in matmul)r1   r   r2   r   r7   r3   Úmatmulr6   ©r=   r>   r    r    r!   rT   –   s   rT   Úfro)ÚkeepdimsÚordrW   rX   ú2Optional[Union[int, float, Literal['fro', 'nuc']]]c               C  s.   | j tvr	tdƒ‚t tjj| jd||d�¡S )ú†
    Array API compatible wrapper for :py:func:`np.linalg.norm <numpy.linalg.norm>`.

    See its docstring for more information.
    z5Only floating-point dtypes are allowed in matrix_norm)rI   r:   ©r<   rW   rX   )	r1   r   r2   r   r7   r3   r4   Únormr6   )r.   rW   rX   r    r    r!   Úmatrix_normª   s   
r]   Únc                C  s(   | j tvr	tdƒ‚t tj | j|¡¡S )zˆ
    Array API compatible wrapper for :py:func:`np.matrix_power <numpy.matrix_power>`.

    See its docstring for more information.
    zMOnly floating-point dtypes are allowed for the first argument of matrix_power)	r1   r   r2   r   r7   r3   r4   Úmatrix_powerr6   )r.   r^   r    r    r!   r_   ¸   s   
r_   )Úrtolr`   úOptional[Union[float, Array]]c               C  sª   | j dk rtj d¡‚tjj| jdd�}|du r0|jddd�t| jd	d… ƒ t |j	¡j
 }nt|tƒr8|j}|jddd�t |¡d
tjf  }t tj||kdd�¡S )z†
    Array API compatible wrapper for :py:func:`np.matrix_rank <numpy.matrix_rank>`.

    See its docstring for more information.
    r   zA1-dimensional array given. Array must be at least two-dimensionalF©Ú
compute_uvNr:   T)r<   rW   rI   .r;   )rC   r3   r4   ÚLinAlgErrorÚsvdr6   ÚmaxrA   Úfinfor1   ÚepsÚ
isinstancer   ÚasarrayÚnewaxisr7   Úcount_nonzero)r.   r`   r+   Útolr    r    r!   Úmatrix_rankÇ   s   
0
"rn   c                C  s(   | j dk r	tdƒ‚t t | jdd¡¡S )Nr   z5x must be at least 2-dimensional for matrix_transposer:   rI   )rC   rB   r   r7   r3   Úswapaxesr6   rG   r    r    r!   Úmatrix_transposeß   s   
rp   c                C  sN   | j tvs
|j tvrtdƒ‚| jdks|jdkrtdƒ‚t t | j	|j	¡¡S )zz
    Array API compatible wrapper for :py:func:`np.outer <numpy.outer>`.

    See its docstring for more information.
    z(Only numeric dtypes are allowed in outerr   z/The input arrays to outer must be 1-dimensional)
r1   r   r2   rC   rB   r   r7   r3   Úouterr6   rU   r    r    r!   rq   å   s
   rq   c               C  sR   | j tvr	tdƒ‚|du rt| jdd… ƒt | j ¡j }t 	tj
j| j|d�¡S )z†
    Array API compatible wrapper for :py:func:`np.linalg.pinv <numpy.linalg.pinv>`.

    See its docstring for more information.
    z.Only floating-point dtypes are allowed in pinvNrI   )Úrcond)r1   r   r2   rf   rA   r3   rg   rh   r   r7   r4   Úpinvr6   )r.   r`   r    r    r!   rs   ÷   s
   
 rs   Úreduced©Úmoderv   úLiteral['reduced', 'complete']c               C  ó0   | j tvr	tdƒ‚tttjtjj	| j
|d�ƒŽ S )z‚
    Array API compatible wrapper for :py:func:`np.linalg.qr <numpy.linalg.qr>`.

    See its docstring for more information.
    z,Only floating-point dtypes are allowed in qrru   )r1   r   r2   r#   rN   r   r7   r3   r4   Úqrr6   )r.   rv   r    r    r!   ry     ó   
ry   c                C  rM   )zŒ
    Array API compatible wrapper for :py:func:`np.linalg.slogdet <numpy.linalg.slogdet>`.

    See its docstring for more information.
    z1Only floating-point dtypes are allowed in slogdet)r1   r   r2   r&   rN   r   r7   r3   r4   Úslogdetr6   rG   r    r    r!   r{     rP   r{   c                 C  sâ   ddl m}m}m}m}m}m}m} ddlm	}	 || ƒ\} }
|| ƒ || ƒ ||ƒ\}}|| |ƒ\}}|j
dkr<|	j}n|	j}||ƒrEdnd}tj|ddddd	�� || ||d
�}W d   ƒ n1 scw   Y  ||j|dd�ƒS )Nr   )Ú
_makearrayÚ_assert_stacked_2dÚ_assert_stacked_squareÚ_commonTypeÚisComplexTypeÚget_linalg_error_extobjÚ_raise_linalgerror_singular)Ú_umath_linalgr   zDD->Dzdd->dÚcallÚignore)r„   ÚinvalidÚoverÚdivideÚunder)Ú	signatureF)Úcopy)Úlinalg.linalgr|   r}   r~   r   r€   r�   r‚   r4   rƒ   rC   Úsolve1Úsolver3   ÚerrstateÚastype)ÚaÚbr|   r}   r~   r   r€   r�   r‚   rƒ   Ú_ÚwrapÚtÚresult_tÚgufuncrŠ   Úrr    r    r!   Ú_solve/  s"   $
ÿþr™   c                C  s0   | j tvs
|j tvrtdƒ‚t t| j|jƒ¡S )zˆ
    Array API compatible wrapper for :py:func:`np.linalg.solve <numpy.linalg.solve>`.

    See its docstring for more information.
    z/Only floating-point dtypes are allowed in solve)r1   r   r2   r   r7   r™   r6   rU   r    r    r!   rŽ   K  s   rŽ   T©Úfull_matricesr›   c               C  rx   )z„
    Array API compatible wrapper for :py:func:`np.linalg.svd <numpy.linalg.svd>`.

    See its docstring for more information.
    z-Only floating-point dtypes are allowed in svdrš   )r1   r   r2   r)   rN   r   r7   r3   r4   re   r6   )r.   r›   r    r    r!   re   X  rz   re   úUnion[Array, Tuple[Array, ...]]c                C  s*   | j tvr	tdƒ‚t tjj| jdd�¡S )Nz1Only floating-point dtypes are allowed in svdvalsFrb   )	r1   r   r2   r   r7   r3   r4   re   r6   rG   r    r    r!   Úsvdvalsi  s   
r�   ©ÚaxesrŸ   ú/Union[int, Tuple[Sequence[int], Sequence[int]]]c               C  s6   | j tvs
|j tvrtdƒ‚t tj| j|j|d�¡S )Nz,Only numeric dtypes are allowed in tensordotrž   )r1   r   r2   r   r7   r3   Ú	tensordotr6   )r=   r>   rŸ   r    r    r!   r¡   q  s   r¡   )rH   r1   r1   úOptional[Dtype]c               C  sZ   | j tvr	tdƒ‚|du r| j tkrt}n| j tkrt}t t	 
t	j| j|dd|d�¡¡S )zz
    Array API compatible wrapper for :py:func:`np.trace <numpy.trace>`.

    See its docstring for more information.
    z(Only numeric dtypes are allowed in traceNrI   r:   )rH   rJ   rK   r1   )r1   r   r2   r   r   r   r	   r   r7   r3   rj   Útracer6   )r.   rH   r1   r    r    r!   r£   z  s   


"r£   c         	      C  sÊ   | j tvs
|j tvrtdƒ‚t| j|jƒ}d|| j  t| jƒ }d||j  t|jƒ }|| || kr9tdƒ‚t 	| j
|j
¡\}}t ||d¡}t ||d¡}|dd d d …f |d  }t |d ¡S )Nz)Only numeric dtypes are allowed in vecdot)r   z6x1 and x2 must have the same size along the given axisr:   .).N).r   r   )r1   r   r2   rf   rC   ÚtuplerA   rB   r3   Úbroadcast_arraysr6   Úmoveaxisr   r7   )	r=   r>   r<   rC   Úx1_shapeÚx2_shapeÚx1_Úx2_Úresr    r    r!   Úvecdot�  s   r¬   r[   ú%Optional[Union[int, Tuple[int, ...]]]úOptional[Union[int, float]]c         
        s  | j tvr	tdƒ‚| j‰ |du rˆ  ¡ ‰ d}nBt|tƒrWt|| jƒ‰t‡fdd„t	ˆ jƒD ƒƒ}|| }t
 ˆ |¡ t
j‡ fdd„|D ƒtd�g‡ fdd„|D ƒ¢R ¡‰ d}n|}t t
jjˆ ||d	�¡}|r‹t| jƒ}t|du rvt	| jƒn|| jƒ}|D ]}	d
||	< q}t|t|ƒƒ}|S )rZ   z.Only floating-point dtypes are allowed in normNr   c                 3  s   � | ]	}|ˆ vr|V  qd S )Nr    ©Ú.0Úi)Únormalized_axisr    r!   Ú	<genexpr>½  s   € zvector_norm.<locals>.<genexpr>c                   s   g | ]}ˆ j | ‘qS r    )rA   r¯   )r‘   r    r!   Ú
<listcomp>À  s    zvector_norm.<locals>.<listcomp>)r1   )r<   rX   r   )r1   r   r2   r6   Úravelri   r¤   r   rC   Úranger3   Ú	transposer
   Úprodr?   r   r7   r4   r\   ÚlistrA   )
r.   r<   rW   rX   Ú_axisÚrestÚnewshaper«   rA   r±   r    )r‘   r²   r!   Úvector_norm¥  s.   

0ÿ

r½   )r5   rD   rF   rL   rO   rQ   rS   rT   r]   r_   rn   rp   rq   rs   ry   r{   rŽ   re   r�   r¡   r£   r¬   r½   )r.   r   r-   r/   r0   r   )r=   r   r>   r   r<   r?   r0   r   )r.   r   r0   r   )r.   r   rH   r?   r0   r   )r.   r   r0   r   )r=   r   r>   r   r0   r   )r.   r   rW   r/   rX   rY   r0   r   )r.   r   r^   r?   r0   r   )r.   r   r`   ra   r0   r   )r.   r   rv   rw   r0   r#   )r.   r   r0   r&   )r.   r   r›   r/   r0   r)   )r.   r   r0   rœ   )r=   r   r>   r   rŸ   r    r0   r   )r.   r   rH   r?   r1   r¢   r0   r   )
r.   r   r<   r­   rW   r/   rX   r®   r0   r   );Ú
__future__r   Ú_dtypesr   r   r   r   r   r	   Ú_manipulation_functionsr
   Ú_elementwise_functionsr   Ú_array_objectr   Úcore.numericr   Útypingr   Ú_typingr   r   r   r   r   r   r   Únumpy.linalgÚnumpyr3   r   r#   r&   r)   r5   rD   rF   rL   rO   rQ   rS   rT   r]   r_   rn   rp   rq   rs   ry   r{   r™   rŽ   re   r�   r¡   r£   r¬   r½   Ú__all__r    r    r    r!   Ú<module>   sR      










	-