§
    Ý˜ºhI…  ã                   ó–  — d 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 ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZ  e¦   «         rddlZde de de fd	„Z!dFde de"fd„Z#dFde de"fd„Z$d„ Z% G d„ d¦  «        Z& G d„ de¦  «        Z' G d„ de¦  «        Z( G d„ de¦  «        Z)dZ* ej+        de*z   dz   ¦  «        Z,d„ Z- G d„ de¦  «        Z. G d„ d e¦  «        Z/ G d!„ d"e¦  «        Z0 G d#„ d$e¦  «        Z1 G d%„ d&e¦  «        Z2d'e3e4e5f         d(e5fd)„Z6d(e3e4e5f         fd*„Z7d(e3e4e5f         fd+„Z8d,„ Z9d(e3e4e5f         fd-„Z: G d.„ d/e¦  «        Z;d0„ Z<d1„ Z=dGd2„Z> G d3„ d4e¦  «        Z? G d5„ d6¦  «        Z@d7„ ZAd8„ ZBd9„ ZC	 dHd;eeD         d<e d=e"fd>„ZE G d?„ d@e¦  «        ZF G dA„ dB¦  «        ZGdFdCe4dDe"fdE„ZHdS )Iz6
PyTorch-independent utilities for the Trainer class.
é    N)ÚAnyÚ
NamedTupleÚOptionalÚUnioné   )ÚExplicitEnumÚis_psutil_availableÚis_tf_availableÚis_torch_availableÚis_torch_cuda_availableÚis_torch_hpu_availableÚis_torch_mlu_availableÚis_torch_mps_availableÚis_torch_musa_availableÚis_torch_npu_availableÚis_torch_xla_availableÚis_torch_xpu_availableÚrequires_backendsÚ	worker_idÚnum_workersÚrankc                 ó`   — t          j        ¦   «         dz  }||z  |z   }t          |¦  «         dS )zN
    Helper function to set worker seed during Dataloader initialization.
    l        N)ÚtorchÚinitial_seedÚset_seed)r   r   r   Ú	init_seedÚworker_seeds        úb/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/trainer_utils.pyÚseed_workerr   4   s:   € õ Ô"Ñ$Ô$ uÑ,€IØ Ñ$ yÑ0€KÝˆ[ÑÔÐÐÐó    FÚseedÚ	warn_onlyc                 ó¾  — t          | ¦  «         t          ¦   «         r�dt          j        d<   dt          j        d<   dt          j        d<   dt          j        d<   dt          j        d<   t	          j        d|¬	¦  «         dt          j        j        _        d
t          j        j        _	        t          ¦   «         r$ddl}|j        j                             ¦   «          dS dS )a	  
    Helper function for reproducible behavior during distributed training. See
    - https://pytorch.org/docs/stable/notes/randomness.html for pytorch
    - https://www.tensorflow.org/api_docs/python/tf/config/experimental/enable_op_determinism for tensorflow
    Ú1ÚCUDA_LAUNCH_BLOCKINGz:16:8ÚCUBLAS_WORKSPACE_CONFIGÚASCEND_LAUNCH_BLOCKINGÚHCCL_DETERMINISTICÚFLASH_ATTENTION_DETERMINISTICT)r"   Fr   N)r   r   ÚosÚenvironr   Úuse_deterministic_algorithmsÚbackendsÚcudnnÚdeterministicÚ	benchmarkr
   Ú
tensorflowÚconfigÚexperimentalÚenable_op_determinism)r!   r"   Útfs      r   Úenable_full_determinismr6   =   sÓ   € õ ˆT�N„N€NåÑÔð /ð .1�Œ
Ð)Ñ*Ø07�Œ
Ð,Ñ-à/2�Œ
Ð+Ñ,Ø+.�Œ
Ð'Ñ(à69�Œ
Ð2Ñ3ÝÔ*¨4¸9ÐEÑEÔEÐEð .2�ŒÔÔ*Ø).�ŒÔÔ&åÑÔð 7ØÐÐÐà
Œ	Ô×4Ò4Ñ6Ô6Ð6Ð6Ð6ð7ð 7r    r/   c                 ó|  — t          j        | ¦  «         t          j                              | ¦  «         t          ¦   «         rIt	          j        | ¦  «         t          j                             | ¦  «         |rt	          j        d¦  «         t          ¦   «         rt          j
                             | ¦  «         t          ¦   «         rt          j                             | ¦  «         t          ¦   «         rt          j                             | ¦  «         t          ¦   «         rt          j                             | ¦  «         t#          ¦   «         rt          j                             | ¦  «         t'          ¦   «         r@ddl}|j                              | ¦  «         |r"|j        j                             ¦   «          dS dS dS )aY  
    Helper function for reproducible behavior to set the seed in `random`, `numpy`, `torch` and/or `tf` (if installed).

    Args:
        seed (`int`):
            The seed to set.
        deterministic (`bool`, *optional*, defaults to `False`):
            Whether to use deterministic algorithms where available. Can slow down training.
    Tr   N)Úrandomr!   Únpr   r   Úmanual_seedÚcudaÚmanual_seed_allr,   r   Úmlur   Úmusar   Únpur   Úhpur   Úxpur
   r1   r   r2   r3   r4   )r!   r/   r5   s      r   r   r   ]   s“  € õ „K�ÑÔÐÝ„I‡N‚N�4ÑÔÐÝÑÔð 5ÝÔ˜$ÑÔÐÝŒ
×"Ò" 4Ñ(Ô(Ð(àð 	5ÝÔ.¨tÑ4Ô4Ð4ÝÑÔð (ÝŒ	×!Ò! $Ñ'Ô'Ð'ÝÑ Ô ð )ÝŒ
×"Ò" 4Ñ(Ô(Ð(ÝÑÔð (ÝŒ	×!Ò! $Ñ'Ô'Ð'ÝÑÔð (ÝŒ	×!Ò! $Ñ'Ô'Ð'ÝÑÔð (ÝŒ	×!Ò! $Ñ'Ô'Ð'ÝÑÔð ;ØÐÐÐà
Œ	×Ò˜4Ñ Ô Ð Øð 	;ØŒIÔ"×8Ò8Ñ:Ô:Ð:Ð:Ð:ð;ð ;ð	;ð 	;r    c                 ó  — | j         r…t          j        |                     d¦  «        |                     d¦  «        z  ¦  «        }| j        t          j        |¦  «        z  }|t          j        |¦  «                             | |¦  «        z   }|S )aL  
    Implements the NEFTune forward pass for the model using forward hooks. Note this works only for torch.nn.Embedding
    layers. This method is slightly adapted from the original source code that can be found here:
    https://github.com/neelsjain/NEFTune Simply add it to your model as follows:
    ```python
    model = ...
    model.embed_tokens.neftune_noise_alpha = 0.1
    model.embed_tokens.register_forward_hook(neftune_post_forward_hook)
    ```
    Args:
        module (`torch.nn.Module`):
            The embedding module where the hook is attached. Note that you need to set `module.neftune_noise_alpha` to
            the desired noise alpha value.
        input (`torch.Tensor`):
            The input tensor to the model.
        output (`torch.Tensor`):
            The output tensor of the model (i.e. the embeddings).
    r   é   )Útrainingr   ÚtensorÚsizeÚneftune_noise_alphaÚsqrtÚ
zeros_likeÚuniform_)ÚmoduleÚinputÚoutputÚdimsÚmag_norms        r   Úneftune_post_forward_hookrP   �   sz   € ð& „ð QÝŒ|˜FŸKšK¨™NœN¨V¯[ª[¸©^¬^Ñ;Ñ<Ô<ˆØÔ-µ´
¸4Ñ0@Ô0@Ñ@ˆØ�%Ô*¨6Ñ2Ô2×;Ò;¸X¸IÀxÑPÔPÑPˆØ€Mr    c                   ó  — e Zd ZdZ	 	 d
deej        eej                 f         deej        eej                 f         deeej        eej                 f                  deeej        eej                 f                  fd„Z	d„ Z
d	„ ZdS )ÚEvalPredictionaz  
    Evaluation output (always contains labels), to be used to compute metrics.

    Parameters:
        predictions (`np.ndarray`): Predictions of the model.
        label_ids (`np.ndarray`): Targets to be matched.
        inputs (`np.ndarray`, *optional*): Input data passed to the model.
        losses (`np.ndarray`, *optional*): Loss values computed during evaluation.
    NÚpredictionsÚ	label_idsÚinputsÚlossesc                 óÜ   — || _         || _        || _        || _        | j         | j        f| _        | j        �| xj        | j        fz  c_        | j        �| xj        | j        fz  c_        d S d S ©N)rS   rT   rU   rV   Úelements)ÚselfrS   rT   rU   rV   s        r   Ú__init__zEvalPrediction.__init__¦   sv   € ð 'ˆÔØ"ˆŒØˆŒØˆŒØÔ)¨4¬>Ð:ˆŒØŒ;Ð"ØˆMŒM˜dœk˜^Ñ+ˆMŒMØŒ;Ð"ØˆMŒM˜dœk˜^Ñ+ˆMŒMˆMˆMð #Ð"r    c                 ó*   — t          | j        ¦  «        S rX   )ÚiterrY   ©rZ   s    r   Ú__iter__zEvalPrediction.__iter__·   s   € Ý�D”MÑ"Ô"Ð"r    c                 óv   — |dk     s|t          | j        ¦  «        k    rt          d¦  «        ‚| j        |         S )Nr   ztuple index out of range)ÚlenrY   Ú
IndexError)rZ   Úidxs     r   Ú__getitem__zEvalPrediction.__getitem__º   s;   € Ø�Š7ˆ7�c�S ¤Ñ/Ô/Ò/Ð/ÝÐ7Ñ8Ô8Ð8ØŒ}˜SÔ!Ð!r    )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r9   ÚndarrayÚtupler   r[   r_   rd   © r    r   rR   rR   ›   sÛ   € € € € € ðð ð BFØAEð,ð ,à˜2œ: u¨R¬ZÔ'8Ð8Ô9ð,ð ˜œ U¨2¬:Ô%6Ð6Ô7ð,ð ˜˜rœz¨5°´Ô+<Ð<Ô=Ô>ð	,ð
 ˜˜rœz¨5°´Ô+<Ð<Ô=Ô>ð,ð ,ð ,ð ,ð"#ð #ð #ð"ð "ð "ð "ð "r    rR   c                   óÌ   — e Zd ZU eej        eej                 f         ed<   eeej        eej                 f                  ed<   ee	e
ef                  ed<   ee         ed<   dS )ÚEvalLoopOutputrS   rT   ÚmetricsÚnum_samplesN)re   rf   rg   r   r9   ri   rj   Ú__annotations__r   ÚdictÚstrÚfloatÚintrk   r    r   rm   rm   À   s   € € € € € € Ø�r”z 5¨¬Ô#4Ð4Ô5Ð5Ð5Ñ5Ø˜˜bœj¨%°´
Ô*;Ð;Ô<Ô=Ð=Ð=Ñ=Ø�d˜3 ˜:Ô&Ô'Ð'Ð'Ñ'Ø˜#”ÐÐÑÐÐr    rm   c                   ó¶   — e Zd ZU eej        eej                 f         ed<   eeej        eej                 f                  ed<   ee	e
ef                  ed<   dS )ÚPredictionOutputrS   rT   rn   N)re   rf   rg   r   r9   ri   rj   rp   r   rq   rr   rs   rk   r    r   rv   rv   Ç   so   € € € € € € Ø�r”z 5¨¬Ô#4Ð4Ô5Ð5Ð5Ñ5Ø˜˜bœj¨%°´
Ô*;Ð;Ô<Ô=Ð=Ð=Ñ=Ø�d˜3 ˜:Ô&Ô'Ð'Ð'Ñ'Ð'Ð'r    rv   c                   ó>   — e Zd ZU eed<   eed<   eeef         ed<   dS )ÚTrainOutputÚglobal_stepÚtraining_lossrn   N)re   rf   rg   rt   rp   rs   rq   rr   rk   r    r   rx   rx   Í   s?   € € € € € € ØÐÐÑØÐÐÑØ�#�u�*ÔÐÐÑÐÐr    rx   Ú
checkpointú^z\-(\d+)$c                 óÒ   ‡ — t          j        ‰ ¦  «        }ˆ fd„|D ¦   «         }t          |¦  «        dk    rd S t           j                             ‰ t          |d„ ¬¦  «        ¦  «        S )Nc                 óÂ   •— g | ][}t                                |¦  «        ®t          j                             t          j                             ‰|¦  «        ¦  «        ¯Y|‘Œ\S rX   )Ú_re_checkpointÚsearchr*   ÚpathÚisdirÚjoin)Ú.0r�   Úfolders     €r   ú
<listcomp>z'get_last_checkpoint.<locals>.<listcomp>Ù   s\   ø€ ð ð ð àÝ× Ò  Ñ&Ô&Ð2µr´w·}²}ÅRÄWÇ\Â\ÐRXÐZ^ÑE_ÔE_Ñ7`Ô7`Ð2ð 	à2Ð2Ð2r    r   c                 ó€   — t          t                               | ¦  «                             ¦   «         d         ¦  «        S )Nr   )rt   r   r€   Úgroups)Úxs    r   ú<lambda>z%get_last_checkpoint.<locals>.<lambda>à   s/   € ½sÅ>×CXÒCXÐYZÑC[ÔC[×CbÒCbÑCdÔCdÐefÔCgÑ?hÔ?h€ r    )Úkey)r*   Úlistdirra   r�   rƒ   Úmax)r…   ÚcontentÚcheckpointss   `  r   Úget_last_checkpointr�   ×   s{   ø€ ÝŒj˜Ñ Ô €Gðð ð ð àðñ ô €Kõ
 ˆ;ÑÔ˜1ÒÐØˆÝŒ7�<Š<˜¥ KÐ5hÐ5hÐ iÑ iÔ iÑjÔjÐjr    c                   ó   — e Zd ZdZdZdZdS )ÚIntervalStrategyÚnoÚstepsÚepochN©re   rf   rg   ÚNOÚSTEPSÚEPOCHrk   r    r   r’   r’   ã   ó   € € € € € Ø	€BØ€EØ€E€E€Er    r’   c                   ó   — e Zd ZdZdZdZdZdS )ÚSaveStrategyr“   r”   r•   ÚbestN)re   rf   rg   r—   r˜   r™   ÚBESTrk   r    r   rœ   rœ   é   s"   € € € € € Ø	€BØ€EØ€EØ€D€D€Dr    rœ   c                   ó   — e Zd ZdZdZdZdS )ÚEvaluationStrategyr“   r”   r•   Nr–   rk   r    r   r    r    ð   rš   r    r    c                   ó   — e Zd ZdZdZdZdZdS )ÚHubStrategyÚendÚ
