
    rho                        U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZmZmZ d dlZd dlmc mZ d dlmZ d dlmZmZmZmZmZ d dlm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( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZEmFZF  eF       rd dlGmHZH  e$j                  eJ      ZKej                  j                  dd      j                         eEv ZO	 dwdePe*   deeeQeReQ   f      deReQ   fdZSg dZTddgZUg ZVeTD ]:  ZW eXeWeY      reVj                   eSdxi eW       $eVj                   eSeW             < g dZ[ e\ e] e^eVe[z                     Z_da`d Za	 dydZbd Zcd Zdd  Zed! Zfd" Zgdzd#Zhd$ Zidd%d&Zjd' Zkd( Zld{dd%d)Zmd{dd%d*Znddd+d,Zodd%d-Zpd. Zqdd%d/Zrdd%d0Zsdddd1d2Ztdddd1d3Zud4 Zvd5 Zwddd6d7Zxdd%d8Zyd9 Zzddd:d;Z{d< Z|dwd=Z}d> Z~d? Zd@ ZdA ZdwdBZdwdCZdD ZdE ZdF Zd|dGZ	 d}dHZdI ZdJ ZdK ZdL Zi ej,                  j                  eaej,                  j                  j                  ebej,                  j                   ecej,                  j"                  edej,                  j$                  eeej&                  efej,                  j                  j&                  ehej,                  j(                  egej*                  eiej,                  ejej.                  ekej0                  elej2                  emej4                  enej6                  eoej8                  epej:                  j8                  eqi ej<                  erej>                  esej@                  etej:                  j@                  euejB                  evej:                  jD                  ewejF                  exejH                  e}ejJ                  e~ej:                  jJ                  eejL                  eyej:                  jL                  ezejN                  e{ej:                  jN                  e|ej,                  jP                  eej,                  jR                  eejT                  eej:                  jT                  eejV                  eej:                  jV                  eejX                  eej,                  j                  jZ                  eej,                  j\                  eej,                  j^                  eej,                  j`                  eejb                  ei	ZeYeef   edM<   eeej,                  j                  jh                  <    G dN dOe      Z G dP dQe      Z G dR dSe      Z G dT dUe      Z	 dwdVedWeedX   edY   edZ   f   d[eeegef      defd\Z G d] d^eP      Zd_ede\eef   fd`Zda ZdbePe&   deegef   fdcZ edde&fi  ee&      e      Z edfe'fi  ee'      e      Z edge(fi  ee(      e      Zd~dhediedjeeRe      fdkZ G dl dme      Zdnej                  doeReQ   fdpZddrZddsZddefdndqdoeeReQ      dteduePe   def
dvZy)    N)AnyCallableLiteralOptionalUnion)nn)GraphGraphModuleNodeProxyTracer)compatibility)is_fx_tracingParameterProxy   )logging)CacheDynamicCacheStaticCache)PretrainedConfigPreTrainedModel)
get_values),MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES MODEL_FOR_BACKBONE_MAPPING_NAMES!MODEL_FOR_CAUSAL_LM_MAPPING_NAMESMODEL_FOR_CTC_MAPPING_NAMES3MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES,MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMESMODEL_FOR_IMAGE_MAPPING_NAMES-MODEL_FOR_MASKED_IMAGE_MODELING_MAPPING_NAMES!MODEL_FOR_MASKED_LM_MAPPING_NAMES'MODEL_FOR_MULTIPLE_CHOICE_MAPPING_NAMES0MODEL_FOR_NEXT_SENTENCE_PREDICTION_MAPPING_NAMES#MODEL_FOR_PRETRAINING_MAPPING_NAMES*MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES-MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES,MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES/MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES(MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES,MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES,MODEL_FOR_VIDEO_CLASSIFICATION_MAPPING_NAMES6MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMESMODEL_MAPPING_NAMES   )ENV_VARS_TRUE_VALUESis_peft_available)	PeftModelFX_DEBUG_MODE 
model_namesupported_tasksreturnc                    i dt         dt        dt        dt        dt        dt
        dt        dt        d	t        d
t        dt        dt        dt        dt        dt        dt        dt         t"        t$        t&        d}||j)                         }t+        |t,              r|g}g }|D ]+  }||   j/                  | d       }|s|j1                  |       - |S )Ndefaultpretrainingznext-sentence-predictionz	masked-lmz	causal-lmz
seq2seq-lmzspeech-seq2seqzmultiple-choicezdocument-question-answeringzquestion-answeringzsequence-classificationztoken-classificationzmasked-image-modelingzimage-classificationzzero-shot-image-classificationctczaudio-classification)zsemantic-segmentationbackbonezimage-feature-extraction)r.   r%   r$   r"   r   r(   r*   r#   r   r&   r)   r+   r!   r   r-   r   r   r'   r   r    keys
isinstancestrgetappend)r5   r6   task_mappingmodel_class_namestask
class_names         h/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/transformers/utils/fx.py%_generate_supported_model_class_namesrG   M   s`   &: 	#$T 	6	
 	6 	B 	B 	B 	&'Z 	H 	"#R 	 L 	 !N 	 L 	)*`  	*!" 	 L#$ "O4$A)L. &++-/3'*+ 1!$'++J=
$$Z01
     )6altclipalbertbartbertbitnet
blenderbotzblenderbot-smallbloomclipconvnextdebertaz
deberta-v2dinov2
distilbertz
donut-swinelectragpt2gpt_neogptjhierahubertijepalayoutlmllamacoherelxmertm2m_100marianmbartmegatron-bertmistralmixtral
mobilebertmt5nezhaoptpegasusplbartqwen2	qwen2_moeqwen3	qwen3_moeresnetroberta	segformerspeech_to_textspeech_to_text_2swint5trocrvitvjepa2xglmwav2vec2r]   ri   )CLIPTextModelCLIPTextModelWithProjectionCLIPVisionModelCLIPVisionModelWithProjectionAltCLIPTextModelAltCLIPVisionModelGitVisionModelGPT2DoubleHeadsModelSpeech2Text2DecoderTrOCRDecoderPeftModelForCausalLMPeftModelForSeq2SeqLMVJEPA2ForVideoClassificationc                     t        j                  g |j                  | j                  j                  d   d| j                  j                  dS Nmeta)devicedtype)torchemptyshapeweightr   selfinputs     rF   torch_nn_embeddingr      s@    ;;ccT[[%6%6r%:c6QUQ\Q\QbQbccrH   Fc                 z    t        j                  g | j                  |j                  d   d|j                  dS r   )r   r   r   r   )r   r   padding_idxmax_norm	norm_typescale_grad_by_freqsparses          rF   torch_nn_functional_embeddingr      s3     ;;YYV\\"%5YfFLLYYrH   c                     |S N r   s     rF   torch_nn_layernormr          LrH   c                     |S r   r   r   s     rF   torch_nn_groupnormr      r   rH   c                 f    t        j                  |j                  d d | j                  fz   d      S )Nr   r   r   )r   r   r   out_featuresr   s     rF   torch_nn_linearr      s,    ;;u{{3B'4+<+<*>>vNNrH   c                     | S r   r   xs    rF   
torch_relur          HrH   c                     |S r   r   )r   r   s     rF   torch_nn_relur      r   rH   c                      |st        d      | S )Nz>Don't support in-place functional.relu for MetaTensor analysis
ValueError)r   inplaces     rF   torch_nn_functional_relur      s    YZZHrH   c                 r    | j                  d      |j                  d      z   |j                  d      z   S Nr   r   to)	conditionr   ys      rF   torch_wherer      s5     <<v<&V)<<qtt6t?RRRrH   outc                     |t        d      | S )Nz2Don't support in-place abs for MetaTensor analysisr   )r   r   s     rF   	torch_absr      s    
MNNLrH   c                  |   t        |       }d}|dk(  rd}| d   }n|dk(  r| \  }}n| \  }}}t        |t              rt        |      }t        |t              rt        |      }t        |t              rt        |      }|j	                  d|      }|j	                  d      }t        j                  ||z
  |z  |d      S )Nr/   r   r   stepr   r   r   r   )lenr>   floatintr@   r   r   )argskwargsnr   startendr   s          rF   torch_aranger      s    D	ADAv1g	
