
    `i                     ~    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j	        d          	 	 d	d            Z
dS )
    N)cublas)device)_util)_uarraysolve_triangularFc                 h   t          j        | |           t          | j                  dk    s| j        d         | j        d         k    rt	          d          t          |           t          |          k    rt	          d          | j        j        dv r| j        }nt          j        | j        j        d          }t          j
        | |dd	
          } t          j
        ||d| 
          }|r| j        j        dk    r5t          j        |                                           st	          d          |j        j        dk    r5t          j        |                                          st	          d          |j        dk    r	|j        dfn|j        \  }}	t!          j                    }
|dk    rt$          j        }n2|dk    rt$          j        }n|dk    rt$          j        }nt$          j        }t          j
        d|          }|rt$          j        }nt$          j        }|dk    rt$          j        }n%|dk    rt$          j        }n|dk    rt$          j        }|rt$          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diags                  x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupyx/scipy/linalg/_solve_triangular.pyr   r   
   s   B 
Q"""
17||qAGAJ!'!*441222
1vvQ2333 	w|t#AGL#66
1E5999A
1EOEEEA 77<3t}Q'7'7';';'='=57 7 77<3t}Q'7'7';';'='=57 7 7 &A++AFA;;17DAq,..M|||	#|	#||
+au
%
%
%C -,,||"	#"	#" +&*Dv.t	1cjoqvz1afj!= = = H    )r   FFFF)r   r   	cupy.cudar   r   cupy.linalgr   cupyx.scipy.linalgr   
implementsr    rB   rA   <module>rH      s                        & & & & & & &''?D5:Z Z Z ('Z Z ZrB   