every_saver{   Úall_checkpointsN)re   rf   rg   ÚENDÚ
EVERY_SAVEÚ
CHECKPOINTÚALL_CHECKPOINTSrk   r    r   r¢   r¢   ö   s"   € € € € € Ø
€CØ€JØ€JØ'€O€O€Or    r¢   c                   óx   — e Zd ZU dZeed<   eeee         f         ed<   e	ee
f         ed<   dZee
         ed<   dS )ÚBestRunac  
    The best run found by a hyperparameter search (see [`~Trainer.hyperparameter_search`]).

    Parameters:
        run_id (`str`):
            The id of the best run (if models were saved, the corresponding checkpoint will be in the folder ending
            with run-{run_id}).
        objective (`float`):
            The objective that was obtained for this run.
        hyperparameters (`dict[str, Any]`):
            The hyperparameters picked to get this run.
        run_summary (`Optional[Any]`):
            A summary of tuning experiments. `ray.tune.ExperimentAnalysis` object for Ray backend.
    Úrun_idÚ	objectiveÚhyperparametersNÚrun_summary)re   rf   rg   rh   rr   rp   r   rs   Úlistrq   r   r¯   r   rk   r    r   r«   r«   ý   si   € € € € € € ðð ð €K€K�KØ�U˜D œKÐ'Ô(Ð(Ð(Ñ(Ø˜#˜s˜(”^Ð#Ð#Ñ#Ø!%€K�˜#”Ð%Ð%Ñ%Ð%Ð%r    r«   rn   Úreturnc                 ó<  — t          j        | ¦  «        } |                      dd¦  «        }|                      dd¦  «        }d„ | D ¦   «         }|D ]}|                      |d¦  «        }Œt          | ¦  «        dk    r|n t	          |                      ¦   «         ¦  «        S )aj  
    The default objective to maximize/minimize when doing an hyperparameter search. It is the evaluation loss if no
    metrics are provided to the [`Trainer`], the sum of all metrics otherwise.

    Args:
        metrics (`dict[str, float]`): The metrics returned by the evaluate method.

    Return:
        `float`: The objective to minimize or maximize
    Ú	eval_lossNr•   c                 ó�   — g | ]C}|                      d ¦  «        s*|                      d¦  «        s|                      d¦  «        ¯A|‘ŒDS )Ú_runtimeÚ_per_secondÚ_compilation_time)Úendswith©r„   Úms     r   r†   z-default_compute_objective.<locals>.<listcomp>"  sd   € ð ð ð Ø˜aŸjšj¨Ñ4Ô4ðØ89¿
