
    %VjiG                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	lm Z m!Z!  ed
          Z" ed          Z#ededej$        defd            Z%ededej$        defd            Z%ededej$        defd            Z%edddej$        ddfd            Z%d Z%dede&defdZ'd Z( G d d          Z)dedefdZ*	 d0dededeej+                 fdZ,dede-fdZ.d ed!eddfd"Z/d#d$d ed!ed%e-fd&Z0d#d#d#d'd(e1d%e-d)e-d*e-de	e	e#e"f         ge	e#e"f         f         f
d+Z2d,e	fd-Z3d. Z4d,e	e#e"f         de	e#ee"ef         f         fd/Z5dS )1    N)Sequence)wraps)GenericAlias)Callable
NamedTupleOptionaloverloadTypeVarUnion)	ParamSpec)CustomOutParamAnnotationELEMENTWISE_TYPE_PROMOTION_KINDNumber
NumberType	ShapeType
TensorLikeTensorLikeType)_pytree)tree_flattentree_unflatten_T_Padtypereturnc                     d S N r   r   s     V/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_prims_common/wrappers.py_maybe_convert_to_dtyper!          D    c                     d S r   r   r   s     r    r!   r!   #   r"   r#   c                     d S r   r   r   s     r    r!   r!   (   r"   r#   c                     d S r   r   r   s     r    r!   r!   -   r"   r#   c                 ~   t          | t                    r"| j        k    r|                               S | S t          | t                    r t          j                  |           S t          | t                    rt          fd| D                       S | d S t          dt          |            d          )Nc              3   8   K   | ]}t          |          V  d S r   r!   ).0xr   s     r    	<genexpr>z*_maybe_convert_to_dtype.<locals>.<genexpr>;   s.      BB1,Q66BBBBBBr#   zReceived unsupported type z+. Expected TensorLike, Number, or Sequence.)
isinstancer   r   tor   utilsdtype_to_type_ctorr   tuple
ValueErrortyper   s    `r    r!   r!   3   s    !Z   7e44;;!V 2.u'..q111!X CBBBBBBBBBB 	yt
YT!WWYYY  r#   typc                    t          | t                    s"dt          |            d}t          |          t	          j        t          |           |          s(d|  dt          |            d| d}t          |           ||           S )NzFound unknown type z  when trying to convert scalars!zScalar z	 of type z cannot be safely cast to type !)r-   r   r3   r2   r/   is_weakly_lesser_type)r   r4   msgs      r    _maybe_convert_to_typer9   F   s    a   MDGGMMMoo&tAww44 RRRDGGRRCRRRoo3q66Mr#   c                 j    t          |d          r |j        D ]}t          | |          r dS dS | |u S )N__args__)r4   
annotationTF)hasattrr;   _annotation_has_type)r4   r<   r   s      r    r>   r>   Q   sW    z:&& $ 	 	A#::: ttu*r#   c                   P    e Zd ZdZdddedeee                  fdZde	de	fd	Z
dS )
"elementwise_type_promotion_wrappera  
    Adds elementwise type promotion to a Python reference implementation.

    Takes two kwargs, type_promoting_args and type_promotion_kind.

    type_promoting_args must be a string Sequence specifying the argument names of all
    arguments that participate in type promotion (and should be type promoted). If the
    arg specifies a Sequence-type then every element of the Sequence will participate in
    type promotion.

    type_promotion_kind must be one of the kinds specified by ELEMENTWISE_TYPE_PROMOTION_KIND.
    See its documentation for details.

    The return_dtype will be coerced to the wrapped function's dtype arg if it is available and
    not None.

    Other type promotion behavior, like validating the Python type of scalar arguments, must
    be handled separately.
    N)type_promoting_argstype_promotion_kindrA   c                "    || _         || _        d S r   )type_promoting_arg_namesrB   )selfrB   rA   s      r    __init__z+elementwise_type_promotion_wrapper.__init__p   s     )<%#6   r#   fnr   c                      t          j                  t          j        t	                     fd                        }|_        |S )Nc                  D  	  j         | i |t          fdj        D                       }t          j        | }t          j        |dj        i\  	fdj        D             }j        	                    |            
di j        }dj        v rj        d         }|r|	t          |t                    rt          |	          S t          |t                    rt          	fd|D                       S t          dt          |                     )Nc              3   h   K   | ],}|j                                         v j         |         V  -d S r   )	argumentskeys)r*   r+   bounds     r    r,   zKelementwise_type_promotion_wrapper.__call__.<locals>._fn.<locals>.<genexpr>   sO       ( (,,.... "....( (r#   rB   c                 ~    i | ]9}|j                                         v |t          j         |                   :S r   )rK   rL   r!   )r*   r+   rM   compute_dtypes     r    
<dictcomp>zLelementwise_type_promotion_wrapper.__call__.<locals>._fn.<locals>.<dictcomp>   sP       ,,.... *5?1+=}MM...r#   r   c              3   8   K   | ]}t          |          V  d S r   r)   )r*   r+   result_dtypes     r    r,   zKelementwise_type_promotion_wrapper.__call__.<locals>._fn.<locals>.<genexpr>   s.      VV!4QEEVVVVVVr#   zUnhandled result type: r   )bindr1   rD   pytreearg_tree_leavesr/   elementwise_dtypesrB   rK   updater-   r   r!   r   AssertionErrorr3   )argskwargsrA   flattened_type_promoting_argspromoted_argsresultmaybe_dtyperM   rO   rR   rG   rE   sigs          @@@r    _fnz8elementwise_type_promotion_wrapper.__call__.<locals>._fn~   s    CHd-f--E"' ( ( ( (6( ( ( # # -3,BDW,X)*/*B.+$($<+ +'M<
    6  M
 O""=111R**%/**F %/))#og6 /#.L&*-- E.v|DDD&(++ WVVVVvVVVVVV !I4<<!I!IJJJr#   )inspect	signaturetorch_disable_dynamor   __signature__)rE   rG   r`   r_   s   `` @r    __call__z+elementwise_type_promotion_wrapper.__call__y   so    ## 
		r!	K !	K !	K !	K !	K !	K 
 
	!	KF  
