
    qi                    f    d dl mZ d dlmZ d dlmZmZmZ d dlZerddl	m
Z
 e G d d             Zy)	    )annotations)	dataclass)AnyOptionalTYPE_CHECKINGN   DimEntryc                  r    e Zd ZU ded<   ded<   ded<   ded<   ddZdd	Zdd
Ze	 d	 	 	 	 	 	 	 dd       Zy)
TensorInfozOptional[torch.Tensor]tensorzlist[DimEntry]levelsbool
has_devicebatchedtensorc                R    ddl m t        fd| j                  D              sJ y )Nr   r	   c              3  6   K   | ]  }t        |        y wN)
isinstance).0lr
   s     `/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/functorch/dim/_tensor_info.py	<genexpr>z+TensorInfo.__post_init__.<locals>.<genexpr>   s     @q:a*@s   )
_dim_entryr
   allr   )selfr
   s    @r   __post_init__zTensorInfo.__post_init__   s    (@DKK@@@@    c                2    ddl m}  || j                        S )Nr   )ndim_of_levels)r   r    r   )r   r    s     r   ndimzTensorInfo.ndim   s    .dkk**r   c                    | j                   d uS r   )r   )r   s    r   __bool__zTensorInfo.__bool__   s    {{$&&r   c                   ddl m}m}m} |j	                  |       rNt        | j                         | j                         | j                         |r| j                               S d       S |j	                  |       rS| j                  r| j                         nd }|r| j                  r| j                         nd }t        | ||       gd|      S t        | t        j                        rGg }t        | j                          d      D ]  }	|j!                   ||	              t        | |d|       S |rt#        d      t        d g dd       S )Nr   )Dimr
   TensorFr   Tzexpected a tensor object) r%   r
   r&   check_exactr   _get_tensor_get_levels_get_has_device_get_batchtensoris_bound
_get_ranger   torchrangedimappend
ValueError)
hensure_batchedensure_presentr%   r
   r&   r   batchtensorr   is
             r   createzTensorInfo.create!   s2    	,+a !!#(6""$	  =A	  __Q'(zzQ\\^tF(61::""$4  !	  5<<(FAEEG8Q' +hqk*+aq11 !;<<dBt44r   N)returnNone)r:   int)r:   r   )TT)r4   r   r5   r   r6   r   r:   r   )	__name__
__module____qualname____annotations__r   r!   r#   staticmethodr9    r   r   r   r      sa    ""))A
+
' DH"5"5 $"5=A"5	"5 "5r   r   )
__future__r   dataclassesr   typingr   r   r   r/   r   r
   r   rB   r   r   <module>rF      s5    " ! / /  $ 65 65 65r   