
    Ph!                        d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlZd dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZmZ d dlmZ d	d
lmZ  G d dej:                        Z G d de      Zy)    )annotationsN)AnyCallableDictListOptionalTupleTypeUnion)nn)tree_flattentree_unflatten)
tv_tensors)
check_typehas_anyis_pure_tensor)_log_api_usage_once   )_get_kernelc                       e Zd ZU ej                  ej                  j                  fZded<   d fdZ	ddZ
ddZddZddZddZdd	Zdd
ZdZded<   ddZddZddZ xZS )	Transformz.Tuple[Union[Type, Callable[[Any], bool]], ...]_transformed_typesc                8    t         |           t        |        y N)super__init__r   )self	__class__s    oC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchvision/transforms/v2/_transform.pyr   zTransform.__init__   s    D!    c                     y r    r   flat_inputss     r   _check_inputszTransform._check_inputs   s    r    c                    t               S r   )dictr#   s     r   _get_paramszTransform._get_params   s	    vr    c                H    t        |t        |      d      } ||g|i |S )NT)allow_passthrough)r   type)r   
functionalinptargskwargskernels         r   _call_kernelzTransform._call_kernel!   s)    ZdtLd,T,V,,r    c                    t         r   )NotImplementedError)r   r-   paramss      r   
_transformzTransform._transform%   s    !!r    c                ~   t        t        |      dkD  r|n|d         \  }}| j                  |       | j                  |      }| j	                  t        ||      D cg c]
  \  }}|s	| c}}      }t        ||      D cg c]  \  }}|r| j                  ||      n| }}}t        ||      S c c}}w c c}}w Nr   r   )r   lenr%   _needs_transform_listr(   zipr5   r   	r   inputsr$   specneeds_transform_listr-   needs_transformr4   flat_outputss	            r   forwardzTransform.forward(   s    (3v;?q	RT;'#99+F!!14[BV1Wk1W-t_[jT1Wk
 ,/{<P+Q
+Q' .=DOOD&)$F+Q 	 

 lD11 l
s   
B3
)B3
 B9c                   g }t        |t        j                  t        j                  t        j                  j                         }|D ]@  }d}t        || j                        sd}nt        |      r|rd}nd}|j                  |       B |S )NTF)	r   r   ImageVideoPILr   r   r   append)r   r$   r>   transform_pure_tensorr-   r?   s         r   r9   zTransform._needs_transform_list9   s    "  "$+K9I9I:K[K[]`]f]f]l]l$m mD"OdD$;$;<"'%(,1)&+O ''8   $#r    c                :   g }| j                   j                         D ]l  \  }}|j                  d      s|dk(  rt        |t        t
        t        t        t        t        t        j                  f      sW|j                  | d|        n dj                  |      S )N_training=z, )__dict__items
startswith
isinstanceboolintfloatstrtuplelistenumEnumrF   join)r   extranamevalues       r   
extra_reprzTransform.extra_reprY   s    ==..0KD%s#tz'9edCUD$))%TULLD65'*+ 1 yyr    NzOptional[Type[nn.Module]]_v1_transform_clsc                    | j                   <t        | j                   d      r%t        | j                   j                        | _        y y y )N
get_params)r]   hasattrstaticmethodr_   )clss    r   __init_subclass__zTransform.__init_subclass__m   sA       ,9N9NP\1])#*?*?*J*JKCN 2^,r    c                    t        j                         j                  j                         }| j                  j	                         D ci c]  \  }}|j                  d      s||vr|| c}}S c c}}w )NrI   )r   ModulerL   keysrM   rN   )r   common_attrsattrr[   s       r    _extract_params_for_v1_transformz*Transform._extract_params_for_v1_transforms   sm     yy{++002  $}}224
4e??3'D,D %K4
 	
 
s   
"A0c                    | j                   "t        dt        |       j                   d       | j                   di | j	                         S )Nz
Transform z cannot be JIT scripted. torchscript is only supported for backward compatibility with transforms which are already in torchvision.transforms. For torchscript support (on tensors only), you can use the functional API instead.r"   )r]   RuntimeErrorr+   __name__ri   )r   s    r   __prepare_scriptable__z Transform.__prepare_scriptable__   s\     !!)T$Z001 2e e  &t%%P(M(M(OPPr    )returnNone)r$   	List[Any]rn   ro   )r$   rp   rn   Dict[str, Any])
r,   r   r-   r   r.   r   r/   r   rn   r   )r-   r   r4   rq   rn   r   r<   r   rn   r   )r$   rp   rn   z
List[bool])rn   rS   )rn   rq   )rn   z	nn.Module)rl   
__module____qualname__torchTensorrE   rC   r   __annotations__r   r%   r(   r1   r5   rA   r9   r\   r]   rc   ri   rm   __classcell__r   s   @r   r   r      sq     KP,,X[XaXaXgXgIhFh"-"2"$@ $ 4807L
Qr    r   c                  *     e Zd Zdd fdZddZ xZS )_RandomApplyTransformc                t    d|cxk  rdk  st        d       t        d      t        | 	          || _        y )Ng        g      ?z@`p` should be a floating point value in the interval [0.0, 1.0].)
ValueErrorr   r   p)r   r~   r   s     r   r   z_RandomApplyTransform.__init__   s=    qC_``  _``r    c                   t        |      dkD  r|n|d   }t        |      \  }}| j                  |       t        j                  d      | j
                  k\  r|S | j                  |      }| j                  t        ||      D cg c]
  \  }}|s	| c}}      }t        ||      D cg c]  \  }}|r| j                  ||      n| }}}t        ||      S c c}}w c c}}w r7   )r8   r   r%   ru   randr~   r9   r(   r:   r5   r   r;   s	            r   rA   z_RandomApplyTransform.forward   s    
 v;?q	(0T;'::a=DFF"M#99+F!!14[BV1Wk1W-t_[jT1Wk
 ,/{<P+Q
+Q' .=DOOD&)$F+Q 	 

 lD11 l
s   
C
C
* C)g      ?)r~   rR   rn   ro   rr   )rl   rs   rt   r   rA   rx   ry   s   @r   r{   r{      s    2r    r{   ) 
__future__r   rV   typingr   r   r   r   r   r	   r
   r   	PIL.ImagerE   ru   r   torch.utils._pytreer   r   torchvisionr    torchvision.transforms.v2._utilsr   r   r   torchvision.utilsr   functional._utilsr   re   r   r{   r"   r    r   <module>r      sP    "  J J J    < " P P 1 *}Q		 }Q@2I 2r    