
    i                     t    S r SSKrSSKJr  SSKJr  / SQrSqSq	Sr
S rS	 rS
 rSS jr\S 5       rS rS rg)zN
Required functions for optimized contractions of numpy arrays using pytorch.
    N   )convert_to_valid_einsum_chars)to_backend_cache_wrap)	transposeeinsum	tensordotto_torchbuild_expressionevaluate_constants4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZc                      [         c6  SS Kn U R                  R                  5       (       a  SOSnX4q [	        U S5      q[         $ )Nr   cudacpur   )_TORCH_DEVICEtorchr   is_availablehasattr_TORCH_HAS_TENSORDOT)r   devices     Y/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/opt_einsum/backends/torch.py_get_torch_and_devicer      s@      ::2244%&uk:    c                      U R                   " U6 $ )z:Normal torch transpose is only valid for 2D matrices.
    )permute)aaxess     r   r   r      s     99dr   c                 R    [        U 5      n [        5       u  p#UR                  X5      $ )z9Variadic version of torch.einsum to match numpy api.
    )r   r   r   )equationoperandsr   _s       r   r   r   %   s'    
 -X6H$&HE<<++r   c                 @   [        5       u  p4[        (       a  UR                  XUS9$ U R                  5       nUR                  5       n[	        U[
        5      (       a  [        XR-
  U5      [        U5      4n[	        US   [
        5      (       a  US   4US   4n[	        US   [
        5      (       a  US   US   44nS/U-  nS/U-  n/ n	[        [        5      n
[        U6  H  u  p[        U
5      nXU'   XU'   M     [        U5       H*  nX~   b  M
  [        U
5      nXU'   U	R                  U5        M,     [        U5       H*  nX   b  M
  [        U
5      nXU'   U	R                  U5        M,     SR                  " [        SR                  XxU	45      6 n[        UX5      $ )z6Simple translation of tensordot syntax to einsum.
    )dimsr      Nz	{},{}->{} )r   r   r   
ndimension
isinstanceintrangeiter_torch_symbols_basezipnextappendformatmapjoinr   )xyr   r   r    xndyndx_ixy_ixout_ixavailable_ixax1ax2repeatileave
einsum_strs                    r   r   r   0   s    %&HEq$//
,,.C
,,.C $SZ%uT{2 $q'3Q{DG#$q'3Awa# 6C<D6C<DF +,LJl#S	S	  3Z7?&EGMM% 	 
 3Z7?&EGMM% 	  ##S4v2F%GHJ*a##r   c                     [        5       u  p[        U [        R                  5      (       a   UR	                  U 5      R                  U5      $ U $ )N)r   r&   npndarray
from_numpyto)arrayr   r   s      r   r	   r	   b   s>    )+ME%$$&))&11Lr   c                    ^ U4S jnU$ )z=Build a torch function based on ``arrays`` and ``expr``.
    c                     > U  Vs/ s H  n[        U5      PM     nnTR                  USS9nUR                  R                  S:X  a  UR	                  5       $ UR                  5       R	                  5       $ s  snf )Nr   )backendr   )r	   	_contractr   typenumpyr   )arraysr1   torch_arrays	torch_outexprs       r   torch_contract(build_expression.<locals>.torch_contracto   sh    -34VV4NN<NA	  E)??$$}}$$&& 5s   A5 )r    rN   rO   s    ` r   r
   r
   l   s    ' r   c                 T    U  Vs/ s H  n[        U5      PM     n nU" U SSS.6$ s  snf )zUConvert constant arguments to torch, and perform any possible constant
contractions.
r   T)rG   r   )r	   )const_arraysrN   r1   s      r   r   r   {   s0     *66AHQKL6w4HH 7s   %)r   )__doc__rJ   r@   parserr   sharingr   __all__r   r   r*   r   r   r   r   r	   r
   r   rQ   r   r   <module>rX      s_     2 +
d L 
,/$d  Ir   