
    `i                        d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlZ e j        d          Zd Z	d Z
d Zd Zd	d
dZd Zd Zd Z ej        ddddd          ZddZ ej        ddddd          ZddZd Zd ZdS )    N)linalg)_coreCUPY_DEFAULT_PRECISIONc                  v    | D ]5}t          |t          j        j                  st	          j        d          6d S )Nz&cupy.linalg only supports cupy.ndarray)
isinstancecupyr   ndarrayr   LinAlgErrorarraysas     e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupy/linalg/_util.py_assert_cupy_arrayr      sO     : :!TZ/00 	:$8: : :	:: :    c                  ~    | D ]9}|j         dk    r,t          j        d                    |j                             :d S )N   z9{}-dimensional array given. Array must be two-dimensionalndimr   r
   formatr   s     r   
_assert_2dr      sR     2 26Q;;$""(&..2 2 2 2 2r   c                  ~    | D ]9}|j         dk     r,t          j        d                    |j                             :d S )Nr   zB{}-dimensional array given. Array must be at least two-dimensionalr   r   s     r   _assert_stacked_2dr       sR     ; ;6A::$++16!&>>; ; ; ; ;r   c                  h    | D ].}|j         dd         \  }}||k    rt          j        d          /dS )a	  Assert that stacked matrices are square matrices

    Precondition: `arrays` are at least 2d. The caller should assert it
    beforehand. For example,

    >>> def det(a):
    ...     _assert_stacked_2d(a)
    ...     _assert_stacked_square(a)
    ...     ...

    Nz-Last 2 dimensions of the array must be square)shaper   r
   )r   r   mns       r   _assert_stacked_squarer   (   s]      A Awrss|166$?A A A A Ar   T)reject_float16c                 z   d |D             }| rd|v rt          d          t          Zt          j                            d           t          dvr't          d                    t                              dt          z   }nd	}t          |g|R  }|dk    rt          j	        d
          }t          d	g|R  }||fS )a-  Common type for linalg

    The logic is intended to be equivalent with
    `numpy.linalg.linalg._commonType`.
    The differences from `numpy.common_type` are
    - to accept ``bool_`` arrays, and
    - to reject ``float16`` arrays.

    Args:
        *arrays (ndarray): Input arrays.
        reject_float16 (bool): Flag to follow NumPy to raise TypeError for
            ``float16`` inputs.

    Returns:
        compute_dtype (dtype): The precision to be used in linalg calls.
        result_dtype (dtype): The dtype of (possibly complex) output(s).
    c                     g | ]	}|j         
S  )dtype).0arrs     r   
<listcomp>z&linalg_common_type.<locals>.<listcomp>N   s    ***Cci***r   float16z float16 is unsupported in linalgNr   )3264z"invalid CUPY_DEFAULT_PRECISION: {}floatfloat64float32)
	TypeError_default_precisionr   _utilexperimental
ValueErrorr   _common_type_internalnumpyr#   )r   r   dtypesdefaultcompute_dtyperesult_dtypes         r   linalg_common_typer8   <   s    $ +*6***F <)v--:;;;%
 8999\114;;&( () ) ) ..)';F;;;M	!!I.. )<V<<<L,&&r   c                 <      fd|D             }t          j        | S )Nc                 *    g | ]}|j         d v r|nS )fc)kind)r$   r#   default_dtypes     r   r&   z)_common_type_internal.<locals>.<listcomp>g   s9        t##  r   )r3   result_type)r=   r4   inexact_dtypess   `  r   r2   r2   f   s;         N n--r   c                 P   t          |t          j                  sJ t          j                                        }|dk    rd S 	 | j        }n# t          $ r | }Y nw xY w|dk    sJ |dk                                    r(t          j
        d                    ||                    d S )Nignoreraiser   z[Error reported by {} in cuSOLVER. devInfo = {}. Please refer to the cuSOLVER documentation.)r   r   r	   cupyx_ufunc_configget_config_linalg__name__AttributeErroranyr   r
   r   )routinedev_infoconfig_linalgnames       r   3_check_cusolver_dev_info_if_synchronization_allowedrM   m   s     h.....'99;;M      G####A ! ..4fh/  / ! ! 	!! !s   A AAc                 >   t          |t          j                  sJ |j        dk    sJ t          j                                        }|dk    rd S |dk    sJ |dk                                    r-t          j	        d
                    | j        |                    d S )N   rA   rB   r   zfError reported by {} in cuBLAS. infoArray/devInfoArray = {}. Please refer to the cuBLAS documentation.)r   r   r	   r   rC   rD   rE   rH   r   r
   r   rF   )rI   
info_arrayrK   s      r   3_check_cublas_info_array_if_synchronization_allowedrQ      s     j%-00000?a'99;;M  G####a / 99? *:. :./ / 	// /r   zint64 kzS xz0x = (_ind.get()[1] - _ind.get()[0] <= k) ? x : 0cupy_tril_kernelF)reduce_dimsc                 &    t          ||            | S N)_tril_kernelxks     r   _trilrZ          AHr   zHx = (_ind.get()[_ind.ndim - 1] - _ind.get()[_ind.ndim - 2] >= k) ? x : 0cupy_triu_kernelc                 &    t          ||            | S rU   )_triu_kernelrW   s     r   _triur_      r[   r   c                 v    | ||fz   }t          j        |          }t          j        ||          }d|d||f<   |S )NrO   .)r   arangezeros)batch_shaper   r#   r   idxrX   s         r   stacked_identityre      sC    1a& E
+a..C
5%  AAc3mHr   c                     | j         d         }t          j        |          }t          j        |           } d| d||f<   | S )zH
    Precondition: ``x`` is `cupy.ndarray` of shape ``(..., N, N)``
    rO   .)r   r   ra   
zeros_like)rX   r   rd   s      r   stacked_identity_likeri      s@     	
A
+a..CAAc3mHr   )r   )osr3   r   r   
cupy._utilr   rC   getenvr.   r   r   r   r   r8   r2   rM   rQ   ElementwiseKernelrV   rZ   r^   r_   re   ri   r"   r   r   <module>rn      s   				                    RY788 
: : :2 2 2; ; ;A A A( 04 '' '' '' '' ''T. . .! ! !./ / /( 'u&u6	      'u&uN	     
      r   