º
À=Ñ8QÔ8QðØUV×U_ÒU_Ð`sÑUtÔUtðØ	ðð ð r    r   )ÚcopyÚdeepcopyÚpopra   ÚsumÚvalues)rn   ÚlossÚ_Úspeed_metricsÚsms        r   Údefault_compute_objectiverÄ     s©   € õ Œm˜GÑ$Ô$€GØ�;Š;�{ DÑ)Ô)€DØ�Š�G˜TÑ"Ô"€Aðð Øðñ ô €Mð ð "ð "ˆØ�KŠK˜˜DÑ!Ô!ˆˆÝ�w‘<”< 1Ò$Ð$ˆ4ˆ4­#¨g¯nªnÑ.>Ô.>Ñ*?Ô*?Ð?r    c                 óò   — ddl m}  |¦   «         s
J d¦   «         ‚|                      dddd¬¦  «        |                      d	dd
¦  «        |                      ddd¦  «        |                      dg d¢¦  «        dœS )Nr   )Úis_optuna_availablez:This function needs Optuna installed: `pip install optuna`Úlearning_rateç�íµ ÷Æ°>ç-Cëâ6?T)ÚlogÚnum_train_epochsé   r!   é(   Úper_device_train_batch_size©é   é   é   é    é@   ©rÇ   rË   r!   rÎ   )ÚintegrationsrÆ   Úsuggest_floatÚsuggest_intÚsuggest_categorical)ÚtrialrÆ   s     r   Údefault_hp_space_optunarÛ   *  s¡   € Ø1Ð1Ð1Ð1Ð1Ð1àÐÑ Ô Ð^Ð^Ð"^Ñ^Ô^Ð^à×,Ò,¨_¸dÀDÈdÐ,ÑSÔSØ!×-Ò-Ð.@À!ÀQÑGÔGØ×!Ò! &¨!¨RÑ0Ô0Ø',×'@Ò'@ÐA^Ð`rÐ`rÐ`rÑ'sÔ'sð	ð ð r    c           	      ó&  — ddl m}  |¦   «         s
J d¦   «         ‚ddlm} |                     dd¦  «        |                     t          t          dd¦  «        ¦  «        ¦  «        |                     dd	¦  «        |                     g d
¢¦  «        dœS )Nr   )Úis_ray_tune_availablez:This function needs ray installed: `pip install ray[tune]`r   )ÚtunerÈ   rÉ   é   rÍ   rÏ   rÕ   )	rÖ   rÝ   ÚrayrÞ   Ú
loguniformÚchoicer°   ÚrangeÚuniform)rÚ   rÝ   rÞ   s      r   Údefault_hp_space_rayrå   6  s¬   € Ø3Ð3Ð3Ð3Ð3Ð3à Ð Ñ"Ô"Ð`Ð`Ð$`Ñ`Ô`Ð`ØÐÐÐÐÐð Ÿš¨¨tÑ4Ô4Ø ŸKšK­­U°1°a©[¬[Ñ(9Ô(9Ñ:Ô:Ø—’˜Q Ñ#Ô#Ø'+§{¢{Ð3EÐ3EÐ3EÑ'FÔ'Fð	ð ð r    c                 óF   — dddœddddœdd	dœd
ddœdddœdddœg d¢dddœgS )NrÈ   rÉ   )Úminr�   rÇ   ÚdoublerÊ   )ÚboundsÚnameÚtypeÚtransformationr   rß   rË   rt   )ré   rê   rë   rÍ   r!   )Ú4Ú8Ú16Ú32Ú64rÎ   Úcategorical)Úcategorical_valuesrê   rë   rk   )rÚ   s    r   Údefault_hp_space_sigoptrô   D  si   € à¨Ð-Ð-°ÐPXÐlqÐrÐrØ QÐ'Ð'Ð1CÈUÐSÐSØ RÐ(Ð(°&À%ÐHÐHà">Ð">Ð">Ø1Ø!ð	
ð 	
ð		ð 	r    c                 ó|   — ddl m}  |¦   «         st          d¦  «        ‚ddddœdd	d
dœddddœddddœdg d¢idœdœS )Nr   )Úis_wandb_availablez8This function needs wandb installed: `pip install wandb`r8   r­   Úminimize)rê   Úgoalrä   rÈ   rÉ   )Údistributionrç   r�   Úint_uniformrß   rÍ   r¿   rÏ   rÕ   )ÚmethodÚmetricÚ
parameters)rÖ   rö   ÚImportError)rÚ   rö   s     r   Údefault_hp_space_wandbrÿ   Q  s•   € Ø0Ð0Ð0Ð0Ð0Ð0àÐÑÔð VÝÐTÑUÔUÐUð Ø&°
Ð;Ð;à.7ÀÈTÐRÐRØ1>ÀqÐQRÐ SÐ SØ%2¸1ÀRÐHÐHØ,4Ð6HÐ6HÐ6HÐ+Ið	
ð 
ð	ð 	ð 	r    c                   ó   — e Zd ZdZdZdZdZdS )ÚHPSearchBackendÚoptunarà   ÚsigoptÚwandbN)re   rf   rg   ÚOPTUNAÚRAYÚSIGOPTÚWANDBrk   r    r   r  r  c  s"   € € € € € Ø€FØ
€CØ€FØ€E€E€Er    r  c                 ób   — t          ¦   «         rddlm} |                     ¦   «         dk    S | dv S )z�
    Whether or not the current process is the local process, based on `xr.global_ordinal()` (for TPUs) first, then on
    `local_rank`.
    r   N)éÿÿÿÿr   )r   Útorch_xla.runtimeÚruntimeÚglobal_ordinal)Ú