r#   )__name__
__module____qualname____doc__r   r   r   strrF   r   rf   r   r#   r    r@   r@   [   s         0 8<	7 7 7 =7 &hsm4	7 7 7 7+8 + + + + + + +r#   r@   outshapec                     t          j        | j        |          rdS |                                 dk    r,dt	          | j                   d}t          j        |           dS )NFr   zCAn output with one or more elements was resized since it had shape a   which does not match the required output shape {str(shape)}. This behavior is deprecated, and in a future PyTorch release outputs will not be resized unless they have zero elements. You can explicitly reuse an out tensor t by resizing it, inplace, to zero elements with t.resize_(0).T)r/   
same_shaperm   numelrk   warningswarn)rl   rm   r8   s      r    _resize_output_checkrs      st    	5)) u
yy{{atRUVYV_R`R` t t t 	 	c4r#   memory_formatc                 T    t          | |          r|                     ||          S | S )N)rt   )rs   resize_)rl   rm   rt   s      r    _maybe_resize_outrw      s1    
 C'' {{5{>>>
r#   r+   c                 R    |                                  dk    o| j        j        dk    S )Nr   cpu)dimdevicer3   )r+   s    r    is_cpu_scalarr|      s"    5577a<2AHMU22r#   	copy_fromcopy_toc                 j    | j         |j         k    r"d| j          d|j          d}t          |          d S )NzAttempting to copy from device z to device z*, but cross-device copies are not allowed!)r{   RuntimeError)r}   r~   r8   s      r    check_copy_devicesr      s]    7>))Ti.> T T T T T 	 3 *)r#   F)exact_dtyper   c                 2    t                     st                      |r(t          j         j        j        k     fd           n7t          j        t          j         j        j                   fd                                          S )Nr}   r~   c                  *    d j          dj          dS )Nz"Expected out tensor to have dtype z	 but got z insteadr   r   s   r    <lambda>z _safe_copy_out.<locals>.<lambda>   s,     / / /}/ / / r#   )	cast_fromcast_toc                  *    d j          dj          dS )NzAttempting to cast from z to out tensor with dtype z0, but this can't be cast because it is not safe!r   r   s   r    r   z _safe_copy_out.<locals>.<lambda>   s-     =y = =ZaZg = = = r#   )r|   r   rc   _checkr   r/   can_safe_cast_tocopy_r}   r~   r   s   `` r    _safe_copy_outr      s     ## AY@@@@  
Ow},/ / / / /	
 	
 	
 	
 	"Y_gmTTT= = = = =	
 	
 	
 ==###r#   )r   pass_is_outpreserve_memory_format	out_namesr   r   c                      dt                    dk    rt                    dk    fddt          t          t          f         dt          t          t          f         f fd}|S )N)rl   r      c                 4    rt          j        |           nd S r   )r/   suggest_memory_format)tr   s    r    maybe_compute_memory_formatz0out_wrapper.<locals>.maybe_compute_memory_format   s    1GQu*1---TQr#   rG   r   c                    	 rt           nEt          t          t          d t          t	                              D                                 }rt           nJt          j        t          t          d t          t	                              D                                 }rt           n!t          d j         d D                       t          j	                   	dt          	fdD                       t                     dt          j        dt          j        f f	d	            }t          j        d
t          j        j        d|          }t#          	j        t&          t(          f          s	j        	j        ||fv sJ g 	j                                        |R }t1          |d           }t          j        |          |_        t7          t9           di                     |_        ||j        d
<   |j        d<   r
k    rd         |j        t<          <   dt>          j          d|_!        |S )z?
        Adds the out parameter to a Python reference.
        c              3   $   K   | ]}t           V  d S r   r   r*   _s     r    r,   z4out_wrapper.<locals>._out_wrapper.<locals>.<genexpr>  "      KK^KKKKKKr#   c              3   $   K   | ]}t           V  d S r   r   r   s     r    r,   z4out_wrapper.<locals>._out_wrapper.<locals>.<genexpr>  r   r#   return_types_c                      g | ]}|t           fS r   r   )r*   os     r    