a
ssD%E
#uC$4y::fd#DJJwE;;e,E&IIrH   c                      t        |       } t        |       dkD  rd| d<   nd|d<   t        |      }|j                  dd        t	        j
                  | i |ddiS )Nr/   
fill_valuer   r   )listr   dictpopr   full)r   r   kwargs_without_devices      rF   
torch_fullr     s]    :D
4y1}Q | Lh-::tD4DVDDrH   c                $   |d||dk  r| d   j                         z   | D cg c]  }|j                   }}t        |d         }t        fd|D              }|d  |gz   |dz   d  z   }t	        j
                  |d      S c c}w )Nr   c              3   (   K   | ]	  }|     y wr   r   ).0r   dims     rF   	<genexpr>ztorch_cat.<locals>.<genexpr>)  s     :%5::s   r/   r   r   )r   r   r   sumr   r   )	tensorsr   axisr   tshapesr   concatenated_dimfinal_shapes	    `       rF   	torch_catr      s    
{t|
{t'
Qwajnn$&'!agg'F'OE:6::+!1 22U3795EEK;;{622	 (s   Bc                    ||d}|||}|dk  r| d   j                         dz   |z   }t        | d   j                        }|j                  |t	        |              t        j                  |d      S Nr   r/   r   r   )r   r   r   insertr   r   r   )r   r   r   r   r   s        rF   torch_stackr   .  sw    
{t|
{t'
Qwajnn"S(!!"E	LLc'l#;;uV,,rH   )alphar   c                ^   t        | t        j                        st        j                  |d      S t        |t        j                        st        j                  | d      S t	        | j                         |j                               }t        | j                        dg|| j                         z
  z  z   }t        |j                        dg||j                         z
  z  z   }g }t        |      D ]#  }|j                  t	        ||   ||                % t        j                  |d      S )Nr   r   r/   )r>   r   Tensor
empty_likemaxr   r   r   rangerA   r   )	r   otherr   r   
max_lengthinput_shapeother_shaper   is	            rF   	torch_addr   :  s    eU\\*f55eU\\*f55UYY[%))+.Ju{{#qcZ%))+-E&FFKu{{#qcZ%))+-E&FFKE: :SQQ89:;;uV,,rH   c                    t        | ||      S )Nr   )r   )r   r   r   s      rF   	torch_mulr   H  s    UEs++rH   c                     t        | |      S r   )r   )r   r   s     rF   torch_tensor_mulr   L  s    T5!!rH   c                   | j                         }|j                         }d }|dk(  r	|dk(  rd }n|dk(  r)|dk(  r$| j                  d      |j                  d      f}n\|dk(  r|dk(  r|j                  d      f}n>|dk(  r|dk(  r| j                  d      f}n t        | j                         |j                               }t        | j                        }t        |j                        }|dk(  rdg|z   }|dk(  r|j                  d       dg||z
  z  t        | j                        z   }dg||z
  z  t        |j                        z   }g }t        |      D ]#  }	|j                  t        ||	   ||	                % |d   |d<   |d   |d<   |dk(  r|j                  d       |dk(  r|j                  d       |t        j                  dd      S t        j                  |d	diS )
Nr/   r   r   r           r   r   r   )r   sizer   r   r   rA   r   r   r   tensorr   )
r   r   r   d1d2r   r   shape1shape2r   s
             rF   torch_matmulr   P  s   	B	BE	Qw27	qR1WA

1.	qR1WA 	qR1WA eiik2
ekk"ekk"7S6\F7MM!b)D,==b)D,==z" 	4ALLVAYq	23	42Jb	2Jb	7IIbM7IIbM}||C//;;-f--rH   c                    |t        d      | j                  \  }}}|j                  \  }}}t        j                  |||d      S )Nz2Don't support in-place bmm for MetaTensor analysisr   r   )r   r   r   r   )r   mat2r   
batch_sizer   m_ps           rF   	torch_bmmr  t  sG    
MNN{{J1jjGAq!;;z1a77rH   betar   r   c                4    |t        d      t        ||      S )Nz6Don't support in-place baddbmm for MetaTensor analysis)r   r  )r   batch1batch2r  r   r   s         rF   torch_baddbmmr  |  s     
QRRVV$$rH   c                $    t        | |||||      S )Nr  )r  )r   r	  r
  r  r   r   s         rF   torch_tensor_baddbmmr    s    vvD3OOrH   c                 ^    d |D        }t        j                  | g| j                  d      S )Nc              3   J   K   | ]  }t        j                  |d         yw)cpur   N)r   r   )r   operands     rF   r   ztorch_einsum.<locals>.<genexpr>  s      YW))'%@@Ys   !#r   )r   einsumr   )equationoperandsconcrete_operandss      rF   torch_einsumr    s.    YPXY<<5#4588@@rH   c                     t        | j                        }t        |      D ]  \  }}||xx   |z  cc<    t        j                  |d      S r   )r   r   	enumerater   r   )r   sizesr   r   r   s        rF   torch_tensor_repeatr    sF    E%  1aA;;uV,,rH   )r   output_sizec                    t        |      }|dk(  r||n|d   j                         g}nt        |d   j                        }| |dkD  r|d   } nt        |      g}d} |d   }t	        |t
              st        j                  |      dk(  r|| xx   t        |      z  cc<   n||n|j                         || <   t        j                  |ddiS )Nr/   r   r   r   r   )	r   r   r   r   r>   r   r   numelr   )r   r  r   num_argsr   repeatss         rF   torch_repeat_interleaver     s    4yH1} + 7T!W[[]KT!W]]#;!|1gUq'gs#u{{7';q'@#J#g,&J(3(?W[[]E#J;;-f--rH   c                r    t        | j                        }t        |      ||<   t        j                  |ddiS Nr   r   )r   r   r   r   r   )r   r   indexr   r   s        rF   torch_index_selectr$    s1    EUE#J;;-f--rH   c                     t        | ||      S r   )r$  r   r   r#  s      rF   torch_tensor_index_selectr'    s    dC//rH   )sparse_gradr   c                z    t        | j                        }|j                  |   ||<   t        j                  |ddiS r"  )r   r   r   r   )r   r   r#  r(  r   r   s         rF   torch_gatherr*    s6    ES!E#J;;-f--rH   c                     t        | ||      S r   )r*  r&  s      rF   torch_tensor_gatherr,    s    c5))rH   c                     | S r   r   )r   shiftsdimss      rF   
torch_rollr0    r   rH   c                     | S r   r   )r   r/  s     rF   
torch_flipr2    r   rH   c                     | S r   r   )r   r/  s     rF   torch_tensor_flipr4    s    KrH   c                    |j                   d   }d }| j                  }|dk(  rd}|dk(  rt        |j                         }|qt        |j                         }t        j                  |d|d   z  z   | j
                  d   | j                  d   dz
  z  z
  dz
  | j                  d   z  dz         }||d<   | j                  |d<   t        j                  |d	
      S )Nr   validr   r   samer   r   r/   r   r   r   r   paddingr   mathfloordilationkernel_sizestrideout_channelsr   r   )r   r   l_inr   r:  l_outs         rF   torch_nn_conv1drC    s    ;;r?DEllG'&U[[!}U[[!

A
N"T]]1%59I9I!9Lq9P%QQTUUY]YdYdefYggjkk
 b	!!E"I;;uV,,rH   c                 h   |j                   dd  \  }}d }| j                  }|dk(  rd}|dk(  rt        |j                         }|t        |j                         }t        j                  |d|d   z  z   | j
                  d   | j                  d   dz
  z  z
  dz
  | j                  d   z  dz         }t        j                  |d|d   z  z   | j
                  d   | j                  d   dz
  z  z
  dz
  | j                  d   z  dz         }||g|dd  | j                  |d<   t        j                  |d	
      S )Nr   r6  r7  r8  r   r   r/   r   r   r9  )r   r   h_inw_inr   r:  h_outw_outs           rF   torch_nn_conv2drJ    sK   RS!JD$EllG'&U[[!}U[[!

A
N"T]]1%59I9I!9Lq9P%QQTUUY]YdYdefYggjkk
 

A
N"T]]1%59I9I!9Lq9P%QQTUUY]YdYdefYggjkk
 U^bc
!!E"I;;uV,,rH   c                    t        | j                        }|2|dk  r| j                         |z   }||   dk(  r4|j                  |       n"g }|D ]  }|dk(  r	|j	                  |        |}t        j                  |d      S r   )r   r   r   r   rA   r   r   )r   r   r   	new_shape	dim_values        rF   torch_squeezerN    s    E
7))+#C:?IIcN	 	(IA~Y'	( ;;uV,,rH   c                     t        | |      S r   )rN  r   r   s     rF   torch_tensor_squeezerQ    s    s##rH   c                     t        | j                        }|dk  r| j                         dz   |z   }|j                  |d       t	        j
                  |d      S r   )r   r   r   r   r   r   )r   r   r   s      rF   torch_unsqueezerS    sJ    E
QwiikAo#	LLa;;uV,,rH   c                     t        | |      S r   )rS  rP  s     rF   torch_tensor_unsqueezerU    s    4%%rH   c                     t        j                  t        j                  | d      fi |}t        |t         j                        r|j                  d      S t        t        |d             S )Nr  r   r   c                 $    | j                  d      S Nr   r   r   s    rF   <lambda>z*torch_unique_consecutive.<locals>.<lambda>  s    144< rH   )r   unique_consecutive
zeros_liker>   r   r   tuplemap)r   r   outputs      rF   torch_unique_consecutiver_    sT    %%e&6&6uU&KVvVF&%,,'yy  S!7899rH   c                     |dk  rt        d      t        | j                        |gz   }t        j                  |d      S )Nr   zEDon't support automatic num_classes inference for MetaTensor analysisr   r   )r   r   r   r   r   )r   num_classesr   s      rF   torch_nn_functional_one_hotrb    s;    Q`aa+.E;;uV,,rH   c                     | j                   d   }|j                   d   }t        j                  g | j                   d d ||d      S )Nr   r   r   r   )r   r   r   )	querykeyvalue	attn_mask	dropout_p	is_causalscaletarget_lengthhead_dims	            rF   0torch_nn_functional_scaled_dot_product_attentionrm    sJ     KKOM{{2H;;CSb)C=C(CFSSrH   c                 l    | j                   dk(  r|j                  }nd}t        j                  |d      S Nnone)r/   r   r   	reductionr   r   r   r   r   targetr   s       rF   torch_nn_mselossru  &  -    ~~;;uV,,rH   c                 l    | j                   dk(  r|j                  }nd}t        j                  |d      S ro  rq  rs  s       rF   torch_nn_crossentropylossrx  .  rv  rH   c                 l    | j                   dk(  r|j                  }nd}t        j                  |d      S ro  rq  rs  s       rF   torch_nn_bcewithlogitslossrz  6  rv  rH   c                 8   d }t        | t        j                        rht        |t              rt        t	        ||            }n ||      }t        j                  t        j                  | d      |      j                  d      S t        j                  | |      S )Nc                 >   t        | t        j                        rt        j                  | d      }|j                  t        j
                  t        j                  t        j                  t        j                  fv r|j                  t        j                        }|S | S )Nr  r   )r>   r   r   	ones_liker   float16float32float64int32r   int64)r   concretes     rF   to_concretez%operator_getitem.<locals>.to_concrete?  sa    a&q7H~~%--u{{![[#;;u{{3OrH   r  r   r   )	r>   r   r   r\  r]  operatorgetitemr   r   )abr  s      rF   operator_getitemr  >  sy     !U\\"ac+q)*AAA 0 05 A1EHHPPAq!!rH   _MANUAL_META_OVERRIDESc                   h     e Zd ZdZd Zed        Zed        Z fdZ fdZ	d Z
d Z fd	Z xZS )
HFProxyzI
    Proxy that uses metadata to handle data-dependent control-flow.
    c                     || _         y r   )	_metadata)r   metadatas     rF   install_metadatazHFProxy.install_metadata  s	    !rH   c                 @    | j                   j                  dd| fi       S )Ncall_methodr   )tracercreate_proxyr   s    rF   r   zHFProxy.shape  s    {{''vwKKrH   c                     t        | d      S )Nr   )MetaDeviceAttributer  s    rF   r   zHFProxy.device  s     #422rH   c                 z    t        | d      r!| j                  t        | j                        S t        |          S Nr  )hasattrr  r   super__len__r   	__class__s    rF   r  zHFProxy.__len__  s2    4%$..*Dt~~&&w  rH   c                 h    t        | d      r| j                  | j                  S t        |          S r  )r  r  r  __bool__r  s    rF   r  zHFProxy.__bool__  s.    4%$..*D>>!w!!rH   c                 F    |dk(  r| j                  |      S t        | |      S r  )__getattribute__HFAttribute)r   ks     rF   __getattr__zHFProxy.__getattr__  s*    ((++ 4##rH   c                 `    | j                   j                  dt        j                  | ||fi       S Ncall_function)r  r  r  setitem)r   indicesvaluess      rF   __setitem__zHFProxy.__setitem__  s-    {{''9I9IDRY[aKbdfggrH   c                 n    t        | d      r| j                  || j                  v S t        |   |      S r  )r  r  r  __contains__)r   re  r  s     rF   r  zHFProxy.__contains__  s5    4%$..*D$..((w#C((rH   )__name__
