
    PhJ@                     X   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dl  d a e       Zdd	d
Z G d dej                        Z G d dej"                  j$                        Z G d dej"                  j$                        Z G d dej"                  j$                        Z	 	 ddeej                     deej                     deeej                  f   fdZdej                  dej                  dej                  deeej                  eej                     f   fdZd Zy)    )TupleN)DispatchKeyDispatchKeySet)is_expandable_to)has_free_symbols)WeakTensorKeyDictionary)*   coeffc                    | t         vr4t        j                  j                  t        |      t         | <   t        dz  at         |    S )Nr
   )_tensor_symint_registrytorch_C_get_singleton_int_tensor_id_counter)tensorr   s     oC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/nested/_internal/nested_tensor.pyget_tensor_symintr      sB    ,,*/((*E*E+
' 	a"6**    c                   @    e Zd ZU ej                  ed<   ej                  ed<   eej                     ed<   eedf   ed<   eedf   ed<   eed<   eed<   eed	<   e	d
dd       Z
d
d fd
Zd Zd Zd Zd Zd Zd Ze	defd       Zedd       Zedd       Z xZS )NestedTensor_values_offsets_lengths._size_stride_ragged_idx_max_seqlen_min_seqlenN)lengthsc                N   t        t        j                        }|j                  t        j                        }t
        j                  j                  | dddt
        j                  |j                  t
        j                  |j                  d|j                  dd      ddd|      }|S )N)r   r   Frequires_gradsizesT)r   r   r   addAutogradNestedTensorr   Tensor_make_wrapper_subclasscontiguous_formatdtypejaggeddeviceget)clsvaluesoffsetsr!   kwargsksrs          r   __new__zNestedTensor.__new__2   s     K445VVK445LL//##LLLLMMJJ.
  r   c                   t         |           |J |j                  dk(  sJ t        |t              rJ ||n|}t        |d      }|j                  dd      | _        |j                  d   dz
  }|j                  d | j                  dz
   |j                  | j                  d  z   }|g}	|	j                  |d | j                  dz
          |	j                  |       |	j                  || j                  dz
  d         t        |	      | _        |j                         }
||
| j                  dz
     z  g|