<listcomp>z5out_wrapper.<locals>._out_wrapper.<locals>.<listcomp>  s    /W/W/WN0C/W/W/Wr#   )r{   r   c              3   *   K   | ]}|j         v V  d S r   )
parameters)r*   pr_   s     r    r,   z4out_wrapper.<locals>._out_wrapper.<locals>.<genexpr>  s*      HHAA/HHHHHHr#   rY   rZ   c                  t  	  |                     dd           r 
D ]}t          |          }||vr|||<    fd}t          t          t          f          rD ]} ||           n |           r  dd ui|n  i |t
          u rt
          S t          t                    rs^t          t                    r t                    t                    k    s)j        dk    rt          t          t          f          sJ rTj        dk    rIt          t                    sJ t          j
                              t          	           nj        dk    rt          t                    sJ nt          t          t          f          sJ t          j        t                    t                    k    fd           t                    D ]6\  }}t          ||j
         |                     t          ||	           7nrn  S )Nrl   c                     t          | t                    r4t          d         t                    rt          d         |            d S d S d S )Nr   r   )r-   r   r   )rl   rY   s    r    maybe_check_copy_deviceszPout_wrapper.<locals>._out_wrapper.<locals>._fn.<locals>.maybe_check_copy_devices(  sa    c:.. G:d1gz3R3R G&a#FFFFFFG G G Gr#   is_outunbindr   c                  H    dt                     dt                      S )Nzexpected tuple of z elements but got )len)rl   r]   s   r    r   z@out_wrapper.<locals>._out_wrapper.<locals>._fn.<locals>.<lambda>h  s(     ^S[[ ^ ^TWX[T\T\ ^ ^ r#   )popgetattrr-   r1   listNotImplementedr   r   rg   rw   rm   r   rc   _check_typezip)rY   rZ   kout_attrr   r   rrl   r]   r   factory_kwargsrG   is_factory_fn	is_tensorr   r   r   return_types   `      @@r    r`   z.out_wrapper.<locals>._out_wrapper.<locals>._fn  s   **UD))C -' - -A&sAH$,q	G G G G G #t}-- . 0 0A,,Q////0 )(--- -TF3d?FvFFT,V,,''%%FJ//	4=	 vu--	 Fs9~~55 K8++
6D%=0Q0Q++ "  X!8!8%c:66666%33F;;  
 #"( #$/     {h..)#u555555)#e}=====%CCKK/^^^^^   !$FC 0 0 X X1)!QW6Q6QRS6T6TUUU&A;WWWWWX
 #:33c)::r#   rl   N)kinddefaultr<   c                     | j         S r   )r   )r   s    r    r   z3out_wrapper.<locals>._out_wrapper.<locals>.<lambda>  s    af r#   )key)r   return_annotation__annotations__r   r   zThis function is wrapped by z.out_wrapper)"r   r   r1   ranger   typesr   rg   ra   rb   allr   r   rY   rZ   	ParameterKEYWORD_ONLYr-   r   rk   r
   emptyr   valuessorted	Signaturere   dictr   r   r   out_wrapperrh   !_torch_decompositions_out_wrapper)rG   out_typebc_out_typer`   	out_paramparamsr   r   r   r_   default_out_namesr   r   r   r   r   s   `     @@@@r    _out_wrapperz!out_wrapper.<locals>._out_wrapper   s    NNuKKU3y>>5J5JKKKKK  	 NN#uKKU3y>>5J5JKKKKK  	 NN---/W/WY/W/W/W  	 ##,HHHHHHHHH	rQ	;rw Q	;") Q	; Q	; Q	; Q	; Q	; Q	; Q	; Q	; Q	; Q	; Q	; Q	; Q	; 
Q	;f %"/	
 
 
	 !C>
 
 	
"I'
 
 
 

 5#.''))4944
 $4$4555#-)
 
 

 #72/@"#E#EFF%-E"(3H%  	I&777<EaLC 89 P;+AOOO 	- 