__module____qualname____doc__r  propertyr   r   r  r  r  r  r  __classcell__r  s   @rF   r  r    sV    " L L 3 3
!
"
$h) )rH   r  c                   .    e Zd ZdefdZed        Zd Zy)r  attrc                     || _         || _        |j                  | _        d | _        t	        | j                   d      r0| j                  t        | j                   j                  |             y y r  )rootr  r  _noder  r  getattrr  )r   r  r  s      rF   __init__zHFAttribute.__init__  sT    		kk
499k*!!'$))*=*=t"DE +rH   c                     | j                   Q| j                  j                  dt        j                  | j
                  | j                  fi       j                  | _         | j                   S r  )r  r  r  builtinsr  r  r  noder  s    rF   r  zHFAttribute.node  sT     ::11/8CSCSVZV_V_aeajajUkmopuuDJzzrH   c                 n    | j                   j                  d| j                  | j                  f|z   |      S )Nr  )r  r  r  r  )r   r   r   s      rF   __call__zHFAttribute.__call__  s.    {{''tyy499,QUBUW]^^rH   N)r  r  r  r?   r  r  r  r  r   rH   rF   r  r    s*    F3 F  _rH   r  c                       e Zd Zy)r  N)r  r  r  r   rH   rF   r  r    s    rH   r  c                   2    e Zd ZdZdee   fdZed        Zy)HFCacheProxyzP
    Proxy that represents an instance of `transformers.cache_utils.Cache`.
    orig_cache_clsc                     || _         y r   )_orig_cache_cls)r   r  s     rF   install_orig_cache_clsz#HFCacheProxy.install_orig_cache_cls  s
    -rH   c                 v    t        | d      st        d      | j                  j                  | j                     S )Nr  z?The original Cache class must be installed to the HFCacheProxy.)r  RuntimeErrorr  _CLASSES_TO_PATCHr  r  s    rF   r  zHFCacheProxy.__class__  s4    t./`aa{{,,T-A-ABBrH   N)	r  r  r  r  typer   r  r  r  r   rH   rF   r  r    s-    .T%[ . C CrH   r  functionop_typer  r  get_attrproxy_factory_fnc                 J     t        j                          fd       }|S )Nc                     t               s | i |S g fd}t        j                  j                  j	                  | |       t        j                  j                  j	                  ||       t              dkD  r`d   j                  }dk(  r}n3dk(  rj                  }n!dk(  rj                  }nt        d d      |j                  || |      S  | i |S )	Nc                 J    t        | t              rj                  |        y y r   )r>   r   rA   )r  found_proxiess    rF   check_proxyz4create_wrapper.<locals>.wrapper.<locals>.check_proxy  s     !U#$$Q' $rH   r   r  r  r  zop_type z not supported.r  )