local_rankÚxrs     r   Úis_main_processr  j  sF   € õ
 ÑÔð (Ø&Ð&Ð&Ð&Ð&Ð&à× Ò Ñ"Ô" aÒ'Ð'Ø˜Ð Ð r    c                 ó¸   — t          ¦   «         rddlm} |                     ¦   «         S | dk    r+t	          ¦   «         rddl}|j                             ¦   «         S dS )zg
    Return the number of processes launched in parallel. Works with `torch.distributed` and TPUs.
    r   Nr
  r   )r   r  r  Ú
world_sizer   r   ÚdistributedÚget_world_size)r  r  r   s      r   Útotal_processes_numberr  v  sl   € õ ÑÔð 2Ø&Ð&Ð&Ð&Ð&Ð&à�}Š}‰ŒÐØ	�rÒ	Ð	Õ0Ñ2Ô2Ð	ØˆˆˆàÔ ×/Ò/Ñ1Ô1Ð1Øˆ1r    c                 ó  — t          j         ¦   «         |z
  }| › d�t          |d¦  «        i}|dk    r|S |�||z  }t          |d¦  «        || › d�<   |�||z  }t          |d¦  «        || › d�<   |�||z  }	t          |	d¦  «        || › d�<   |S )	aõ  
    Measure and return speed performance metrics.

    This function requires a time snapshot `start_time` before the operation to be measured starts and this function
    should be run immediately after the operation to be measured has completed.

    Args:
    - split: name to prefix metric (like train, eval, test...)
    - start_time: operation start time
    - num_samples: number of samples processed
    - num_steps: number of steps processed
    - num_tokens: number of tokens processed
    rµ   rÐ   r   Né   Ú_samples_per_secondÚ_steps_per_secondÚ_tokens_per_second)ÚtimeÚround)
ÚsplitÚ
start_timero   Ú	num_stepsÚ
num_tokensr  ÚresultÚsamples_per_secondÚsteps_per_secondÚtokens_per_seconds
             r   rÂ   rÂ   …  sÑ   € õ Œi‰kŒk˜JÑ&€GØÐ Ð Ð ¥%¨°Ñ"3Ô"3Ð4€FØ�!‚|€|ØˆØÐØ(¨7Ñ2ÐÝ05Ð6HÈ!Ñ0LÔ0Lˆ�%Ð,Ð,Ð,Ñ-ØÐØ$ wÑ.ÐÝ.3Ð4DÀaÑ.HÔ.Hˆ�%Ð*Ð*Ð*Ñ+ØÐØ&¨Ñ0ÐÝ/4Ð5FÈÑ/JÔ/Jˆ�%Ð+Ð+Ð+Ñ,Ø€Mr    c                   ó>   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdS )ÚSchedulerTypeaL  
    Scheduler names for the parameter `lr_scheduler_type` in [`TrainingArguments`].
    By default, it uses "linear". Internally, this retrieves `get_linear_schedule_with_warmup` scheduler from [`Trainer`].
    Scheduler types:
       - "linear" = get_linear_schedule_with_warmup
       - "cosine" = get_cosine_schedule_with_warmup
       - "cosine_with_restarts" = get_cosine_with_hard_restarts_schedule_with_warmup
       - "polynomial" = get_polynomial_decay_schedule_with_warmup
       - "constant" =  get_constant_schedule
       - "constant_with_warmup" = get_constant_schedule_with_warmup
       - "inverse_sqrt" = get_inverse_sqrt_schedule
       - "reduce_lr_on_plateau" = get_reduce_on_plateau_schedule
       - "cosine_with_min_lr" = get_cosine_with_min_lr_schedule_with_warmup
       - "warmup_stable_decay" = get_wsd_schedule
    ÚlinearÚcosineÚcosine_with_restartsÚ