r#   )r   r   r   r   )r   r   r   r   r   r   r   r   s   ```` @@@r    r   r      s     !
9~~%	I!#IR R R R R^"b&) ^hr2v.> ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^@ r#   rG   c                 0    t          j        | d           S )Nc                 $    t          | d           S )Nr   )r=   )fs    r    r   z+_maybe_remove_out_wrapper.<locals>.<lambda>  s    71&IJJJ r#   )stop)ra   unwrap)rG   s    r    _maybe_remove_out_wrapperr     s$    >
JJ   r#   c                       fd G fddt           j        j                  t                     fd            }|S )Nc                     t           j                                        5   | i |cd d d            S # 1 swxY w Y   d S r   )rc   _C_AutoDispatchBelowAutograd)rY   rZ   prims     r    redispatch_primz0backwards_not_supported.<locals>.redispatch_prim  s    X0022 	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   599c                   @    e Zd Ze fd            Zed             ZdS )6backwards_not_supported.<locals>.BackwardsNotSupportedc                 B    t          ||          \  }} ||          S r   )r   )ctx	args_spec	flat_argsrY   rZ   r   s        r    forwardz>backwards_not_supported.<locals>.BackwardsNotSupported.forward  s(    ))Y??LD&"?4000r#   c                      t          d          )Nzbackwards not supported on prim)r   )r   rY   s     r    backwardz?backwards_not_supported.<locals>.BackwardsNotSupported.backward  s    @AAAr#   N)rg   rh   ri   staticmethodr   r   )r   s   r    BackwardsNotSupportedr     sX        		1 	1 	1 	1 
	1 
	B 	B 
	B 	B 	Br#   r   c                      t          | |f          \  }}t          j                    r't          d |D                       r j        |g|R  S  | |          S )Nc              3   X   K   | ]%}t          |t          j                  |j        V  &d S r   )r-   rc   Tensorrequires_grad)r*   r   s     r    r,   zBbackwards_not_supported.<locals>._autograd_impl.<locals>.<genexpr>  sI       +
 +
 !*Q2M2M+
O+
 +
 +
 +
 +
 +
r#   )r   rc   is_grad_enabledanyapply)rY   rZ   r   r   r   r   s       r    _autograd_implz/backwards_not_supported.<locals>._autograd_impl  s    +T6N;;	9 "" 	1s +
 +
%.+
 +
 +
 (
 (
 	1 /(.yE9EEEE"?4000r#   )rc   autogradFunctionr   )r   r   r   r   s   ` @@r    backwards_not_supportedr     s    ) ) ) ) )B B B B B B B 7 B B B 4[[1 1 1 1 1 [1& r#   c                 r     t          j                   }t                      fd            }||_        |S )zQ
    Allows unary operators that accept tensors to work with Python numbers.
    c                     t          |           dk    rt          | d         t                    rt          j        t          | d                             }t          |           }t          j        | d         |          |d<    |i |}t          |t          j	                  sJ |
                                S  | i |S )Nr   r   )r   r-   r   r/   type_to_dtyper3   r   rc   tensorr   item)rY   rZ   r   args_r]   rG   s        r    r`   z-elementwise_unary_scalar_wrapper.<locals>._fn  s    t99q==ZQ88='T!W66EJJE|DG5999E!HR)&))Ffel33333;;== r4"6"""r#   )ra   rb   r   re   )rG   r_   r`   s   `  r     elementwise_unary_scalar_wrapperr     sM     
B

C
2YY	# 	# 	# 	# Y	# CJr#   r   )6ra   r   rq   collections.abcr   	functoolsr   r   typingr   r   r   r	   r
   r   typing_extensionsr   rc   torch._prims_common_prims_commonr/   r   r   r   r   r   r   r   torch.utilsr   rT   torch.utils._pytreer   r   r   r   r   r!   r3   r9   r>   r@   rs   rt   rw   boolr|   r   r   rk   r   r   r   r   r   r#   r    <module>r     s      $ $ $ $ $ $             K K K K K K K K K K K K K K K K ' ' ' ' ' '  # # # # # #                  * ) ) ) ) ) < < < < < < < < WT]]Yt__ 
	~ 	ek 	n 	 	 	 
	 
	z 	%+ 	* 	 	 	 
	 
	x 	 	 	 	 	 
	 
	t 	EK 	D 	 	 	 
	
  &j t 
      I I I I I I I IZn Y    ( 48 	 E/0   3^ 3 3 3 3 3 ^  n  QU         PU$ $ $ $+9$HL$ $ $ $4 #(	v v vvv v !	v
 xB (2r6"223v v v vr(    # # #RRb%J''(     r#   