r   r   fxr  map_aggregater   r  r  r   r  )	r   r   r  r  rt  r  r  r  r  s	        @rF   wrapperzcreate_wrapper.<locals>.wrapper  s    T,V,,	( 	##D+6##FK8}!"1%,,F/)!M)!**J&!** 8G9O!DEE&&wfWg&hhT,V,,rH   )	functoolswraps)r  r  r  r  s   ``` rF   create_wrapperr    s'    
 __X- -6 NrH   c                   ^     e Zd ZdZ	 ddedeedf   deeef   de	e
egef      f fdZ xZS )	HFProxyableClassMetazW
    Metaclass that creates a class with its main methods wrapped to be proxyable.
    namebases.attrsr  c           
      @   t         |   | |||      } t        |       D ]|  }t        | |d       }||dk(  rd}nF|j	                  d      rd }n2t        j                  |      rd}nt        j                  |      rd}nd }|dt        | |t        |||             ~ | S )Nr  r  __r  r  )
r  __new__dirr  
startswithinspectismethod
isfunctionsetattrr  )	clsr  r  r  r  	attr_namer  r  r  s	           rF   r  zHFProxyableClassMeta.__new__  s     goc46S 	jI3	40D|J&)%%d+!!$')##D)'"YtWWg(hi	j  
rH   r   )r  r  r  r  r?   r\  r  r   r   r   r   r   r   r  r  r  s   @rF   r  r    s_     ?C T3Y CH~	
 #8TFEM#:; rH   r  rt  c                 "    t        | d      }|| fS )zo
    Wraps `target` to be proxyable. Used for tensor creators like `torch.ones`, `torch.arange` and so on.
    r  )r  )rt  r  s     rF   gen_constructor_wrapperr    s     V_5GF?rH   c                     t        | t              ryt        | t        j                  j                        r6t        | t
              rt        | d      st        d|        | j                  S | S )z\Returns the underlying metadata for HFProxies, and behaves like the identity for the others.r   r  zNo metadata was found for )	r>   r  r   r  r   r  r  r  r  )vs    rF   _proxies_to_metasr  %  sW    !()!UXX^^$1g&71k+B!;A3?@@{{HrH   r  c                 ,     dt         dt        f fd}|S )Nr   r7   c                     t        t        t              st        d      t	        | t              }|j                         |S )NzJCannot create HFCacheProxy because there is no HFTracer currently tracing.)r>   _CURRENT_TRACERHFTracerr  r  r  )r   cache_proxyr  s     rF   cache_proxy_factory_fnz=create_cache_proxy_factory_fn.<locals>.cache_proxy_factory_fn1  s9    /84kll"1o6**>:rH   )r   r  )r  r  s   ` rF   create_cache_proxy_factory_fnr  0  s    $ <  "!rH   ProxyableCacher  ProxyableDynamicCacheProxyableStaticCachelowhighforbidden_valuesc                 x    |g }t        j                  | |      }||v rt        j                  | |      }||v r|S r   )randomrandint)r  r  r  rf  s       rF   _generate_random_intr  N  sG    NN3%E