polynomialÚconstantÚconstant_with_warmupÚinverse_sqrtÚreduce_lr_on_plateauÚcosine_with_min_lrÚcosine_warmup_with_min_lrÚwarmup_stable_decayN)re   rf   rg   rh   ÚLINEARÚCOSINEÚCOSINE_WITH_RESTARTSÚ
POLYNOMIALÚCONSTANTÚCONSTANT_WITH_WARMUPÚINVERSE_SQRTÚREDUCE_ON_PLATEAUÚCOSINE_WITH_MIN_LRÚCOSINE_WARMUP_WITH_MIN_LRÚWARMUP_STABLE_DECAYrk   r    r   r&  r&  £  sY   € € € € € ðð ð  €FØ€FØ1ÐØ€JØ€HØ1ÐØ!€LØ.ÐØ-ÐØ ;ÐØ/ÐÐÐr    r&  c                   óV   — e Zd ZdZddddddœZdd„Zd	„ Zd
„ Zd„ Zd„ Z	d„ Z
d„ Zdd„ZdS )ÚTrainerMemoryTrackeraß  
    A helper class that tracks cpu and gpu memory.

    This class will silently skip unless `psutil` is available. Install with `pip install psutil`.

    When a stage completes, it can pass metrics dict to update with the memory metrics gathered during this stage.

    Example :

    ```python
    self._memory_tracker = TrainerMemoryTracker(self.args.skip_memory_metrics)
    self._memory_tracker.start()
    # code ...
    metrics = {"train_runtime": 10.5}
    self._memory_tracker.stop_and_update_metrics(metrics)
    ```

    At the moment GPU tracking is only for `pytorch`, but can be extended to support `tensorflow`.

    To understand this class' intricacies please read the documentation of [`~Trainer.log_metrics`].
    ÚinitÚtrainÚevalÚtest)r[   r@  Ú_inner_training_loopÚevaluateÚpredictFc                 óD  — || _         t          ¦   «         sd| _         | j         rd S dd l}t          ¦   «         st	          ¦   «         st          ¦   «         rdd l}|| _        i | _        n‹t          ¦   «         rdd l}|| _        i | _        njt          ¦   «         rdd l}|| _        i | _        nIt          ¦   «         rdd l}|| _        i | _        n(t          ¦   «         rdd l}|| _        i | _        nd | _        |                     ¦   «         | _        d | _        i | _        d| _        d S )NTr   F)Úskip_memory_metricsr	   Úpsutilr   r   r   r   Úgpur   r   r   r   ÚProcessÚprocessÚ	cur_stageÚcpuÚinit_reported)rZ   rG  rH  r   s       r   r[   zTrainerMemoryTracker.__init__á  sL  € Ø#6ˆÔ å"Ñ$Ô$ð 	,à'+ˆDÔ$àÔ#ð 	ØˆFàˆˆˆå"Ñ$Ô$ð 	Õ(>Ñ(@Ô(@ð 	ÕD[ÑD]ÔD]ð 	ØˆLˆLˆLàˆDŒJØˆDŒHˆHÝ#Ñ%Ô%ð 	ØˆLˆLˆLàˆDŒJØˆDŒHˆHÝ#Ñ%Ô%ð 	ØˆLˆLˆLàˆDŒJØˆDŒHˆHÝ#Ñ%Ô%ð 	ØˆLˆLˆLàˆDŒJØˆDŒHˆHÝ#Ñ%Ô%ð 	ØˆLˆLˆLàˆDŒJØˆDŒHˆHàˆDŒJà—~’~Ñ'Ô'ˆŒàˆŒØˆŒØ"ˆÔÐÐr    c                 óÔ   — t          j        ¦   «         j        j        j        j        }|| j        v r| j        |         S t          d|› d| j                             ¦   «         › �¦  «        ‚)z+derives the stage/caller name automaticallyzwas called from z+, but only expect to be called from one of )ÚinspectÚcurrentframeÚf_backÚf_codeÚco_nameÚstagesÚ
ValueErrorÚkeys)rZ   Úcallers     r   Úderive_stagez!TrainerMemoryTracker.derive_stage  sk   € åÔ%Ñ'Ô'Ô.Ô5Ô<ÔDˆØ�T”[Ð Ð Ø”;˜vÔ&Ð&åØj 6ÐjÐjÐVZÔVa×VfÒVfÑVhÔVhÐjÐjñô ð r    c                 ó>   — | j                              ¦   «         j        S )z4get resident set size memory for the current process)rK  Úmemory_infoÚrssr^   s    r   Úcpu_mem_usedz!TrainerMemoryTracker.cpu_mem_used  s   € àŒ|×'Ò'Ñ)Ô)Ô-Ð-r    c                 ó~   — d| _         	 t          |                      ¦   «         | j         ¦  «        | _         | j        sd S Œ6)Nr
  )Úcpu_mem_used_peakr�   r]  Úpeak_monitoringr^   s    r   Úpeak_monitor_funcz&TrainerMemoryTracker.peak_monitor_func  sG   € Ø!#ˆÔð	Ý%(¨×):Ò):Ñ)<Ô)<¸dÔ>TÑ%UÔ%UˆDÔ"ð
 Ô'ð Ø�ð	r    c                 ó  — | j         rdS |                      ¦   «         }| j        �| j        |k    rdS || _        t          j        ¦   «          | j        ��ât
          j                             ¦   «         r>| j        j                             ¦   «          | j        j         	                    ¦   «          �n†t          ¦   «         r>| j        j                             ¦   «          | j        j         	                    ¦   «          �n:t          ¦   «         r=| j        j                             ¦   «          | j        j         	                    ¦   «          nït          ¦   «         r=| j        j                             ¦   «          | j        j         	                    ¦   «          n¤t!          ¦   «         r=| j        j                             ¦   «          | j        j         	                    ¦   «          nYt%          ¦   «         r| j        j                             ¦   «          n,t)          ¦   «         r| j        j         	                    ¦   «          | j        ��nt
          j                             ¦   «         r%| j        j                             ¦   «         | _        �n+t          ¦   «         r$| j        j                             ¦   «         | _        nùt          ¦   «         r$| j        j                             ¦   «         | _        nÇt          ¦   «         r$| j        j                             ¦   «         | _        n•t!          ¦   «         r$| j        j                             ¦   «         | _        nct%          ¦   «         r$| j        j                             ¦   «         | _        n1t)          ¦   «         r#| j        j                             ¦   «         | _        |                      ¦   «         | _        d| _        t9          j        | j        ¬¦  «        }d|_        |                      ¦   «          dS )z%start tracking for the caller's stageNT)Útarget)!rG  rY  rL  ÚgcÚcollectr   r;   Úis_availableÚreset_peak_memory_statsÚempty_cacher   r=   r   r>   r   rA   r   r?   r   r@   r   ÚmpsÚmemory_allocatedÚgpu_mem_used_at_startÚcurrent_allocated_memoryr]  Úcpu_mem_used_at_startr`  Ú	threadingÚThreadra  ÚdaemonÚstart)rZ   ÚstageÚpeak_monitor_threads      r   rq  zTrainerMemoryTracker.start)  sg  € àÔ#ð 	ØˆFà×!Ò!Ñ#Ô#ˆàŒ>Ð%¨$¬.¸EÒ*AÐ*AØˆFàˆŒå
