o
    i                     @   s\   d dl 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 e	d		d	ddZ
dS )
    N)cublas)device)_util)_uarraysolve_triangularFc                 C   s  t | | t| jdks| jd | jd krtdt| t|kr'td| jjdv r1| j}nt| jjd}t	j
| |dd	d
} t	j
||d| d
}|rp| jjdkr_t	|  s_td|jjdkrpt	| sptd|jdkrz|jdfn|j\}}	t }
|dkrtj}n|dkrtj}n|dkrtj}ntj}tj
d|d}|rtj}ntj}|dkrtj}n|dkrtj}n|dkrtj}|rtj}ntj}||
tj|||||	|jj | j j!||j j!| |S )a  Solve the equation a x = b for x, assuming a is a triangular matrix.

    Args:
        a (cupy.ndarray): The matrix with dimension ``(M, M)``.
        b (cupy.ndarray): The matrix with dimension ``(M,)`` or
            ``(M, N)``.
        lower (bool): Use only data contained in the lower triangle of ``a``.
            Default is to use upper triangle.
        trans (0, 1, 2, 'N', 'T' or 'C'): Type of system to solve:

            - *'0'* or *'N'* -- :math:`a x  = b`
            - *'1'* or *'T'* -- :math:`a^T x = b`
            - *'2'* or *'C'* -- :math:`a^H x = b`

        unit_diagonal (bool): If ``True``, diagonal elements of ``a`` are
            assumed to be 1 and will not be referenced.
        overwrite_b (bool): Allow overwriting data in b (may enhance
            performance)
        check_finite (bool): Whether to check that the input matrices contain
            only finite numbers. Disabling may give a performance gain, but may
            result in problems (crashes, non-termination) if the inputs do
            contain infinities or NaNs.

    Returns:
        cupy.ndarray:
            The matrix with dimension ``(M,)`` or ``(M, N)``.

    .. seealso:: :func:`scipy.linalg.solve_triangular`
       r      zexpected square matrixzincompatible dimensionsfdfFF)dtypeordercopyz#array must not contain infs or NaNsd)r   NTC)"r   _assert_cupy_arraylenshape
ValueErrorr   charnumpypromote_typescupyarraykindisfiniteallndimsizer   get_cublas_handler   strsmdtrsmctrsmztrsmCUBLAS_FILL_MODE_LOWERCUBLAS_FILL_MODE_UPPERCUBLAS_OP_NCUBLAS_OP_TCUBLAS_OP_CCUBLAS_DIAG_UNITCUBLAS_DIAG_NON_UNITCUBLAS_SIDE_LEFTctypesdataptr)abtranslowerunit_diagonaloverwrite_bcheck_finiter   mncublas_handletrsmoneuplodiag r?   a/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/cupyx/scipy/linalg/_solve_triangular.pyr   
   s^   !")r   FFFF)r   r   	cupy.cudar   r   cupy.linalgr   cupyx.scipy.linalgr   
implementsr   r?   r?   r?   r@   <module>   s    