#
#sD) #
#LrH   c                       e Zd ZU dZdZeed<   dZeed<   g dZe	e
eeeeiZ e       sefneefZefdf fd	Zdd	d
edee   dee   deeej6                  f   f
dZd) fd	Zd Zdededeeef   fdZ  fdZ!d Z"e#jH                  de%ejL                  jN                  e(def   f   fd       Z)	 	 	 d*de%ejL                  jN                  e(def   f   de*eeef      de*eeef      dede+f
 fdZ,de&jN                  defdZ-de&jN                  defd Z.de&jN                  def fd!Z/d"ejL                  jN                  d#edef fd$Z0 e1d%      d&d'defd(       Z2 xZ3S )+r  z
    Tracer that is able to symbolically trace models from the library. To do that, it uses the HFProxy instead of the
    regular PyTorch torch.fx.Proxy.
    Tproxy_buffer_attributesallow_insert_stateless_mods)arangezerosonesr   	full_likeeyer   r   clampfinfotrilr   c                 (    t         |   ||       y )N)autowrap_modulesautowrap_functions)r  r  )r   r  r  r  s      rF   r  zHFTracer.__init__u  s    *:OabrH   modelr   
input_namer   input_namesr7   c                 *   t        |d|j                        j                  }|j                  i }d}|dv r|d   }|g t	        t
              t	        t              t	        t              t	        t              t	        t              t	        t              v r+t        j                  |t        j                        |d<   |S |g t	        t              t	        t              dv rTt        j                  |t        j                        |d<   t        j                  |t        j                        |d	<   |S |t	        t               v r&t#        |j$                  d
      r|j$                  j&                  t)        d      |j$                  j&                  dk(  r)||j$                  j*                  f}	t        j,                  }
n|j$                  j&                  dk(  r|f}	t        j                  }
ne|j$                  j&                  dk(  r)||j$                  j*                  f}	t        j,                  }
n#t)        d|j$                  j&                   d      t        j                  |	|
d|d<   |S |g t	        t.              t	        t0              t	        t2              t	        t4              t	        t6              t	        t8              dddv r+t        j                  |t        j                        |d<   |S |g t	        t:              v r+t        j                  |t        j,                        |d<   |S t=        d| d| d      d|v r|d   }t        |j$                  dd      }|t#        |j$                  d      r!|j$                  j>                  j@                  }nKt#        |j$                  d      r!|j$                  jB                  j@                  }ntE               tE               f}t        |j$                  dd      }tG        |tH        jJ                  jL                        s||f}|\  }}t        j                  ||||t        j,                        ||<   |S d|v r.t        j                  g |dt        jN                  d||<   |S d |v rBt        j                  g ||j$                  jP                  t        jN                  d||<   |S d!|v r|d   }t        |j$                  d"d      0|j$                  jR                  d#k7  r|j$                  jT                  }n|j$                  jV                  }tY        |      dk(  r||d$   |d%   |f}n||d$   |f}t        j                  |t        jN                        ||<   |S d&|v rCt        j                  ||j$                  jZ                  gz   t        jN                        ||<   |S d'|v rCt        j                  ||j$                  j\                  gz   t        jN                        ||<   |S d(|v r)t        j                  |t        jN                  d||<   |S d)|v r>|\  }}tE        d*d+,      }t        j                  ||t        jN                        ||<   |S d-|v r?d.|v r|d   |d$   |z   g}n|}t        j                  |t        j                        ||<   |S d/|v r+t        j                  |t        j                        ||<   |S d.|v r|j$                  jR                  t^        vr#t=        d0|j$                  jR                   d1      |j$                  j`                  }|j$                  jV                  |j$                  j`                  z  }|d   |||ftc        fd2te        |j$                  jf                        D              }|||<   |S ||j$                  jV                  gz   }t        j                  |t        jN                        ||<   |S )3z4Generates dummy input for model inference recording.class_for_deserialization   )labelsstart_positionsend_positionsr   r   r  XLNetForQuestionAnsweringr  r  problem_typeNzCould not retrieve the problem type for the sequence classification task, please set model.config.problem_type to one of the following values: "regression", "single_label_classification", or "multi_label_classification".
regressionsingle_label_classificationmulti_label_classificationzExpected model.config.problem_type to be either: "regression", "single_label_classification", or "multi_label_classification", but "z" was provided.r   r   r   z!Generating the dummy input named z for z is not supported yet.pixel_values
image_sizevision_configencodernum_channels   bbox   input_featuresinputs_embedsembedding_sizerc   r/   r   visual_feats
visual_posinputsinput_valuesi'  i N  r  r  maskpast_key_valuesidszMSymbolic trace with past_key_values input is not supported yet for the model ze. Please open an issue or a PR in Transformers repository if you would like to see the support added.c              3      K   | ]P  }t        j                  t         j                         t        j                  t         j                         f R yw)r   N)r   randr   )r   r   cache_shaper   s     rF   r   z1HFTracer._generate_dummy_input.<locals>.<genexpr>  sE      
  JJ{%++fMJJ{%++fMs   AA)4r  r  r  r   r   r$   r#   r   r,   r   r   r   r  longr&   r   r)   r  configr  r   
num_labelsr  r%   r+   r   r"   r(   r'   r   NotImplementedErrorr!  r   r"  r  r>   collectionsabcIterabler   input_feat_per_channel
model_typer)  hidden_sizer   visual_feat_dimvisual_pos_dim"_FX_SUPPORTED_MODELS_WITH_KV_CACHEnum_attention_headsr\  r   num_hidden_layers)r   r  r  r   r  model_class_nameinputs_dictkv_cache_lengthr  labels_shapelabels_dtyper   r#  heightwidthr)  embedding_shaper  
seq_length
mask_shape	num_headsrl  pkvshape_with_hidden_sizer4  r   s                           @@rF   _generate_dummy_inputzHFTracer._generate_dummy_inputx  s:    #5*EuW``
 GGqJ $LM$CD$ HI$ HI	$
 <=$ HI$  ).JejjY_(`H%j i " &FG&OP& ,& 
 27Zuzzbh1i-./4{{:UZZ`f/gO,\ [ "Z0_%``u||^<@Y@Y@a$Z  <<,,<$.0G0G#HL#(==L\\..2OO$.=L#(::L\\..2NN$.0G0G#HL#(==L$CCH<<C\C\B]]ln  ).\^d(eH%n k " 
&?@
&HI
& =>
& =>	
&
 HI
& IJ
& '
& '
& (
& 
 ).ETZ([H%T S "%Oz2M'N%OO(-EW](^H%P M *7
|5IYHZZpq  z)qJ |TBJ!5<<9!&!;!;!F!FJU\\95!&!5!5!@!@J"6"8:N:P!QJ #5<<CLj+//*B*BC(*5
&MFE&+kkL&%u}}U['K
#f a z!&+kk&^5&^!&^5;;W]&^K
#^ ] +&+kk '';;'CH;;W]'K
#Z U 
*qJ &6=ILL++>!&!<!<!&!9!95zQ#-uQxq>"R $.uQx"H&+kk/]c&dK
#p o z)&+kkLL00 kk'K
#l ] Z'&+kkLL// kk'K
#Z K #&+kk5TZ&[K
#H G z)!MJ-%eDJ&+kk*jPUP[P[dj&kK
#> = z! K/#Aha?(BC
"
&+kk*EJJW]&^K
#0 / j &+kk%uzzRX&YK
#, + *,||&&.PP)cdidpdpd{d{c|  }b  c  88I||//5<<3S3SSH 8YJK 
 u||==> C '*K
#
  &+ell.F.F-G%G"&+kk2HPUP[P[dj&kK
#rH   c           	      ^   t         |   |||||||      }|dk(  r.|| j                  v r |j                  | j                  |          |S || j                  v r	d|v rd|d<   	 t
        j                  j                  j                  |t              }	t
        j                  j                  j                  |t              }