Œ
‰ŒˆàŒ:Ñ!ÝŒz×&Ò&Ñ(Ô(ð -Ø”
”×7Ò7Ñ9Ô9Ð9Ø”
”×+Ò+Ñ-Ô-Ð-Ñ-Ý'Ñ)Ô)ð -Ø”
”×6Ò6Ñ8Ô8Ð8Ø”
”×*Ò*Ñ,Ô,Ð,Ñ,Ý(Ñ*Ô*ð -Ø”
”×7Ò7Ñ9Ô9Ð9Ø”
”×+Ò+Ñ-Ô-Ð-Ð-Ý'Ñ)Ô)ð -Ø”
”×6Ò6Ñ8Ô8Ð8Ø”
”×*Ò*Ñ,Ô,Ð,Ð,Ý'Ñ)Ô)ð -Ø”
”×6Ò6Ñ8Ô8Ð8Ø”
”×*Ò*Ñ,Ô,Ð,Ð,Ý'Ñ)Ô)ð -Ø”
”×6Ò6Ñ8Ô8Ð8Ð8õ (Ñ)Ô)ð -Ø”
”×*Ò*Ñ,Ô,Ð,ð Œ:Ñ!ÝŒz×&Ò&Ñ(Ô(ð WØ-1¬Z¬_×-MÒ-MÑ-OÔ-O�Ô*Ñ*Ý'Ñ)Ô)ð WØ-1¬Z¬^×-LÒ-LÑ-NÔ-N�Ô*Ð*Ý(Ñ*Ô*ð 	WØ-1¬Z¬_×-MÒ-MÑ-OÔ-O�Ô*Ð*Ý'Ñ)Ô)ð WØ-1¬Z¬^×-LÒ-LÑ-NÔ-N�Ô*Ð*Ý'Ñ)Ô)ð WØ-1¬Z¬^×-LÒ-LÑ-NÔ-N�Ô*Ð*Ý'Ñ)Ô)ð WØ-1¬Z¬^×-LÒ-LÑ-NÔ-N�Ô*Ð*Ý'Ñ)Ô)ð WØ-1¬Z¬^×-TÒ-TÑ-VÔ-V�Ô*ð &*×%6Ò%6Ñ%8Ô%8ˆÔ"à#ˆÔÝ'Ô.°dÔ6LÐMÑMÔMÐØ%)ÐÔ"Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r    c                 óF	  — | j         �| j         |k    rdS d| _        t          j        ¦   «          | j        ��,t          j                             ¦   «         r| j        j                             ¦   «          nït          ¦   «         r| j        j	                             ¦   «          nÂt          ¦   «         r| j        j                             ¦   «          n•t          ¦   «         r| j        j                             ¦   «          nht          ¦   «         r| j        j                             ¦   «          n;t!          ¦   «         rn,t#          ¦   «         r| j        j                             ¦   «          | j        ��Ðt          j                             ¦   «         rH| j        j                             ¦   «         | _        | j        j                             ¦   «         | _        �nót          ¦   «         rH| j        j	                             ¦   «         | _        | j        j	                             ¦   «         | _        �n�t          ¦   «         rH| j        j                             ¦   «         | _        | j        j                             ¦   «         | _        �nGt          ¦   «         rG| j        j                             ¦   «         | _        | j        j                             ¦   «         | _        nòt          ¦   «         rG| j        j                             ¦   «         | _        | j        j                             ¦   «         | _        n�t!          ¦   «         rG| j        j                             ¦   «         | _        | j        j                             ¦   «         | _        nHt#          ¦   «         r+| j        j                             ¦   «         | _        d| _        nt3          d¦  «        ‚| j        | j        | j        | j        z
  dœ| j        | j         <   | j        �1t9          d| j        | j        z
  ¦  «        | j        | j                  d<   nd| j        | j                  d<   |                      ¦   «         | _        | j        | j        | j        | j        z
  t9          d| j         | j        z
  ¦  «        dœ| j!        | j         <   d| _         dS )	z"stop tracking for the passed stageNFzNo available GPU device found!)Úbeginr£   Úallocr   ÚpeakedzNot available)ru  r£   rv  rw  )"rL  r`  rd  re  r   r;   rf  rh  r   r=   r   r>   r   rA   r   r?   r   r   ri  rj  Úgpu_mem_used_nowÚmax_memory_allocatedÚgpu_mem_used_peakr@   rl  rV  rk  rI  r�   r]  Úcpu_mem_used_nowrm  r_  rM  )rZ   rr  s     r   ÚstopzTrainerMemoryTracker.stopg  s  € ð Œ>Ð%¨$¬.¸EÒ*AÐ*AØˆFð  %ˆÔõ 	Œ
‰ŒˆàŒ:Ñ!ÝŒz×&Ò&Ñ(Ô(ð -Ø”
”×+Ò+Ñ-Ô-Ð-Ð-Ý'Ñ)Ô)ð -Ø”
”×*Ò*Ñ,Ô,Ð,Ð,Ý(Ñ*Ô*ð -Ø”
”×+Ò+Ñ-Ô-Ð-Ð-Ý'Ñ)Ô)ð 	-Ø”
”×*Ò*Ñ,Ô,Ð,Ð,Ý'Ñ)Ô)ð -Ø”
”×*Ò*Ñ,Ô,Ð,Ð,Ý'Ñ)Ô)ð -ð Ý'Ñ)Ô)ð -Ø”
”×*Ò*Ñ,Ô,Ð,ð Œ:Ñ!ÝŒz×&Ò&Ñ(Ô(ð CØ(,¬
¬×(HÒ(HÑ(JÔ(J�Ô%Ø)-¬¬×)MÒ)MÑ)OÔ)O�Ô&Ñ&Ý'Ñ)Ô)ð CØ(,¬
¬×(GÒ(GÑ(IÔ(I�Ô%Ø)-¬¬×)LÒ)LÑ)NÔ)N�Ô&Ñ&Ý(Ñ*Ô*ð CØ(,¬
¬×(HÒ(HÑ(JÔ(J�Ô%Ø)-¬¬×)MÒ)MÑ)OÔ)O�Ô&Ñ&Ý'Ñ)Ô)ð CØ(,¬
¬×(GÒ(GÑ(IÔ(I�Ô%Ø)-¬¬×)LÒ)LÑ)NÔ)N�Ô&Ð&Ý'Ñ)Ô)ð CØ(,¬
¬×(GÒ(GÑ(IÔ(I�Ô%Ø)-¬¬×)LÒ)LÑ)NÔ)N�Ô&Ð&Ý'Ñ)Ô)ð 	CØ(,¬
¬×(GÒ(GÑ(IÔ(I�Ô%Ø)-¬¬×)LÒ)LÑ)NÔ)N�Ô&Ð&Ý'Ñ)Ô)ð CØ(,¬
¬×(OÒ(OÑ(QÔ(Q�Ô%à)-�Ô&Ð&õ !Ð!AÑBÔBÐBð Ô3ØÔ,ØÔ/°$Ô2LÑLð(ð (ˆDŒH�T”^Ñ$ð
 Ô%Ð1Ý58¸¸DÔ<RÐUYÔUjÑ<jÑ5kÔ5k�”˜œÔ(¨Ñ2Ð2à5D�”˜œÔ(¨Ñ2ð !%× 1Ò 1Ñ 3Ô 3ˆÔàÔ/ØÔ(ØÔ+¨dÔ.HÑHÝ˜!˜TÔ3°dÔ6KÑKÑLÔLð	$
ð $
ˆŒ�”Ñ ð ˆŒˆˆr    c                 ó  — | j         rdS | j        �| j        |k    rdS |g}| j        s|                     dd¦  «         d| _        |D ]v}dD ]q}|| j        v r+|| j        |         v r| j        |         |         ||› d|› d�<   | j        �4|| j        v r+|| j        |         v r| j        |         |         ||› d|› d�<   ŒrŒw|d         dk    r5| j        d         d	         |d
<   | j        �| j        d         d	         |d<   dS dS dS )zupdates the metricsNr   r?  T)rv  rw  Ú	_mem_cpu_Ú_deltaÚ	_mem_gpu_ru  Úbefore_init_mem_cpuÚbefore_init_mem_gpu)rG  rL  rN  ÚinsertrM  r   rI  )rZ   rr  rn   rU  Úts        r   Úupdate_metricsz#TrainerMemoryTracker.update_metrics½  so  € àÔ#ð 	ØˆFð Œ>Ð%¨$¬.¸EÒ*AÐ*AØˆFð �ˆØÔ!ð 	&Ø�MŠM˜!˜VÑ$Ô$Ð$Ø!%ˆDÔàð 	Oð 	OˆEØ(ð Oð O�Ø˜DœHÐ$Ð$¨¨d¬h°u¬oÐ)=Ð)=Ø<@¼HÀU¼OÈAÔ<N�G˜uÐ8Ð8¨qÐ8Ð8Ð8Ñ9Ø”:Ð)¨e°t´xÐ.?Ð.?ÀAÈÌÐRWÌÐDXÐDXØ<@¼HÀU¼OÈAÔ<N�G˜uÐ8Ð8¨qÐ8Ð8Ð8Ñ9øð	Oð �!Œ9˜ÒÐØ-1¬X°fÔ-=¸gÔ-FˆGÐ)Ñ*ØŒzÐ%Ø15´¸&Ô1AÀ'Ô1J�Ð-Ñ.Ð.Ð.ð Ðà%Ð%r    Nc                 óž   — | j         rdS |                      ¦   «         }|                      |¦  «         |�|                      ||¦  «         dS dS )z<combine stop and metrics update in one call for simpler codeN)rG  rY  r|  r…  )rZ   rn   rr  s      r   Ústop_and_update_metricsz,TrainerMemoryTracker.stop_and_update_metricsæ  sa   € àÔ#ð 	ØˆFà×!Ò!Ñ#Ô#ˆØ�	Š	�%ÑÔÐð ÐØ×Ò  wÑ/Ô/Ð/Ð/Ð/ð Ðr    ©FrX   )re   rf   rg   rh   rU  r[   rY  r]  ra  rq  r|  r…  r‡  rk   r    r   r>  r>  Á  sÇ   € € € € € ðð ð0 ØØ 'ØØðð €Fð,#ð ,#ð ,#ð ,#ð\ð ð ð.ð .ð .ð
ð 
ð 
ð<$ð <$ð <$ð|Tð Tð Tðl!Kð !Kð !KðR
0ð 
0ð 
0ð 
0ð 
0ð 
0r    r>  c                 ó`   — 	 t          | ¦  «        duS # t          $ r Y dS t          $ r Y dS w xY w)zR
    Checks if the dataset implements __len__() and it doesn't raise an error
    NF)ra   Ú	TypeErrorÚAttributeError)Údatasets    r   Ú
