
    ȅi                    p    S SK Jr  S SKJr  S SKJrJrJr  S SKr\(       a  SSK	J
r
  \ " S S5      5       rg)	    )annotations)	dataclass)AnyOptionalTYPE_CHECKINGN   DimEntryc                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   SS	 jrSS
 jrSS jr\ S       SS jj5       r	Sr
g)
TensorInfo   zOptional[torch.Tensor]tensorzlist[DimEntry]levelsbool
has_devicebatchedtensorc                ^   ^ SSK Jm  [        U4S jU R                   5       5      (       d   eg )Nr   r	   c              3  <   >#    U  H  n[        UT5      v   M     g 7fN)
isinstance).0lr
   s     T/home/james-whalen/.local/lib/python3.13/site-packages/functorch/dim/_tensor_info.py	<genexpr>+TensorInfo.__post_init__.<locals>.<genexpr>   s     @Kq:a**Ks   )
_dim_entryr
   allr   )selfr
   s    @r   __post_init__TensorInfo.__post_init__   s!    (@DKK@@@@@    c                2    SSK Jn  U" U R                  5      $ )Nr   )ndim_of_levels)r   r#   r   )r   r#   s     r   ndimTensorInfo.ndim   s    .dkk**r!   c                    U R                   S L$ r   )r   )r   s    r   __bool__TensorInfo.__bool__   s    {{$&&r!   c                   SSK JnJnJn  UR	                  U 5      (       aS  [        U R                  5       U R                  5       U R                  5       U(       a  U R                  5       5      $ S 5      $ UR	                  U 5      (       ab  U R                  (       a  U R                  5       OS nU(       a!  U R                  (       a  U R                  5       OS n[        UU" U 5      /SU5      $ [        U [        R                  5      (       aH  / n[        U R                  5       * S5       H  n	UR!                  U" U	5      5        M     [        XSU 5      $ U(       a  [#        S5      e[        S / SS 5      $ )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   createTensorInfo.create!   s4    	,+a  !!#(6""$	  =A	  __Q'(zzQ\\^tF(61::""$4  !	  5<<((FAEEG8Q'hqk* (aq11 !;<<dBt44r!    N)returnNone)rA   int)rA   r   )TT)r9   r   r:   r   r;   r   rA   r   )__name__
__module____qualname____firstlineno____annotations__r   r$   r'   staticmethodr>   __static_attributes__r@   r!   r   r   r      sa    ""))A
+
' DH"5"5 $"5=A"5	"5 "5r!   r   )
__future__r   dataclassesr   typingr   r   r   r4   r   r
   r   r@   r!   r   <module>rN      s5    " ! / /  $ 65 65 65r!   