| _        |j                  rt!        d      || _        || _        || _        d }d|v r|d   n( |t(        j*                  ||j-                         n|      | _        d|v r|d   | _        y  |t(        j0                  ||j-                         n|      | _        y )	Nr
   r   r   r   zaNestedTensor values cannot require grad, please detach before passing to NestedTensor constructorc                 @    t         | |      j                               S N)intitem)funcr   s     r   get_sdpa_extreme_seqlenz6NestedTensor.__init__.<locals>.get_sdpa_extreme_seqlenq   s    tF|((*++r   r   r    )super__init__ndim
isinstancer   r   r-   r   shapeextendappendtupler   stride_stridesr#   
ValueErrorr   r   r   r   maxdiffr   minr    )selfr/   r0   r!   r1   ragged_sourceragged_sizeBDsnested_sizerD   r;   	__class__s               r   r=   zNestedTensor.__init__O   s   """||q   fl333 $+?'Q?!::mQ7MM!q \\0D,,q01FLLAQAQAS4TTc24 0 01 456;'2d..2456;'
$vd.>.>.B'CCMfMD  	, & =!(		W_7<<>' 	 & =! 	 )		W_7<<>' 	r   c                     | j                   S r7   )r   rJ   s    r   r/   zNestedTensor.values   s    ||r   c                     | j                   S r7   )r   rR   s    r   r0   zNestedTensor.offsets       }}r   c                     | j                   S r7   )r   rR   s    r   r!   zNestedTensor.lengths   rT   r   c                     | j                   rd| j                    nd}| j                  rd| j                   }d| j                   d| j                   | d| j                  d u  dS )Nz, requires_grad= z
, grad_fn=zNestedTensor(size=z
, offsets=z, contiguous=))r#   grad_fnr   r   r   )rJ   grad_fn_strs     r   __repr__zNestedTensor.__repr__   su     8<7I7It1123r 	 <<&t||n5K#DJJ<z$--Ubcgcpcptxcxbyyz{{r   c                    t         j                  j                  |       }d|v rd|v sJ t        |      }|d= |d= t        }| j
                  | j                  f}t         j                  j                  |t        |       ||ffS )Nr   rE   )
r   _utils_get_obj_statedictr   r   r   _tensor_rebuild_from_type_v2type)rJ   protostater:   argss        r   __reduce_ex__zNestedTensor.__reduce_ex__   s~    ++D1 %J%$777U'N*dmm,33dDJe5TUUr   c                     | j                   | j                  | j                     | j                  | j                  | j                  d}ddg}| j
                  |j                  d       ||fS )N)r#   rL   
max_seqlen
min_seqlen
ragged_idxr   r   r   )r#   r   r   r   r    r   rB   )rJ   ctxinner_tensorss      r   __tensor_flatten__zNestedTensor.__tensor_flatten__   sn    !//::d&6&67******
 #J/==$  ,c!!r   rl   c           
         t        |       dk\  rt        |       dk  sJ | d   }| d   }| j                  dd       }||n|}t        |      st        |      r|d   t        |<   t	        ||||d   |d   |d	   |d
         S )N      r   r   r   rL   r#   rh   ri   rj   )r0   r!   r#   r   r    r   )lenr-   r   r   r   )rl   metar/   r0   r!   rK   s         r   __tensor_unflatten__z!NestedTensor.__tensor_unflatten__   s    =!Q&3}+=+BBBy)
+##J5< $+?M*.>v.F 6:-5H#M2/\*\*\*
 	
r   c                 \    |i n|}ddl m}  ||g|i |}| ||i |S t        |      )Nr
   )lookup_jagged)opsru   NotImplementedError)r.   r:   typesre   r1   ru   fns          r   __torch_dispatch__zNestedTensor.__torch_dispatch__   sF    ~6 	'41$1&1>t&v&&!$''r   c                     |i }ddl m} 	  ||g|i |S # t        $ r Y nw xY wt        j                  j                         5   ||i |cd d d        S # 1 sw Y   y xY w)Nr
   )jagged_torch_function)rv   r|   rw   r   r   DisableTorchFunctionSubclass)r.   r:   rx   re   r1   r|   s         r   __torch_function__zNestedTensor.__torch_function__   sd    >F.	(????" 		XX224(( 544s    	$$AA ) N)__name__
__module____qualname__r   r'   __annotations__Optionalr   r8   staticmethodr4   r=   r/   r0   r!   r[   rf   rm   Dictrs   classmethodrz   r~   __classcell__)rP   s   @r   r   r      s    \\llu||$$ c?38_  8 48 4
l|V" 0
D 0
 0
d 
( 
( ) )r   r   c                   L    e Zd Zedefd       Zedej                  fd       Zy)ViewBufferFromNestedxc                     | j                  |j                                |j                  | _        |j                  | _        |j                  | _        |j                         S r7   )save_for_backwardr0   r   rh   r    ri   r   r/   )rk   r   s     r   forwardzViewBufferFromNested.forward  sC    aiik*--xxzr   gOc                 z    | j                   \  }t        ||| j                  | j                  | j                        S )N)r0   r   r    r   )saved_tensorsr   rh   ri   r   )rk   r   r0   s      r   backwardzViewBufferFromNested.backward
  s7    &&

 	
r   N)	r   r   r   r   r   r   r   r'   r   r   r   r   r   r     s:       
%,, 
 
r   r   c            	       l    e Zd Zedej
                  dej
                  dedefd       Zedefd       Z	y)	ViewNestedFromBufferr/   r0   rh   ri   c                 <    t        |j                         |||      S )N)r0   r   r    r   detach)rk   r/   r0   rh   ri   s        r   r   zViewNestedFromBuffer.forward  s!    MMO""	
 	
r   r   c                 *    |j                         d d d fS r7   r/   rk   r   s     r   r   zViewNestedFromBuffer.backward!  s    yy{D$,,r   N
r   r   r   r   r   r'   r8   r   r   r   r   r   r   r   r     sT    
U\\ 
ELL 
c 
_b 
 
 -, - -r   r   c                       e Zd Zedej
                  dej
                  dej
                  dedef
d       Zedefd       Z	y	)
!ViewNonContiguousNestedFromBufferr/   r0   r!   rh   ri   c                 >    t        |j                         ||||      S )N)r0   r!   r   r    r   )rk   r/   r0   r!   rh   ri   s         r   r   z)ViewNonContiguousNestedFromBuffer.forward)  s$    MMO""
 	
r   r   c                 ,    |j                         d d d d fS r7   r   r   s     r   r   z*ViewNonContiguousNestedFromBuffer.backward3  s    yy{D$d22r   Nr   r   r   r   r   r   (  s`    
U\\ 
ELL 
5<< 
eh 
vy 
 
 3, 3 3r   r   tensorsr0   returnc           
         t        t        d | D                    dk(  st        d      t        t        d | D                    dk(  st        d      | D cg c]  }|j                   }}|D cg c]  }|dd 	 c}t	        fdD              }|st        d      t        j                  | d	
      }i }	|||	d<   |||	d<    |j                  di |	}|t        j                  t        j                  dt
        j                  |j                        t        j                  |D cg c]  }|d	   	 c}|j                        j                  d	
      g      }t        | D cg c]  }|j                  d	    c}      }
t        | D cg c]  }|j                  d	    c}      }t        j!                  |||
|      |fS c c}w c c}w c c}w c c}w c c}w )zHConstructs a NestedTensor backed by jagged layout from a list of tensorsc              3   4   K   | ]  }|j                     y wr7   )r*   .0ts     r   	<genexpr>z#jagged_from_list.<locals>.<genexpr>A  s     ,Gq177G   r
   zOWhen constructing a nested tensor, all tensors in list must have the same dtypec              3   4   K   | ]  }|j                     y wr7   r,   r   s     r   r   z#jagged_from_list.<locals>.<genexpr>E  s     -W188Wr   zQWhen constructing a nested tensor, all tensors in list must be on the same deviceNc              3   .   K   | ]  }|d    k(    yw)r   Nr   )r   snon_first_sizess     r   r   z#jagged_from_list.<locals>.<genexpr>O  s     P1qOA$66s   zCannot represent given tensor list as a nested tensor with the jagged layout. Note that the jagged layout only represents shapes of the form (B, *, D_0, D_1, ..., D_N), with only * allowed to be ragged.r   )dimr,   r*   r*   r,   r   r   )rq   setRuntimeErrorr@   allr   cattozerosint64r,   r   cumsumrG   rI   r   apply)r   r0   r*   r,   r   r$   r   at_most_first_raggedr/   	to_kwargsrh   ri   r   s               @r   jagged_from_listr   9  s    s,G,,-2]
 	
 s-W--.!3_
 	
 &&gQWWgE&&+,eque,OPPPL
 	
 YYwA&FI$	("	'VYY##F ))AU[[GE2EqadE26==IPPUVPW
 '2'Qaggaj'23J'2'Qaggaj'23J%%fgz:NPWWWA ',0 3 32s   G1G-G*GGr   startsr!   c                    | j                   d   }t        |j                   |f      r:t        |j                   |f      r#|j                  |      }|j                  |      }nt        d      t	        | j                         dk\  sJ d       | j                   d   }|t        j                  d|t
        j                  | j                        z  }t        j                  ||z   |d   |d   z   |d   z   j                  d      g      }t	        | j                         dkD  r! | j                  dg| j                   dd  }	n| j                  d      }	d	}
| j                   d   }t        j                  |dd j                  |            rd
}
t        j                  |dd j                         j                  |            rd
}
|d   |d   z   |k7  rd
}
t        t        j                   |      j#                               }t        t        j$                  |      j#                               }|
r*t&        j)                  |	|d   |d    ||d   z
  ||      |dfS t*        j)                  |	||||      ||fS )zjConstructs a NestedTensor backed by jagged layout from a tensor, starts of sequences, and sequence lengthsr   zWhen constructing a jagged nested tensor using narrow(), your start and length must be Tensors that broadcast to input.shape[0]ro   z;tensor must at least be 2D for the nested narrow op to workr
   r   NTF)r@   r   expandr   rq   r   aranger   r,   r   	unsqueezeviewanynerH   r8   rG   r9   rI   r   r   r   )r   r   r!   
batch_size
start_listlength_listmax_seq_lenoffset_lengthsr0   r/   is_contiguousorig_dimactual_max_seqlenri   s                 r   jagged_from_tensor_and_lengthsr   p  si    aJzm49I
}: ]]:.
nnZ0U
 	
 	FLLQEDE,,q/K 5<<	:U[[$ N ii'^nR00;r?BMMaP	
G 6<<1R3&,,qr"23R M||AHyyQr"%%h/0yy2##%((23qzKN"h.EIIg.3356UYYw',,./J &&wqzGBK0'!*$!	 	
 		
 	*//G[*;Z	
 	 r   c                 ,    t         j                  |       S r7   )r   r   )r+   s    r   buffer_from_jaggedr     s    %%f--r   )NN)typingr   r   torch._Cr   r   torch._prims_commonr   %torch.fx.experimental.symbolic_shapesr   torch.utils.weakr   r   r   r   r'   r   autogradFunctionr   r   r   Listr   r   r   r   r   r   r   <module>r      s)     0 0 B 4  13  () +e)5<< e)R
5>>22 
,-5>>22 -"3(?(? 3( 	4X%,,4Xell#4X
 <%&4XnELLE"',,E9>E
<x'==>EP.r   