has_lengthr�  ó  sS   € ðÝ�7‰|Œ| 4Ð'Ð'øÝð ð ð àˆuˆuÝð ð ð àˆuˆuðøøøs   ‚ “
- 	-¬-c                 ó  — t          | t          t          f¦  «        r" t          | ¦  «        d„ | D ¦   «         ¦  «        S t          | t          ¦  «        r4 t          | ¦  «        d„ |                      ¦   «         D ¦   «         ¦  «        S t          | t          j        ¦  «        r|                      ¦   «         S t          ¦   «         rFt          | t          j        ¦  «        r,|                      ¦   «         dk    r|                      ¦   «         S | S )zM
    Recursively calls `.item()` on the element of the dictionary passed
    c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rX   ©Údenumpify_detensorizer¹   s     r   ú	<genexpr>z(denumpify_detensorize.<locals>.<genexpr>  s+   è è € ÐGÐG¸!Õ2°1Ñ5Ô5ÐGÐGÐGÐGÐGÐGr    c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS rk   r�  )r„   ÚkÚvs      r   ú
<dictcomp>z)denumpify_detensorize.<locals>.<dictcomp>  s'   € ÐVÐVÐV¹d¸aÀ˜aÕ!6°qÑ!9Ô!9ÐVÐVÐVr    r   )Ú
isinstancer°   rj   rë   rq   Úitemsr9   ÚgenericÚitemr   r   ÚTensorÚnumel)rn   s    r   r‘  r‘    sç   € õ �'�D¥%˜=Ñ)Ô)ð Ø�t�G‰}Œ}ÐGÐG¸wÐGÑGÔGÑGÔGÐGÝ	�G�TÑ	"Ô	"ð Ø�t�G‰}Œ}ÐVÐVÀgÇmÂmÁoÄoÐVÑVÔVÑWÔWÐWÝ	�G�RœZÑ	(Ô	(ð Ø�|Š|‰~Œ~ÐÝ	Ñ	Ô	ð ¥*¨Wµe´lÑ"CÔ"Cð ÈÏÊÉÌÐ[\ÒH\ÐH\Ø�|Š|‰~Œ~ÐØ€Nr    c                 ó0  — t          | t          j        ¦  «        rWt          t	          j        | j        ¦  «        j        ¦  «        }|t          | j        ¦  «        z
  t          | j	        ¦  «        z
  S t          t	          j        | ¦  «        j        ¦  «        S )za
    Return the number of arguments of the passed function, even if it's a partial function.
    )
r—  Ú	functoolsÚpartialra   rP  Ú	signatureÚfuncrý   ÚargsÚkeywords)r¡  Ú
total_argss     r   Únumber_of_argumentsr¥    su   € õ �$�	Ô)Ñ*Ô*ð @Ý�Ô*¨4¬9Ñ5Ô5Ô@ÑAÔAˆ
Ø�C ¤	™NœNÑ*­S°´Ñ-?Ô-?Ñ?Ð?Ý�wÔ  Ñ&Ô&Ô1Ñ2Ô2Ð2r    é€   ÚfunctionÚstarting_batch_sizeÚauto_find_batch_sizec                 ó¾   — | €t          j        t          ||¬¦  «        S |r(t          t          d¦  «         ddlm}  || |¬¦  «        S t          j        | |¬¦  «        S )a+  
    Args:
    A basic decorator that will try to execute `function`. If it fails from exceptions related to out-of-memory or
    CUDNN, the batch size is multiplied by 0.9 and passed to `function`. `function` must take in a `batch_size` parameter as
    its first argument.
        function (`callable`, *optional*)
            A function to wrap
        starting_batch_size (`int`, *optional*)
            The batch size to try and fit into memory
        auto_find_batch_size (`bool`, *optional*)
            If False, will just execute `function`
    N)r¨  r©  Ú
accelerater   )Úfind_executable_batch_size)r§  r¨  )Ú
batch_size)rž  rŸ  r¬  r   Úaccelerate.utils)r§  r¨  r©  Ú%accelerate_find_executable_batch_sizes       r   r¬  r¬    s‰   € ð ÐÝÔ Ý&Ø 3Ø!5ð
ñ 
ô 
ð 	
ð ð qÝÕ4°lÑCÔCÐCØhÐhÐhÐhÐhÐhà4Ð4¸hÐ\oÐpÑpÔpÐpåÔ˜XÐ2EÐFÑFÔFÐFr    c                   ó*   — e Zd ZdZdZdZdZdZdZdZ	dS )	Ú
FSDPOptionÚ
full_shardÚshard_grad_opÚno_shardÚhybrid_shardÚhybrid_shard_zero2ÚoffloadÚ	auto_wrapN)
re   rf   rg   Ú
FULL_SHARDÚSHARD_GRAD_OPÚNO_SHARDÚHYBRID_SHARDÚHYBRID_SHARD_ZERO2ÚOFFLOADÚ	AUTO_WRAPrk   r    r   r±  r±  9  s2   € € € € € Ø€JØ#€MØ€HØ!€LØ-ÐØ€GØ€I€I€Ir    r±  c                   ój   — e Zd ZdZ	 	 	 ddee         dee         fd„Zdedefd„Zd	e	e         fd
„Z
dS )ÚRemoveColumnsCollatorzWWrap the data collator to remove unused columns before they are passed to the collator.NÚ
model_nameÚdescriptionc                 óZ   — || _         || _        || _        || _        || _        d| _        d S )NF)Údata_collatorÚsignature_columnsÚloggerrÃ  rÂ  Úmessage_logged)rZ   rÅ  rÆ  rÇ  rÂ  rÃ  s         r   r[   zRemoveColumnsCollator.__init__F  s8   € ð +ˆÔØ!2ˆÔØˆŒØ&ˆÔØ$ˆŒØ#ˆÔÐÐr    Úfeaturer±   c                 ó2  ‡ — t          |t          ¦  «        s|S ‰ j        sÙ‰ j        rÒ‰ j        rËt          t          |                     ¦   «         ¦  «        t          ‰ j        ¦  «        z
  ¦  «        }t          |¦  «        dk    ru‰ j
        €dn
d‰ j
        › d�}‰ j                             d|› d‰ j        › dd                     |¦  «        › d	d                     |¦  «        › d