d}d| _
        d| _        |dk(  rMt        j                  ||      } ||	i |
}t        |t
        j                        r+|j!                  d      }n|dk(  r8t#        |	d   j$                  |      }t        j                  ||      } ||	i |
}n|d	k(  rnt'        | d
      st)        |  d      | j*                  j-                  |      }t/        |      }|t        v rt        |   |g|	i |
}nz | j0                  |	i |
}ng|dk(  r`| j*                  }|j3                  d      }|D ]  }t#        ||      } t        |t
        j                        r|j!                  d      }n|}nd}|r,t        |t4              st7        d      |j                         d| _
        d| _        |S # t8        $ r.}t:        rt=        j>                  d| d| d|        Y d }~Bd }~ww xY w)Nplaceholderr   r   Tr  r   r  r   call_moduleorig_forwardz/ does not have an attribute called orig_forwardr  .Fz"Don't support composite output yetzCould not compute metadata for z target z: ) r  r  	meta_argsr  orig_fnsr   r  r  r  r  _disable_module_getattr_disable_call_moduler  r@   r>   r   r   r  r  r  AttributeErrorr  get_submoduler  rU  splitr   r   	Exception_IS_IN_DEBUG_MODEwarningswarn)r   kindrt  r   r   r  	type_exprr  rv
args_metaskwargs_metasshould_install_metadatameta_targetmeta_outmethodmodmod_typeattr_itratomsatomer  s                        rF   r  zHFTracer.create_proxy(  s   W!$fdIO_`= Vt~~%=v 67IT]]" 6!#)x .	]44T;LMJ 88==66v?PQL&*#+/D((,D%&488H&
ClCh5'{{&{9H& A!8!8&A488H&
ClC&t^4(D61`)abbii--f59555h?ajaT`aH0t00*MMH#99S)! 7D&x6H7h5'{{&{9H'H*/'&!"e,$%IJJ##H- (-$$)!	  	]  ?vXfXUWXYWZ[\	]s   "HI5 5	J,>$J''J,c                 \    t         dd      r|S  fd}t        |t        j                  j                        r& || j
                  j                         |      }||S  j                  r@t        |t        j                        r& || j
                  j                         |      }||S |S )NrY  Fc                      |D ]t  \  } |u s|vr`i }dt        j                  j                        j                  v rj                  sd n fd|d<    j                  ddi fi |}||<   |   c S  y )Nr  c                      t        |       S r   r   )r  attr_valr   r   s    rF   rY  zLHFTracer._module_getattr.<locals>.maybe_get_proxy_for_attr.<locals>.<lambda>|  s    nT4QRT\6] rH   r  r   )r  	signaturer  
parametersparam_shapes_constant)rt  collection_to_searchparameter_proxy_cacher  r   	val_proxyr   r   s   `     @rF   maybe_get_proxy_for_attrz:HFTracer._module_getattr.<locals>.maybe_get_proxy_for_attrs  s    0 8DAq1}$99%'F1W5F5FtGXGX5Y5d5dd ,0+E+E %))] !''9 :
 ):(9(9*aR(ZSY(ZI7@1!44Q778 rH   )
r  r>   r   r   	Parameterr  named_parametersr  r   named_buffers)r   r  rt  ry  r{  maybe_parameter_proxymaybe_buffer_proxys   `      rF   _module_getattrzHFTracer._module_getattrn  s    42E:O  (EHH$6$67(@dii88:<Q)% )400++
8U\\0R%=dii5579N&" &1--OrH   r  rt  ry  c                 (    | j                  |||      S r   )r  )r   r  rt  ry  s       rF   r  zHFTracer.getattr  s    ##D(4IJJrH   c                 `    t        | dd      r ||i |S || _        t        |   ||||      S )NrZ  F)r  rU  r  rT  )r   r  forwardr   r   r  s        rF   rT  zHFTracer.call_module  s>    4/7D+F++#w"1gtV<<rH   c                     t        ||       S r   )r  )r   r  s     rF   proxyzHFTracer.proxy  s    tT""rH   r  .c           
   #     K   | j                   D ci c]  }|t        t        t        |             c}| _        t               | _        | j                  j                         D ]4  \  }\  }}t        t        ||       | j                  j                  |       6 g }t        j                  |      }t        j                  j                         D ]  \  }}|||ur|j                  d      s| j                  j                         D ]M  \  }	}
|j                   j                         D ]+  \  }}||	u s|j#                  |||	f       t        |||
       - O  d  | j                  j                         D ]  \  }\  }}t        t        ||        i | _        t               | _        |D ]  \  }}}	t        |||	        y c c}w w)Ntransformers)_TORCH_METHODS_TO_PATCHr  r  r   patched_torch_methodssetrX  itemsr  addr  	getmodulesysmodulesr  r  __dict__rA   )r   r  rt  r  r  origpatchedmodule_of_modelrk  orig_clspatched_clsr  r  r  s                 rF   patch_for_tracingzHFTracer.patch_for_tracing  s     SWRnRn&
HNF+GE6,BCC&
" %)%?%?%E%E%G 	$!D/7DE4)MMd#	$
 !++D1**, 		=ID#*s//I??>2)-)?)?)E)E)G =%+'*||'9'9'; =OItx'Y'ABY<==		= 	  $99??A 	'OD)1dE4&	'%'"(/ 	.$CHCH-	.?&
s   G!GD G3BGconcrete_argsdummy_inputs6complete_concrete_args_with_inputs_not_in_dummy_inputsc           	      &   t        j                  t        |t        j                  j
                        r|j                  n|      }|i }||r|j                  j                         D ]P  }|j                  |v r|j                  t         j                  j                  u s9t        d|j                   d       |j                  |j                  j                         D ci c]5  }|j                  |vr%|j                  |vr|j                  |j                  7 c}       |j                  j                         |j                         z
  }t!               }	t!               }
