
    9j2                    b    d dl mZ d dlmZ d dlmZmZ d dlZerddlm	Z	 e G d d             Z
y)	    )annotations)	dataclass)Any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torch.Tensor | Nonetensorzlist[DimEntry]levelsbool
has_devicebatchedtensorc                d    ddl m t        fd| j                  D              st	        d      y )Nr   r   c              3  6   K   | ]  }t        |        y wN)
isinstance).0lr	   s     Z/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/functorch/dim/_tensor_info.py	<genexpr>z+TensorInfo.__post_init__.<locals>.<genexpr>   s     @q:a*@s   z%All levels must be DimEntry instances)
_dim_entryr	   allr   AssertionError)selfr	   s    @r   __post_init__zTensorInfo.__post_init__   s*    (@DKK@@ !HII A    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    &&J+
' DH"5"5 $"5=A"5	"5 "5r   r   )
__future__r   dataclassesr   typingr   r   r/   r   r	   r   rB   r   r   <module>rF      s2    " ! %  $ 75 75 75r   