‰ j        › d�¦  «         d‰ _        ˆ fd„|                     ¦   «         D ¦   «         S )Nr   Ú zin the z setzThe following columns z) don't have a corresponding argument in `z!.forward` and have been ignored: z, z. If z are not expected by `z/.forward`,  you can safely ignore this message.Tc                 ó.   •— i | ]\  }}|‰j         v ¯||“ŒS rk   )rÆ  )r„   r”  r•  rZ   s      €r   r–  z9RemoveColumnsCollator._remove_columns.<locals>.<dictcomp>c  s,   ø€ ÐPÐPÐP™˜˜A°A¸Ô9OÐ4OÐ4O��1Ð4OÐ4OÐ4Or    )r—  rq   rÈ  rÇ  rÂ  r°   ÚsetrW  rÆ  ra   rÃ  Úinforƒ   r˜  )rZ   rÉ  Úignored_columnsÚdset_descriptions   `   r   Ú_remove_columnsz%RemoveColumnsCollator._remove_columnsU  sG  ø€ Ý˜'¥4Ñ(Ô(ð 	ØˆNØÔ"ð 
	+ t¤{ð 
	+°t´ð 
	+Ý"¥3 w§|¢|¡~¤~Ñ#6Ô#6½¸TÔ=SÑ9TÔ9TÑ#TÑUÔUˆOÝ�?Ñ#Ô# aÒ'Ð'Ø)-Ô)9Ð)A 2 2ÐGgÐQUÔQaÐGgÐGgÐGgÐ Ø”× Ò ð;Ð-=ð ;ð ;Øœð;ð ;ØJNÏ)Ê)ÐTcÑJdÔJdð;ð ;àŸ9š9 _Ñ5Ô5ð;ð ;àMQÌ_ð;ð ;ð ;ñô ð ð '+�Ô#ØPÐPÐPÐP §¢¡¤ÐPÑPÔPÐPr    Úfeaturesc                 óJ   ‡ — ˆ fd„|D ¦   «         }‰                       |¦  «        S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rk   )rÑ  )r„   rÉ  rZ   s     €r   r†   z2RemoveColumnsCollator.__call__.<locals>.<listcomp>f  s'   ø€ ÐJÐJÐJ°g�D×(Ò(¨Ñ1Ô1ÐJÐJÐJr    )rÅ  )rZ   rÒ  s   ` r   Ú__call__zRemoveColumnsCollator.__call__e  s0   ø€ ØJÐJÐJÐJÀÐJÑJÔJˆØ×!Ò! (Ñ+Ô+Ð+r    ©NNN)re   rf   rg   rh   r   rr   r[   rq   rÑ  r°   rÕ  rk   r    r   rÁ  rÁ  C  s¡   € € € € € ØaÐað Ø$(Ø%)ð$ð $ð
 ˜S”Mð$ð ˜c”]ð$ð $ð $ð $ðQ tð Q°ð Qð Qð Qð Qð ,  d¤ð ,ð ,ð ,ð ,ð ,ð ,r    rÁ  r‹   Úreturn_is_regexc                 ó   ‡— d}d}t          | t          ¦  «        r)t          t          j        | ‰¦  «        ¦  «        }| ‰k    }nD‰| v rd}n=t          ˆfd„| D ¦   «         ¦  «        rd}nt          ˆfd„| D ¦   «         ¦  «        rd}d}|r||fS |S )aK  A helper method to check if the passed module's key name matches any of the target modules in the optim_target_modules.

    Args:
        optim_target_modules (`Union[str, list[str]]`):
            A list of strings to try to match. Can be also a full string.
        key (`str`):
            A key to search any matches in optim_target_modules
        return_is_regex (`bool`):
            If set to `True`, the method will return whether the passed `optim_target_modules`
            is a regex or not.

    Returns:
        `bool` : True of match object if key matches any target modules from config, False or
        None if no match found
        `bool` : If the matched target module is a regex to silence out the warnings in Trainer
        for extra modules being found (only if `target_module_found=True` for an array of regex).
    FTc              3   ó    •K  — | ]}|‰v V — Œ	d S rX   rk   )r„   Ú
target_keyr‹   s     €r   r’  z-check_target_module_exists.<locals>.<genexpr>…  s(   øè è € ÐFÐF :ˆZ˜3ÐÐFÐFÐFÐFÐFÐFr    c              3   ó\   •K  — | ]&}t          t          j        |‰¦  «        ¦  «        V — Œ'd S rX   )ÚboolÚreÚ	fullmatch)r„   Úoptim_target_moduler‹   s     €r   r’  z-check_target_module_exists.<locals>.<genexpr>‡  s9   øè è € ÐjÐjÐ>Q�T•"”,Ð2°CÑ8Ô8Ñ9Ô9ÐjÐjÐjÐjÐjÐjr    )r—  rr   rÜ  rÝ  rÞ  Úany)Úoptim_target_modulesr‹   r×  Útarget_module_foundÚis_regexs    `   r   Úcheck_target_module_existsrä  j  sØ   ø€ ð$  ÐØ€HåÐ&­Ñ,Ô,ð 
Ý"¥2¤<Ð0DÀcÑ#JÔ#JÑKÔKÐØ'¨3Ò.ˆˆØ	Ð$Ð	$Ð	$à"ÐÐÝ	ÐFÐFÐFÐFÐ1EÐFÑFÔFÑ	FÔ	Fð Ø"ÐÐÝ	ÐjÐjÐjÐjÐUiÐjÑjÔjÑ	jÔ	jð Ø"ÐØˆàð -Ø" HÐ,Ð,àÐr    rˆ  rÖ  )Nr¦  F)Irh   r»   rž  rd  rP  r*   r8   rÝ  rn  r  Útypingr   r   r   r   Únumpyr9   Úutilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   rt   r   rÜ  r6   r   rP   rR   rm   rv   rx   ÚPREFIX_CHECKPOINT_DIRÚcompiler   r�   r’   rœ   r    r¢   r«   rq   rr   rs   rÄ   rÛ   rå   rô   rÿ   r  r  r  rÂ   r&  r>  r�  r‘  r¥  Úcallabler¬  r±  rÁ  rä  rk   r    r   ú<module>rë     sÛ  ððð ð €€€Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" ÐÑÔð Ø€L€L€Lð˜3ð ¨Sð ¸ð ð ð ð ð7ð 7 #ð 7°$ð 7ð 7ð 7ð 7ð@!;ð !;�3ð !; tð !;ð !;ð !;ð !;ðHð ð ð4""ð ""ð ""ð ""ð ""ñ ""ô ""ð ""ðJð ð ð ð �Zñ ô ð ð(ð (ð (ð (ð (�zñ (ô (ð (ðð ð ð ð �*ñ ô ð ð %Ð Ø�”˜DÐ#8Ñ8¸;ÑFÑGÔG€ð	kð 	kð 	kðð ð ð ð �|ñ ô ð ðð ð ð ð �<ñ ô ð ðð ð ð ð ˜ñ ô ð ð(ð (ð (ð (ð (�,ñ (ô (ð (ð&ð &ð &ð &ð &ˆjñ &ô &ð &ð,@ t¨C°¨JÔ'7ð @¸Eð @ð @ð @ð @ð.	 d¨3°¨:Ô&6ð 	ð 	ð 	ð 	ð 4¨¨U¨
Ô#3ð ð ð ð ð
ð 
ð 
ð T¨#¨u¨*Ô%5ð ð ð ð ð$ð ð ð ð �lñ ô ð ð	!ð 	!ð 	!ðð ð ðð ð ð ð<0ð 0ð 0ð 0ð 0�Lñ 0ô 0ð 0ð<o0ð o0ð o0ð o0ð o0ñ o0ô o0ð o0ðd	ð ð ðð ð ð3ð 3ð 3ð glðGð GØ�xÔ ðGØ>AðGØ_cðGð Gð Gð Gð>ð ð ð ð �ñ ô ð ð$,ð $,ð $,ð $,ð $,ñ $,ô $,ð $,ðN$ð $¸#ð $ÐPTð $ð $ð $ð $ð $ð $r    