|	|
g}|j"                  j$                  t'        t(              v rt!        dd      }|j+                  d|       |t-        |      ni }|D ]t  }||v rt        || j.                        s$t1        |      j2                  j5                  d      r%|j                  | j7                  ||||	             gt9        d
| d       d }t;        j<                  ||      }|j                  j                         D ]K  }|j>                  t         j                  j@                  k(  s+|j                  |vs:i |d|j                   <   M || _!        | a"| jG                  |      5  	 tH        |   ||      | _&        da"	 ddd       | jL                  jN                  D ]  }|jP                  dk(  r|jR                  |v rd|_*        t        jV                  |_        n|g}tY        jZ                         }|r?|j]                  d      }d||<   |t_        |j`                  j                               z  }|r?tc        |j                               D ]  }| jL                  je                  |        |jP                  dk(  sd|_         | jL                  S c c}w # da"w xY w# 1 sw Y   xY w)a  
        Traces `root` and returns the corresponding FX `torch.fx.Graph` representation. `root` can either be a
        `torch.nn.Module` instance or a Python callable. Note that after this call, `self.root` may be different from
        the `root` passed in here. For example, when a free function is passed to `trace()`, we will create a
        `torch.nn.Module` instance to use as the root and add embedded constants to.

        Args:
            root (`torch.nn.Module` or  `Callable`):
                Either a `torch.nn.Module`` or a function to be traced through. If root is not a
                [`~transformers.PreTrainedModel`], then `dummy_inputs` must be passed, otherwise tracing will fail.
            concrete_args (`dict[str, Any], *optional*):
                Concrete arguments that should not be treated as Proxies
            dummy_inputs (`dict[str, Any]`, *optional*):
                The dummy inputs needed to handle data-dependent control-flow if `root` is not a
                [`~transformers.PreTrainedModel`]. It can also be used when `root` is a
                [`~transformers.PreTrainedModel`] to specify custom dummy inputs for a subset or all the model inputs.
            complete_concrete_args_with_inputs_not_in_dummy_inputs (`bool`, *optional*, defaults to `True`):
                If `True`, and `dummy_inputs` is specified, every argument that `root` can take that is not in
                `dummy_inputs` and not in `concrete_args` will be added to `concrete_args`, otherwise does nothing.

        Returns:
            `torch.fx.Graph`:
                A FX `torch.fx.Graph` representing the semantics of the passed-in `root`.

        Nz6You need to specify a default value for the parameter rV  r   r  r.  r/   )_deserialize_graph_module_CodeOnlyModule)r  zCould not generate input named z8 for because root is not a transformers.PreTrainedModel.c                 \    t        | t        j                        r| j                  d      S | S rX  )r>   r   r   r   )rf  s    rF   to_metazHFTracer.trace.<locals>.to_meta  s$    %.xx''LrH   **r  rS  r   r   r^  )3r  ru  r>   r   r   Moduler  rv  r  r  r9   r|  r   r   updater=   r  r  r  r   r#   r   r   supported_archsr  r  r  rQ  r  pytreetree_maprb  VAR_KEYWORDrW  r  r  r  tracegraphnodesoprt  r   r   r9  OrderedDictr   r   usersreversed
erase_node)r   r  r  r  r  sigparamr  r  r  sequence_lengthr   num_choicesr,  r  r  concrete_metasr  to_visit	to_deleter   userr  s                         rF   r  zHFTracer.trace  s   @ 
40QW[\ M#(^..0 m::-==G$5$5$;$;;$']^c^h^h]iij%kll	m
    !^^224l2qvv]7R FFAII% nn))+m.@.@.BB *+
.0_->>""j1X&YY.11=KLLK('3'?l#R% 	JV# $ 4 45d9P9P9[9[@: d88z5^i8jk"5j\ B5 5 		
  &9^^**, 	7EzzW..:::uzzQ\?\46EJJ<01	7 ( ##D) 	''"W]4}]M
"&		' JJ$$ 	!Dww-';;+- "DI !&DI !%vH + 7 7 9I"$LLO'+	! D$88 #
 !))9 : 4

--d34
 ww(" 	/	!2 zzch #'		' 	's*   #:O:PO?&P?PPPrk  c                 V    t        d |j                  j                         D              S )z
        Whether the module was instantiated with Proxies. If that is the case, such module cannot be a leaf module
        because its attributes are input-dependent.
        c              3   <   K   | ]  }t        |t                y wr   )r>   r   )r   r  s     rF   r   zKHFTracer._stateless_mod_instanciation_depends_on_proxies.<locals>.<genexpr>I  s     Mt:dE*Ms   )anyr  r  )r   rk  s     rF   /_stateless_mod_instanciation_depends_on_proxiesz8HFTracer._stateless_mod_instanciation_depends_on_proxiesD  s"    
 Ms||7J7J7LMMMrH   c                 l   | j                  |      ryd}|j                  j                  j                         }| d| }d}t	        | j
                  |      r>t        | j
                  |      |u rd}n#| d| }|dz  }t	        | j
                  |      r>|s| j
                  j                  ||       |S )zb
        Helper method which tries to insert a module that was not declared as submodule.
        r4   r   r  FTr/   )r  r  r  lowerr  r  r  
add_module)r   rk  idxmod_namepathalready_inserteds         rF   _insert_module_as_submodulez$HFTracer._insert_module_as_submoduleK  s     ??D==))//11SE" dii&tyy$'3.#' Zq&D1HC dii&  II  s+rH   c                 &   	 t         |   |      S # t        $ ru}| j                  rbt	        t        |j                                     dk(  r=t	        t        |j                                     dk(  r| j                  |      }|cY d}~S |d}~ww xY w)ag  
        Helper method to find the qualified name of `mod` in the Module hierarchy of `root`. For example, if `root` has
        a submodule named `foo`, which has a submodule named `bar`, passing `bar` into this function will return the
        string "foo.bar".

        Args:
            mod (str): The `Module` to retrieve the qualified name for.
        r   N)	r  path_of_module	NameErrorr  r   r   rv  buffersr  )r   rk  rp  r  r  s       rF   r  zHFTracer.path_of_modulec  s    	7)#.. 	//CS^^=M8N4OST4TY\]abebmbmbo]pYquvYv77<G		s!    	BA(BB	BBr  module_qualified_namec                 L    | j                  |       xr t        | 	  ||      S r   )r  r  is_leaf_module)r   r  r  r  s      rF   r  zHFTracer.is_leaf_modulet  s3    HHKK 
QVQXQg$R
 	
rH   )is_backward_compatibleobjr   c                      t        |d             }|j                  j                  j                  d      r|j                  S |S )zCalled when a proxy object is has the keys() method called.
        This is what happens when ** is called on a proxy. This should return an iterator if ** is supposed to work in
        your custom tracer.
        r=   r  )r  r  rt  r  r  )r   r  	attributes      rF   r=   zHFTracer.keysy  s=     -KV,.	88??%%d+&&&rH   )NNN)NNT)4r  r  r  r  r  bool__annotations__r  r  r   r  r   r  r   r  r  r1   r   r2   r  r;  r  r?   r   r   r   r   r   rQ  r  r  r   r  rT  r  
contextlibcontextmanagerr   r   r  r   r  r   r	   r  r  r  r  r  r   r=   r  r  s   @rF   r  r  W  s@    %)T((,, 	~+) 1B0C(/[dIeO)-B cn&n47n@DS	nX\]`Xan	c5<<	 n`CL#LKC K3 KtCQTH~ K=# ".eEHHOOXc3h=O,O&P ". ".N 3715GK}EHHOOXc3h%778}  S#X/} tCH~.	}
 AE} 
}~N299 NQU Nryy S 0"))  "
 
 
PT 

 $/ C  0rH   r  r  r  c                    t        j                  | j                        }t        |      t        |j                  j                               k  s^t        |      dk(  r|d   ndj                  |      }dj                  |j                  j                               }t        d| d|       |j                  j                         D ci c](  }|j                  |vs|j                  |j                  * c}S c c}w )Nr/   r   , z(The model does not have input(s) named: z&, expected a subset of the following: )r  ru  r  r  rv  r=   r   joinr   r  r  r9   )r  r  r  formatted_input_namesformatted_allowed_input_namesr  s         rF   get_concrete_argsr    s    


EMM
*CCNN$7$7$9 ::25k2Ba2GATYYWbMc(,		#..2E2E2G(H%67L6M N-.0
 	

 (+~~'<'<'>\!!&&P[B[AFFAII\\\s   	C9C9r   c                 :    | j                   j                  t        v S r   )r  r  _SUPPORTED_MODELS)r  s    rF   is_model_supportedr    s    ??##'888rH   c                     t        |       s:dj                  t              }t        d| j                  j
                   d|       y )Nr  zModel z) is not supported yet, supported models: )r  r  r  r8  r  r  )r  supported_model_namess     rF   check_if_model_is_supportedr    sJ    e$ $		*; <!U__--..WXmWno
 	
 %rH   disable_check
tracer_clsc                 B   || j                   j                         }t        |      }t        | |      }|st	        |        d|v r,t        | j                  dd      st        j                  d       d|vr=t        | j                  dd      r&t        j                  d       d| j                  _	         |       }|j                  | |      }t        j                  j                  | |      }| j                  |_        | j                  |_        | j                   |_        |S )a  
    Performs symbolic tracing on the model.

    Args:
        model ([`PretrainedModel`]):
            The model to trace.
        input_names (`list[str]`, *optional*):
            The names of the inputs of the traced model. If unset, model.dummy_inputs.keys() are used instead.
        disable_check (`bool`, *optional*, defaults to `False`):
            If `True`, no check is done before trying to trace the model, this is mostly usesul for debugging purposes.
        tracer_cls (`Type[HFTracer]`, *optional*, defaults to `HFTracer`):
            The tracer class to use for instantiating the tracer. If unset, `HFTracer` is used instead.

    Returns:
        `torch.fx.GraphModule`: A GraphModule constructed by recording operations seen while tracing the model.

    Example:

        ```python
        from transformers.utils.fx import symbolic_trace

        traced_model = symbolic_trace(model, input_names=["input_ids", "attention_mask", "token_type_ids"])
        ```
    r0  	use_cacheFz|`past_key_values` were specified as input names, but model.config.use_cache = False, this might lead to unexpected behavior.z`past_key_values` were not specified as input names, but model.config.use_cache = True. Setting model.config.use_cache = False.r  )r  r=   r   r  r  r  r6  loggerwarningr  r  r   r  r
   r  r  r   )r  r  r  r  r  r  traced_graphtraceds           rF   symbolic_tracer    s    < ((--/{#K%e[9M#E*K'kSX0Y#	
 +kSX0Y.	
 "' \F<<]<CLXX!!%6FLLFM (-F$LLFMMrH   r   r   )NNg       @FF)F)NN)r   )Nr   FN)
      N)r  r   )r  r9  r  r  r  r;  r  osr   r  r`  typingr   r   r   r   r   r   torch.utils._pytreeutils_pytreer  r   torch.fxr	   r
   r   r   r   torch.fx._compatibilityr   torch.fx._symbolic_tracer   torch.fx.proxyr   r4   r   cache_utilsr   r   r   modeling_utilsr   r   models.autor   models.auto.modeling_autor   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   import_utilsr0   r1   peftr2   
get_loggerr  r  environr@   upperr_  r  r?   r   rG   (_REGULAR_SUPPORTED_MODEL_NAMES_AND_TASKSrA  _REGULAR_SUPPORTED_MODELSitemr>   r   extend_SPECIAL_SUPPORTED_MODELSr\  sortedr  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r$  r'  r*  r,  r0  r2  r4  rC  rJ  rN  rQ  rS  rU  r_  rb  rm  ru  rx  rz  r  	Embedding
functional	embedding	LayerNorm	GroupNormLinearreluReLUwhereabsr  r   catstackr  mulr   matmulbmmbaddbmmr  repeatrepeat_interleaverollflipindex_selectgatherConv1dConv2dsqueeze	unsqueezerZ  one_hotMSELossCrossEntropyLossBCEWithLogitsLossr  r  r  scaled_dot_product_attentionr  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r   rH   rF   <module>r!     s          	  
  : :  $ $  < < 1 2 )  : : > $     .  
		H	%JJNN?B7==?CWW 
 8<&%&&eCcN34& 
#Y&R8, (t '.u%5 " 4 VD$!(()N)VQU)VW!(()Nt)TU	V " &%>AZ%Z![\] d
 ejZOS ! J*	E34 3	-T 	- &'D - $( ," '+ !.H #' 8 23! % 89t PA- (, .( 26 .0 49d .*-$-*-"$-&:- NRT---"&,4	HH*,4	HH!!#@,4 
HH*,4 
HH*	,4
 
HHOO_,4 
JJ
,4 
HH6,4 
HHMM=,4 
KK,4 
IIy,4 
LL,,4 
JJ
,4 
IIy,4 
KK,4 
IIy,4  
IIy!,4" 
LL&#,4$ 
LL,%,4& 
IIy',4( 
MM=),4* 
LL.+,4, 
LL,-,4. 
LL,/,40 
41,42 
JJ
3,44 
JJ
5,46 
LL(7,48 
*9,4: 
LL8;,4< 
LL,=,4> 
LL,?,4@ 
HHOO_A,4B 
HHOO_C,4D 
MM=E,4F 
LL.	OO_	LL2	6	HH!<	HH&	HH8	HH :&W,4 Xx/0 ,^ 5 uxx**GG H
))e ))X_' _,	+ 	C7 C$ ;?!!7?+W]-CWZEXXY! x67! 	!H4 @H x7I1J 	"$u+ 	"(D6S_K_B` 	" &uh5RSX5Y -O2<@	  ,N2;?	 c c (SWX[S\J] kv k\]RYY ]T#Y ]9
 (,!)	>>$s)$> > X	>
 >rH   