§
    ‚Štj•| ã            
       óþ  — 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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Zd dlZd dlmZ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"m#Z# d dlm$Z$m%Z% d dl&m'Z' d dl(m)Z) d d	l*m+Z+m,Z, d d
lm-Z- d dl.m/Z/ d dl0Z0d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m
Z7 e+rddl8m9Z9 ne,Z9ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{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‡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”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¡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®m¯Z¯m°Z°m±Z±m²Z²m³Z³  eK¦   «         rd dl´mµZµm¶Z¶ d dl·m¸Z¸  e‰¦   «         r%d dl¹mºZºm»Z»m¼Z¼m½Z½m¾Z¾m¿Z¿mÀZÀ d dlÁmÂZÂ d dlÃmÄZÄ d dlÅmÆZÆ neÇZºeÇZÆdZÈdZÉdZÊdZËdZÌdZÍd d!d"d#d$d%œZÎd d&d'd(d)œZÏi d*d+“d,d-“d.d/“d0d/“d1d/“d2d3“d4d5“d6d7“d8d7“d9d7“d:d5“d;d<“d=d>“d?d “d@d“dAd7“dBd“d dCdDd/d7d7dEdFœ¥ZÐ ež¦   «         rPd dlÑZÑd dGlÒmÓZÓ ddHlÔmÕZÕ eÑj5        jÖ        duZ×eÑj5        jØ        duZÙ eÚeÑj5        dId¦  «        duZÛ eÚeÑdJd¦  «        duZÜndKZ×dKZÙdKZÛdKZÜ e7jÝ        eÞ¦  «        Zß�d‡dL„Zà�dˆdM„Zá eàdNdK¬O¦  «        Zâ eàdPd/¬O¦  «        Zã eàdQdK¬O¦  «        Zä eàdRdK¬O¦  «        Zå eàdSd/¬O¦  «        Zæ eàdTdK¬O¦  «        Zç eàdUd/¬O¦  «        Zè eàdVd/¬O¦  «        ZédW„ ZêdX„ ZëdY„ ZìdZ„ Zíd[„ Zîd\„ Zïd]„ Zðd^„ Zñd_„ Zòd`„ Zóda„ Zôdb„ Zõdc„ Zödd„ Z÷de„ Zødf„ Zùdg„ Zúdh„ Zûdi„ Züdj„ ZýeEfdkeþfdl„ZÿeIfdkeþfdm„�Z eFfdkeþfdn„�Z�d‰dkeþfdp„�Zdq„ �Zdr„ �Zds„ �Zdt„ �Zdu„ �Zdv„ �Zdw„ �Z	dx„ �Z
dy„ �Zdz„ �Zd{„ �Zd|eþfd}„�Zd|eþfd~„�Zd„ �Zd€„ �Zd�„ �Zd‚„ �Zdƒ„ �Zd„„ �Zd…„ �Zd†„ �Zd|eþf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”„ �Z%d•„ �Z&d–„ �Z'd—�e(fd˜„�Z)d™„ �Z*dš„ �Z+d›„ �Z,dœ„ �Z-d�„ �Z.dž„ �Z/dŸ„ �Z0d „ �Z1d¡„ �Z2d¢„ �Z3d£„ �Z4d¤„ �Z5d¥„ �Z6d¦„ �Z7 ež¦   «         �r¿d dlÑZÑd§e�j8        v rKe�j8        d§         �Z9	  e�j:        �e9¦  «        �Z;n'# �e<$ r�Z= �e<d¨�e9› d©�e=› �¦  «        �e=‚d�Z=�[=ww xY wdªe�j8        v �re�j8        dª         �Z>�e>d«k    r+eÑjØ        � ?                    ¦   «         s �e@d¬�e>› d­�¦  «        ‚�e>dIk    r e«¦   «         s �e@d¬�e>› d®�¦  «        ‚�e>dJk    r e¥¦   «         s �e@d¬�e>› d¯�¦  «        ‚�e>d°k    r e£¦   «         s �e@d¬�e>› d±�¦  «        ‚�e>d²k    r e¢¦   «         s �e@d¬�e>› d³�¦  «        ‚	  eÑ�jA        �e>¦  «        �Z;n€# �eB$ r�Z= �eBd´�e>› �¦  «        �e=‚d�Z=�[=ww xY weÑjØ        � ?                    ¦   «         rd«�Z>n? e¥¦   «         rdJ�Z>n1 e£¦   «         rd°�Z>n# e¢¦   «         rd²�Z>n e«¦   «         rdI�Z>ndµ�Z>nd�Z>d¶„ �ZCd·„ �ZDd¸„ �ZEd¹„ �ZFdº„ �ZGd»„ �ZH�dŠd½�eIfd¾„�ZJ�d‹d½�eIfdÀ„�ZK�dˆd¿dÁœd½�eIfdÂ„�ZLdÃ„ �ZMdÄ„ �ZNdÅ„ �ZOdÆ„ �ZPdÇ„ �ZQdÈ„ �ZRdÉ„ �ZSdÊ„ �ZTdË„ �ZUdÌ„ �ZVdÍ„ �ZWdÎ„ �ZXdÏ„ �ZYdÐ„ �ZZdÑ„ �Z[dÒ„ �Z\dÓ„ �Z]dÔ„ �Z^dÕ„ �Z_dÖ„ �Z`d×„ �ZadØ„ �ZbdÙ„ �ZcdÚ„ �ZddÛ„ �ZedÜ„ �ZfdÝ„ �ZgdÞ„ �Zhdß„ �Zidà„ �Zjdá„ �Zkdâ„ �Zldã„ �Zmdä„ �Zndå„ �Zodæ„ �Zpdç„ �Zqdè„ �Zrdé„ �Zsdê„ �Ztdë„ �Zudì„ �Zvdí„ �Zwdî„ �Zxdï„ �Zydð„ �Zzdñ„ �Z{dò„ �Z|dó„ �Z}dô„ �Z~dõ„ �Zdö„ �Z€d÷„ �Z�dø„ �Z‚dù„ �Zƒdú„ �Z„eGfdkeþfdû„�Z…dü„ �Z†�dˆdý„�Z‡dþe9dÿ�e(f�d „�Zˆ�d�e‰�eŠeþ�eIf                  dÿe�eŠeþ�eIf         ddf         f�d„�Z‹�d„ �ZŒ�d„ �Z��d„ �ZŽ�d„ �Z� G �d„ �d¦  «        �Z� G �d	„ �d
�e�¦  «        �Z‘ G �d„ �d�e�¦  «        �Z’ G �d„ �d¦  «        �Z“ej         �d„ ¦   «         �Z” G �d„ �d¦  «        �Z•ej         �deþe�j–        z  dÿed         f�d„¦   «         �Z— G �d„ �de�j˜        ¦  «        �Z™�d„ �Zšej         �d„ ¦   «         �Z›i �Zœ�d„ �Z��d„ �Zžd d�lŸ�ZŸ G �d„ �d¦  «        �Z �d„ �Z¡�dŒdÿ�e f�d„�Z¢�d�dÿ�e f�d„�Z£�d „ �Z¤�d!„ �Z¥�dŽ�d#„�Z¦�d$„ �Z§�d%„ �Z¨ G �d&„ �d'�e©¦  «        �Zª�d‡�d(�e‰eþ         f�d)„�Z« G �d*„ �d+¦  «        �Z¬�d��d-�e(�d.�eIdz  �d/eþdz  f�d0„�Z­�d��d-�e(�d.�eIdz  f�d1„�Z®�d2„ �Z¯�d‘�d3„�Z°�d4„ �Z±	 �d5„ �Z² G �d6„ �d7e�j³        ¦  «        �Z´ G �d8„ �d9eº¦  «        �Zµ�d:eþ�d;�eŠeþef         f�d<„�Z¶ ež¦   «         r¶eÑjØ        �j·        eÑ�j·        eÑ�j·        �d=œ�Z¸eÑjØ        �j¹        dd�d=œ�ZºeÑjØ        �j»        �d>„ �d?„ �d=œ�Z¼eÑjØ        �j½        dd�d=œ�Z¾eÑjØ        �j¿        d d �d=œ�ZÀeÑjØ        �jÁ        dd�d=œ�ZÂeÑjØ        �jÃ        d d �d=œ�ZÄeÑjØ        �jÅ        dd�d=œ�ZÆeÑjØ        dd�d=œ�ZÇn8�d@di�Z¸�d@di�Zº�d@�dA„ i�Z¼�d@di�Z¾�d@di�ZÂ�d@d i�ZÀ�d@d i�ZÄ�d@di�ZÆ�d@di�ZÇ e¢¦   «         r0eÑ�jÈ        �j·        �e¸d²<   eÑ�jÈ        �j»        �e¼d²<   eÑ�jÈ        �eÇd²<    e£¦   «         rBeÑ�jÉ        �j¹        �eºd°<   eÑ�jÉ        �j·        �e¸d°<   eÑ�jÉ        �j»        �e¼d°<   eÑ�jÉ        �eÇd°<    e¥¦   «         rBeÑ�jÊ        �j¹        �eºdJ<   eÑ�jÊ        �j·        �e¸dJ<   eÑ�jÊ        �j»        �e¼dJ<   eÑ�jÊ        �eÇdJ<    e«¦   «         rœeÑ�jË        �j¹        �eºdI<   eÑ�jË        �j·        �e¸dI<   eÑ�jË        �j»        �e¼dI<   eÑ�jË        �jÁ        �e¾dI<   eÑ�jË        �jÁ        �eÂdI<   eÑ�jË        �j¿        �eÀdI<   eÑ�jË        �jÃ        �eÄdI<   eÑ�jË        �jÅ        �eÆdI<   eÑ�jË        �eÇdI<    eª¦   «         r6eÑjØ        �j¹        �eº�dB<   eÑjØ        �j·        �e¸�dB<   eÑjØ        �j»        �e¼�dB<   �d:eþ�dC�e(f�dD„�ZÌ�d:eþf�dE„�ZÍ�d:eþf�dF„�ZÎ�d:eþf�dG„�ZÏ�d:eþf�dH„�ZÐ�d:eþf�dI„�ZÑ�d:eþf�dJ„�ZÒ�d:eþf�dK„�ZÓ�d:eþf�dL„�ZÔ ež¦   «         �r¨�dMe�j8        v �rœe�j8        �dM         �ZÕ e)�eÕ¦  «        � Ö                    ¦   «         s �e@�dN�eÕ› �¦  «        ‚e�j×        � Ø                    e�j×        � Ù                    �eÕ¦  «        ¦  «        \  �ZÚ�Z;e�j×        � Û                    �eÚ¦  «         	 �eÕd�eÕ� Ü                    �dO¦  «        …         �ZÝn$# �e@$ r�Z= �e@�dP�eÕ› �¦  «        �e=‚d�Z=�[=ww xY w e�j:        �eÝ¦  «        �ZÞ	 �eÞ�jß        �Zàn # �eá$ r�Z= �eá�dQ¦  «        �e=‚d�Z=�[=ww xY wdªe�j8        v r,�e>�eàk    r$�dR�e>› �dS�eà› �dT��Zâ�eâ�dUz  �Zâ �e@�eâ¦  «        ‚�eà�Z>�dV�eŠeþef         �dWeþf�dX„�Zã �eã�e¸�dY¦  «          �eã�eº�dZ¦  «          �eã�e¼�d[¦  «         �d\„ �Zä�e�d‡�d:eþf�d]„¦   «         �Zå�eæeþdz  �e(dz  �e(dz  f         �Zç�eæeþdz  d�e(z  �eæ�e(�e(f         z  f         �Zèe$dÿ�eçf�d^„¦   «         �Zé	 �dˆ�d_�eèdz  dÿ�eçf�d`„�Zê G �da„ �dbe�eèe,f         ¦  «        �Zë�dc„ �Zì�dd„ �Zí�de„ �Zî�df„ �Zï�dg„ �Zð�dh„ �Zñ�di„ �Zò�dj„ �Zó�d’�dkeþ�dl�e(�dm�eô�dn�eŠdz  f�do„�Zõ�d“�dp„�Zö�dq„ �Z÷�d”�ds„�Zø�dt„ �Zù�du„ �Zú G �dv„ �dw¦  «        �Zû G �dx„ �dye
�jü        ¦  «        �Zý �eþ¦   «         �Zÿ�eþeþ         �e �dz<   dÿe
�j        f�d{„�Z�d|e
�j        �d}eþdÿdf�d~„�Z e�j        �dg �d€¢¦  «        �Z G �d�„ �d‚¦  «        �Z�dˆ�d|e
�j        dz  dÿ�ef�dƒ„�Z�d„eþf�d…„�Ze �d†„ ¦   «         �Z	dS (•  é    N)ÚUserDictÚdefaultdict)ÚCallableÚ	GeneratorÚIterableÚIteratorÚMapping)Úcontextmanager)ÚMISSINGÚfields)ÚcacheÚwraps)ÚStringIO)ÚPath)ÚTYPE_CHECKINGÚAny)Úmock)Úpatch)Úcreate_repoÚdelete_repo)Úversion)Úloggingé   )ÚTrainer)Úis_clearml_availableÚis_optuna_availableÚis_ray_availableÚis_swanlab_availableÚis_tensorboard_availableÚis_trackio_availableÚis_wandb_available)Úis_deepspeed_available)oÚACCELERATE_MIN_VERSIONÚGGUF_MIN_VERSIONÚMISTRAL_COMMON_MIN_VERSIONÚSAFE_WEIGHTS_INDEX_NAMEÚTRITON_MIN_VERSIONÚWEIGHTS_INDEX_NAMEÚis_accelerate_availableÚis_apex_availableÚis_apollo_torch_availableÚis_aqlm_availableÚis_auto_round_availableÚis_av_availableÚis_bitsandbytes_availableÚis_bs4_availableÚis_causal_conv1d_availableÚis_compressed_tensors_availableÚis_cv2_availableÚis_cython_availableÚis_decord_availableÚis_detectron2_availableÚis_essentia_availableÚis_executorch_availableÚis_faiss_availableÚis_fbgemm_gpu_availableÚis_flash_attn_2_availableÚis_flash_attn_3_availableÚis_flash_attn_4_availableÚ#is_flash_linear_attention_availableÚis_flute_availableÚis_fouroversix_availableÚis_fp_quant_availableÚis_fsdp_availableÚis_g2p_en_availableÚis_galore_torch_availableÚis_gguf_availableÚis_gptqmodel_availableÚis_grokadamw_availableÚis_hadamard_availableÚis_hqq_availableÚ#is_huggingface_hub_greater_or_equalÚis_ipython_availableÚis_jinja_availableÚis_jmespath_availableÚis_jumanpp_availableÚis_kernels_availableÚis_levenshtein_availableÚis_librosa_availableÚis_liger_kernel_availableÚis_lomo_availableÚis_mistral_common_availableÚis_multipart_availableÚis_natten_availableÚis_nltk_availableÚis_numba_availableÚis_onnx_availableÚis_onnxruntime_availableÚis_onnxscript_availableÚis_openai_availableÚis_optimum_availableÚis_optimum_quanto_availableÚis_pandas_availableÚis_peft_availableÚis_peft_greater_or_equalÚis_phonemizer_availableÚis_pretty_midi_availableÚis_psutil_availableÚis_pyctcdecode_availableÚis_pytesseract_availableÚis_pytest_availableÚis_pytest_order_availableÚ!is_pytorch_quantization_availableÚis_quark_availableÚis_qutlass_availableÚis_rjieba_availableÚis_sacremoses_availableÚis_schedulefree_availableÚis_scipy_availableÚis_sentencepiece_availableÚis_seqio_availableÚis_serve_availableÚis_soundfile_availableÚis_spacy_availableÚis_speech_availableÚis_spqr_availableÚis_sudachi_availableÚis_sudachi_projection_availableÚis_tiktoken_availableÚis_timm_availableÚis_tokenizers_availableÚis_torch_availableÚ!is_torch_bf16_available_on_deviceÚ!is_torch_fp16_available_on_deviceÚis_torch_greater_or_equalÚis_torch_hpu_availableÚis_torch_mlu_availableÚis_torch_neuroncore_availableÚis_torch_npu_availableÚis_torch_optimi_availableÚis_torch_tensorrt_fx_availableÚis_torch_tf32_availableÚis_torch_tpu_availableÚis_torch_xla_availableÚis_torch_xpu_availableÚis_torchao_availableÚis_torchaudio_availableÚis_torchcodec_availableÚis_torchvision_availableÚis_triton_availableÚis_vision_availableÚis_vptq_availableÚ	strtobool)ÚAcceleratorStateÚPartialState)Úis_fp8_available)ÚModuleÚ_get_checkerÚ_get_continue_on_failureÚ_get_runnerÚ
_is_mockedÚ_patch_unwrap_mock_awareÚget_optionflags)Úskip)Úimport_path)ÚDoctestItemzjulien-c/bert-xsmall-dummyzjulien-c/dummy-unknownzjulien-c/dummy-diff-tokenizerÚ__DUMMY_TRANSFORMERS_USER__zhttps://hub-ci.huggingface.coÚ%hf_94wBhPGp6KrrTH3KDchhKpRxZwd6dmHWLLÚConfigÚForCausalLMÚForQuestionAnsweringÚForSequenceClassificationÚForTokenClassification)Úconfig_classÚcausal_lm_classÚquestion_answering_classÚsequence_classification_classÚtoken_classification_classÚ
TextConfigÚVisionConfigÚForConditionalGeneration)r¦   Útext_config_classÚvision_config_classÚconditional_generation_classÚ
batch_sizeé   Ú
seq_lengthé   Úis_trainingTÚuse_input_maskÚ
use_labelsÚ
vocab_sizeéc   Úhidden_sizeé    Únum_hidden_layersé   Únum_attention_headsÚnum_key_value_headsÚintermediate_sizeÚ
hidden_actÚgeluÚmax_position_embeddingsi   Úpad_token_idÚbos_token_idÚeos_token_idÚexpert_intervalé   é$   é   )Úmoe_layer_start_indexÚmoe_intermediate_sizeÚshared_expert_intermediate_sizeÚshared_expert_gateÚmoe_num_shared_expertsÚnum_experts_per_tokÚnum_experts)Ú	load_file)ÚPreTrainedModelÚxpuÚnpuFc                 ó´   — 	 t           j        |          }	 t          |¦  «        }n3# t          $ r t          d| › d�¦  «        ‚w xY w# t          $ r |}Y nw xY w|S )NúIf set, z must be yes or no.)ÚosÚenvironr‘   Ú
ValueErrorÚKeyError©ÚkeyÚdefaultÚvalueÚ_values       úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/testing_utils.pyÚparse_flag_from_envrâ      sŽ   € ðBÝ”
˜3”ˆð	BÝ˜uÑ%Ô%ˆFˆFøÝð 	Bð 	Bð 	BåÐ@¨Ð@Ð@Ð@ÑAÔAÐAð	Bøøøøõ ð ð ð àˆˆˆðøøøð €Mó   ‚A •% ¥AÁAÁAc                 ó´   — 	 t           j        |          }	 t          |¦  «        }n3# t          $ r t          d| › d�¦  «        ‚w xY w# t          $ r |}Y nw xY w|S )Nr×   z must be a int.)rØ   rÙ   ÚintrÚ   rÛ   rÜ   s       rá   Úparse_int_from_envræ   0  s†   € ð>Ý”
˜3”ˆð	>Ý˜‘Z”ZˆFˆFøÝð 	>ð 	>ð 	>ÝÐ<¨Ð<Ð<Ð<Ñ=Ô=Ð=ð	>øøøøõ ð ð ð Øˆˆˆðøøøð €Mrã   ÚRUN_SLOW)rÞ   Ú	RUN_FLAKYÚRUN_CUSTOM_TOKENIZERSÚHUGGINGFACE_CO_STAGINGÚRUN_PIPELINE_TESTSÚRUN_AGENT_TESTSÚRUN_TRAINING_TESTSÚRUN_TENSOR_PARALLEL_TESTSc                 ó¾   — t           s t          j        d¬¦  «        | ¦  «        S 	 ddl} |j                             ¦   «         | ¦  «        S # t          $ r | cY S w xY w)zž
    Decorator marking a test as a staging test.

    Those tests will run using the staging environment of huggingface.co instead of the real model hub.
    ztest is staging test©Úreasonr   N)Ú_run_stagingÚunittestrœ   ÚpytestÚmarkÚis_staging_testÚImportError©Ú	test_caserô   s     rá   rö   rö   G  s�   € õ ð <Ø;�xŒ}Ð$:Ð;Ñ;Ô;¸IÑFÔFÐFð	<ØˆMˆMˆMð 1�6”;×.Ò.Ñ0Ô0°Ñ;Ô;Ð;øõ ð 	ð 	ð 	ØÐÐÐð	øøøó   §A ÁAÁAc                 ó¾   — t           s t          j        d¬¦  «        | ¦  «        S 	 ddl} |j                             ¦   «         | ¦  «        S # t          $ r | cY S w xY w)z†
    Decorator marking a test as a pipeline test. If RUN_PIPELINE_TESTS is set to a falsy value, those tests will be
    skipped.
    ztest is pipeline testrð   r   N)Ú_run_pipeline_testsró   rœ   rô   rõ   Úis_pipeline_testr÷   rø   s     rá   rý   rý   X  ó�   € õ
 ð =Ø<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGð	=ØˆMˆMˆMð 2�6”;×/Ò/Ñ1Ô1°)Ñ<Ô<Ð<øõ ð 	ð 	ð 	ØÐÐÐð	øøørú   c                 ó¾   — t           s t          j        d¬¦  «        | ¦  «        S 	 ddl} |j                             ¦   «         | ¦  «        S # t          $ r | cY S w xY w)z|
    Decorator marking a test as an agent test. If RUN_TOOL_TESTS is set to a falsy value, those tests will be skipped.
    ztest is an agent testrð   r   N)Ú_run_agent_testsró   rœ   rô   rõ   Úis_agent_testr÷   rø   s     rá   r  r  h  s�   € õ ð :Ø<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGð	:ØˆMˆMˆMð /�6”;×,Ò,Ñ.Ô.¨yÑ9Ô9Ð9øõ ð 	ð 	ð 	ØÐÐÐð	øøørú   c                 ó¾   — t           s t          j        d¬¦  «        | ¦  «        S 	 ddl} |j                             ¦   «         | ¦  «        S # t          $ r | cY S w xY w)z†
    Decorator marking a test as a training test. If RUN_TRAINING_TESTS is set to a falsy value, those tests will be
    skipped.
    ztest is training testrð   r   N)Ú_run_training_testsró   rœ   rô   rõ   Úis_training_testr÷   rø   s     rá   r  r  w  rþ   rú   c                 ó¾   — t           s t          j        d¬¦  «        | ¦  «        S 	 ddl} |j                             ¦   «         | ¦  «        S # t          $ r | cY S w xY w)z”
    Decorator marking a test as a tensor parallel test. If RUN_TENSOR_PARALLEL_TESTS is set to a falsy value, those
    tests will be skipped.
    ztest is tensor parallel testrð   r   N)Ú_run_tensor_parallel_testsró   rœ   rô   rõ   Úis_tensor_parallel_testr÷   rø   s     rá   r  r  ‡  sƒ   € õ
 &ð DØC�xŒ}Ð$BÐCÑCÔCÀIÑNÔNÐNð	DØˆMˆMˆMð 9�6”;×6Ò6Ñ8Ô8¸ÑCÔCÐCøõ ð 	ð 	ð 	ØÐÐÐð	øøørú   c                 óH   —  t          j        t          d¦  «        | ¦  «        S )z™
    Decorator marking a test as slow.

    Slow tests are skipped by default. Set the RUN_SLOW environment variable to a truthy value to run them.

    ztest is slow)ró   Ú
skipUnlessÚ_run_slow_tests©rù   s    rá   Úslowr  —  s"   € ð @�8Ô�°Ñ?Ô?À	ÑJÔJÐJó    c                 ó>   —  t          j        d¬¦  «        | ¦  «        S )zÌ
    Decorator marking a test as too slow.

    Slow tests are skipped while they're in the process of being fixed. No test should stay tagged as "tooslow" as
    these will not be tested by the CI.

    ztest is too slowrð   )ró   rœ   r  s    rá   Útooslowr  ¡  s"   € ð 4�8Œ=Ð 2Ð3Ñ3Ô3°IÑ>Ô>Ð>r  c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                  óh   •— 	  ‰| i |¤ŽS # t           $ r}t          j        d|› �¦  «        ‚d }~ww xY w)Nz)Test skipped due to NotImplementedError: )ÚNotImplementedErrorró   ÚSkipTest)ÚargsÚkwargsÚeÚ	test_funcs      €rá   Úwrapperz(skip_if_not_implemented.<locals>.wrapper­  s\   ø€ ð	UØ�9˜dÐ- fÐ-Ð-Ð-øÝ"ð 	Uð 	Uð 	UÝÔ#Ð$SÐPQÐ$SÐ$SÑTÔTÐTøøøøð	Uøøøs   ƒ ‹
1•,¬1)Ú	functoolsr   )r  r  s   ` rá   Úskip_if_not_implementedr  ¬  s=   ø€ Ý„_�YÑÔðUð Uð Uð Uñ  ÔðUð €Nr  c                 óÎ   — t          | ¦  «        D ]T}|                     d¦  «        r=t          | |¦  «        }t          |¦  «        rt	          | |t          |¦  «        ¦  «         ŒU| S )zP
    Class decorator to apply @skip_if_not_implemented to all test methods.
    Útest_)ÚdirÚ
startswithÚgetattrÚcallableÚsetattrr  )ÚclsÚ	attr_nameÚattrs      rá   Úapply_skip_if_not_implementedr%  ·  sq   € õ ˜‘X”Xð Gð Gˆ	Ø×Ò Ñ(Ô(ð 	GÝ˜3 	Ñ*Ô*ˆDÝ˜‰~Œ~ð GÝ˜˜YÕ(?ÀÑ(EÔ(EÑFÔFÐFøØ€Jr  c                 óH   —  t          j        t          d¦  «        | ¦  «        S )zä
    Decorator marking a test for a custom tokenizer.

    Custom tokenizers require additional dependencies, and are skipped by default. Set the RUN_CUSTOM_TOKENIZERS
    environment variable to a truthy value to run them.
    ztest of custom tokenizers)ró   r	  Ú_run_custom_tokenizersr  s    rá   Úcustom_tokenizersr(  Ã  s%   € ð T�8ÔÕ5Ð7RÑSÔSÐT]Ñ^Ô^Ð^r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z}
    Decorator marking a test that requires BeautifulSoup4. These tests are skipped when BeautifulSoup4 isn't installed.
    ztest requires BeautifulSoup4)ró   r	  r0   r  s    rá   Úrequire_bs4r*  Í  s+   € ð S�8ÔÕ/Ñ1Ô1Ð3QÑRÔRÐS\Ñ]Ô]Ð]r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z—
    Decorator marking a test that requires GaLore. These tests are skipped when GaLore isn't installed.
    https://github.com/jiaweizzhao/GaLore
    ztest requires GaLore)ró   r	  rD   r  s    rá   Úrequire_galore_torchr,  Ô  ó+   € ð
 T�8ÔÕ8Ñ:Ô:Ð<RÑSÔSÐT]Ñ^Ô^Ð^r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z–
    Decorator marking a test that requires GaLore. These tests are skipped when APOLLO isn't installed.
    https://github.com/zhuhanqing/APOLLO
    ztest requires APOLLO)ró   r	  r+   r  s    rá   Úrequire_apollo_torchr/  Ü  r-  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z¢
    Decorator marking a test that requires torch-optimi. These tests are skipped when torch-optimi isn't installed.
    https://github.com/jxnl/torch-optimi
    ztest requires torch-optimi)ró   r	  r„   r  s    rá   Úrequire_torch_optimir1  ä  ó+   € ð
 Z�8ÔÕ8Ñ:Ô:Ð<XÑYÔYÐZcÑdÔdÐdr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z•
    Decorator marking a test that requires LOMO. These tests are skipped when LOMO-optim isn't installed.
    https://github.com/OpenLMLab/LOMO
    ztest requires LOMO)ró   r	  rS   r  s    rá   Úrequire_lomor4  ì  s*   € ð
 J�8ÔÕ0Ñ2Ô2Ð4HÑIÔIÈ)ÑTÔTÐTr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zs
    Decorator marking a test that requires GrokAdamW. These tests are skipped when GrokAdamW isn't installed.
    ztest requires GrokAdamW)ró   r	  rG   r  s    rá   Úrequire_grokadamwr6  ô  ó+   € ð T�8ÔÕ5Ñ7Ô7Ð9RÑSÔSÐT]Ñ^Ô^Ð^r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z¯
    Decorator marking a test that requires schedulefree. These tests are skipped when schedulefree isn't installed.
    https://github.com/facebookresearch/schedule_free
    ztest requires schedulefree)ró   r	  rn   r  s    rá   Úrequire_schedulefreer9  û  r2  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zs
    Decorator marking a test that requires OpenCV.

    These tests are skipped when OpenCV isn't installed.

    ztest requires OpenCV)ró   r	  r3   r  s    rá   Úrequire_cv2r;    s*   € ð K�8ÔÕ/Ñ1Ô1Ð3IÑJÔJÈ9ÑUÔUÐUr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z}
    Decorator marking a test that requires Levenshtein.

    These tests are skipped when Levenshtein isn't installed.

    ztest requires Levenshtein)ró   r	  rP   r  s    rá   Úrequire_levenshteinr=    ó+   € ð X�8ÔÕ7Ñ9Ô9Ð;VÑWÔWÐXaÑbÔbÐbr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zo
    Decorator marking a test that requires NLTK.

    These tests are skipped when NLTK isn't installed.

    ztest requires NLTK)ró   r	  rW   r  s    rá   Úrequire_nltkr@    ó*   € ð J�8ÔÕ0Ñ2Ô2Ð4HÑIÔIÈ)ÑTÔTÐTr  Úmin_versionc                 ó^   —  t          j        t          |¦  «        d|› �¦  «        | ¦  «        S )zu
    Decorator marking a test that requires accelerate. These tests are skipped when accelerate isn't installed.
    z$test requires accelerate version >= )ró   r	  r)   ©rù   rB  s     rá   Úrequire_acceleraterE  !  s?   € ð�8ÔÝ Ñ,Ô,Ð.bÐU`Ð.bÐ.bñô àñô ð r  c                 ó   ‡ — ˆ fd„}|S )zm
    Decorator marking a test that requires triton. These tests are skipped when triton isn't installed.
    c                 ó`   •—  t          j        t          ‰¦  «        d‰› �¦  «        | ¦  «        S )Nz test requires triton version >= )ró   r	  rŽ   rD  s    €rá   Ú	decoratorz!require_triton.<locals>.decorator/  s:   ø€ Øv�xÔ"Õ#6°{Ñ#CÔ#CÐEuÐhsÐEuÐEuÑvÔvØñ
ô 
ð 	
r  © )rB  rH  s   ` rá   Úrequire_tritonrJ  *  s$   ø€ ð

ð 
ð 
ð 
ð 
ð
 Ðr  c                 ó^   —  t          j        t          |¦  «        d|› �¦  «        | ¦  «        S )zj
    Decorator marking a test that requires ggguf. These tests are skipped when gguf isn't installed.
    ztest requires gguf version >= )ró   r	  rE   rD  s     rá   Úrequire_ggufrL  7  s<   € ð o�8ÔÕ0°Ñ=Ô=Ð?mÐ`kÐ?mÐ?mÑnÔnØñô ð r  ú1.12.0c                 ó^   —  t          j        t          |¦  «        d|› �¦  «        | ¦  «        S )zi
    Decorator marking a test that requires fsdp. These tests are skipped when fsdp isn't installed.
    ztest requires torch version >= )ró   r	  rB   rD  s     rá   Úrequire_fsdprO  @  s<   € ð p�8ÔÕ0°Ñ=Ô=Ð?nÐalÐ?nÐ?nÑoÔoØñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zt
    Decorator marking a test that requires g2p_en. These tests are skipped when SentencePiece isn't installed.
    ztest requires g2p_en)ró   r	  rC   r  s    rá   Úrequire_g2p_enrQ  I  ó*   € ð N�8ÔÕ2Ñ4Ô4Ð6LÑMÔMÈiÑXÔXÐXr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zm
    Decorator marking a test that requires rjieba. These tests are skipped when rjieba isn't installed.
    ztest requires rjieba)ró   r	  rl   r  s    rá   Úrequire_rjiebarT  P  rR  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zk
    Decorator marking a test that requires jinja. These tests are skipped when jinja isn't installed.
    ztest requires jinja)ró   r	  rL   r  s    rá   Úrequire_jinjarV  W  ó*   € ð L�8ÔÕ1Ñ3Ô3Ð5JÑKÔKÈIÑVÔVÐVr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zq
    Decorator marking a test that requires jmespath. These tests are skipped when jmespath isn't installed.
    ztest requires jmespath)ró   r	  rM   r  s    rá   Úrequire_jmespathrY  ^  ó+   € ð R�8ÔÕ4Ñ6Ô6Ð8PÑQÔQÐR[Ñ\Ô\Ð\r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )Nztest requires ONNX)ró   r	  rY   r  s    rá   Úrequire_onnxr\  e  s'   € ØI�8ÔÕ0Ñ2Ô2Ð4HÑIÔIÈ)ÑTÔTÐTr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )Nztest requires ONNXScript)ró   r	  r[   r  s    rá   Úrequire_onnxscriptr^  i  ó(   € ØU�8ÔÕ6Ñ8Ô8Ð:TÑUÔUÐV_Ñ`Ô`Ð`r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )Nztest requires ONNX Runtime)ró   r	  rZ   r  s    rá   Úrequire_onnxruntimera  m  s(   € ØX�8ÔÕ7Ñ9Ô9Ð;WÑXÔXÐYbÑcÔcÐcr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )Nztest requires ExecuTorch)ró   r	  r8   r  s    rá   Úrequire_executorchrc  q  r_  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zo
    Decorator marking a test that requires Timm.

    These tests are skipped when Timm isn't installed.

    ztest requires Timm)ró   r	  rz   r  s    rá   Úrequire_timmre  u  rA  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zs
    Decorator marking a test that requires NATTEN.

    These tests are skipped when NATTEN isn't installed.

    ztest requires natten)ró   r	  rV   r  s    rá   Úrequire_nattenrg    ó*   € ð N�8ÔÕ2Ñ4Ô4Ð6LÑMÔMÈiÑXÔXÐXr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zu
    Decorator marking a test that requires PyTorch.

    These tests are skipped when PyTorch isn't installed.

    útest requires PyTorch)ró   r	  r|   r  s    rá   Úrequire_torchrk  ‰  s*   € ð N�8ÔÕ1Ñ3Ô3Ð5LÑMÔMÈiÑXÔXÐXr  r   c                 ó   ‡ — ˆ fd„}|S )z˜
    Decorator marking a test that requires PyTorch version >= `version`.

    These tests are skipped when PyTorch version is less than `version`.
    c                 ó`   •—  t          j        t          ‰¦  «        d‰› �¦  «        | ¦  «        S )Nz!test requires PyTorch version >= )ró   r	  r   ©rù   r   s    €rá   rH  z1require_torch_greater_or_equal.<locals>.decoratorš  s:   ø€ Øu�xÔ"Õ#<¸WÑ#EÔ#EÐGtÐkrÐGtÐGtÑuÔuØñ
ô 
ð 	
r  rI  ©r   rH  s   ` rá   Úrequire_torch_greater_or_equalrp  “  ó$   ø€ ð
ð 
ð 
ð 
ð 
ð
 Ðr  c                 ó   ‡ — ˆ fd„}|S )z¨
    Decorator marking a test that requires huggingface_hub version >= `version`.

    These tests are skipped when huggingface_hub version is less than `version`.
    c                 ó`   •—  t          j        t          ‰¦  «        d‰› �¦  «        | ¦  «        S )Nz)test requires huggingface_hub version >= )ró   r	  rJ   rn  s    €rá   rH  z;require_huggingface_hub_greater_or_equal.<locals>.decorator©  s@   ø€ ð
�xÔ"Ý/°Ñ8Ô8Ð:oÐfmÐ:oÐ:oñ
ô 
à
ñô ð 	r  rI  ro  s   ` rá   Ú(require_huggingface_hub_greater_or_equalrt  ¢  s$   ø€ ðð ð ð ð ð
 Ðr  c                 ó^   — t          d¬¦  «        } t          j        |d¦  «        | ¦  «        S )z…
    Decorator marking a test that requires Flash Attention.

    These tests are skipped when Flash Attention isn't installed.

    T©Úkernels_fallback_okztest requires Flash Attention)r;   ró   r	  ©rù   Úflash_attn_availables     rá   Úrequire_flash_attnrz  ±  s5   € õ 5ÈÐNÑNÔNÐØU�8ÔÐ3Ð5TÑUÔUÐV_Ñ`Ô`Ð`r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z�
    Decorator marking a test that requires the kernels library.

    These tests are skipped when the kernels library isn't installed.

    z!test requires the kernels library)ró   r	  rO   r  s    rá   Úrequire_kernelsr|  ¼  s+   € ð \�8ÔÕ3Ñ5Ô5Ð7ZÑ[Ô[Ð\eÑfÔfÐfr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zˆ
    Decorator marking a test that requires Flash Attention 3.

    These tests are skipped when Flash Attention 3 isn't installed.
    ztest requires Flash Attention 3)ró   r	  r<   r  s    rá   Úrequire_flash_attn_3r~  Æ  ó+   € ð _�8ÔÕ8Ñ:Ô:Ð<]Ñ^Ô^Ð_hÑiÔiÐir  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zˆ
    Decorator marking a test that requires Flash Attention 4.

    These tests are skipped when Flash Attention 4 isn't installed.
    ztest requires Flash Attention 4)ró   r	  r=   r  s    rá   Úrequire_flash_attn_4r�  Ï  r  r  c           	      ó®   — t          d¬¦  «        } t          j        t          |t	          ¦   «         t          ¦   «         f¦  «        d¦  «        | ¦  «        S )NTrv  z3test requires all mainline Flash Attention packages)r;   ró   r	  Úallr<   r=   rx  s     rá   Úrequire_all_flash_attnr„  Ø  sg   € Ý4ÈÐNÑNÔNÐð	�8ÔÝà$Ý)Ñ+Ô+Ý)Ñ+Ô+ðñ	
ô 	
ð 	>ñ	ô 	ð ñ	ô 	ð 	r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z’
    Decorator marking a test that requires Flash Linear Attention.

    These tests are skipped when Flash Linear Attention isn't installed.
    z&test requires `flash-linear-attention`)ró   r	  r>   r  s    rá   Úrequire_flash_linear_attentionr†  ç  s6   € ð�8ÔÝ+Ñ-Ô-Ø0ñô ð ñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z€
    Decorator marking a test that requires causal-conv1d.

    These tests are skipped when causal-conv1d isn't installed.
    ztest requires `causal-conv1d`)ró   r	  r1   r  s    rá   Úrequire_causal_conv1drˆ  ô  s6   € ð�8ÔÝ"Ñ$Ô$Ø'ñô ð ñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zo
    Decorator marking a test that requires PEFT.

    These tests are skipped when PEFT isn't installed.

    ztest requires PEFT)ró   r	  r`   r  s    rá   Úrequire_peftrŠ    rA  r  c                 ó   ‡ — ˆ fd„}|S )z’
    Decorator marking a test that requires PEFT version >= `version`.

    These tests are skipped when PEFT version is less than `version`.
    c                 ó`   •—  t          j        t          ‰¦  «        d‰› �¦  «        | ¦  «        S )Nztest requires PEFT version >= )ró   r	  ra   rn  s    €rá   rH  z0require_peft_greater_or_equal.<locals>.decorator  s:   ø€ Øq�xÔ"Õ#;¸GÑ#DÔ#DÐFpÐgnÐFpÐFpÑqÔqØñ
ô 
ð 	
r  rI  ro  s   ` rá   Úrequire_peft_greater_or_equalr�    rq  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z}
    Decorator marking a test that requires Torchvision.

    These tests are skipped when Torchvision isn't installed.

    ztest requires Torchvision)ró   r	  r�   r  s    rá   Úrequire_torchvisionr�    r>  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z{
    Decorator marking a test that requires Torchcodec.

    These tests are skipped when Torchcodec isn't installed.

    ztest requires Torchcodec)ró   r	  rŒ   r  s    rá   Úrequire_torchcodecr‘  $  s+   € ð V�8ÔÕ6Ñ8Ô8Ð:TÑUÔUÐV_Ñ`Ô`Ð`r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zu
    Decorator marking a test that requires torchaudio. These tests are skipped when torchaudio isn't installed.
    útest requires torchaudio)ró   r	  r‹   r  s    rá   Úrequire_torchaudior”  .  ó+   € ð V�8ÔÕ6Ñ8Ô8Ð:TÑUÔUÐV_Ñ`Ô`Ð`r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )ú{
    Decorator marking a test that requires SentencePiece. These tests are skipped when SentencePiece isn't installed.
    ztest requires SentencePiece)ró   r	  rp   r  s    rá   Úrequire_sentencepiecer˜  5  s+   € ð \�8ÔÕ9Ñ;Ô;Ð=ZÑ[Ô[Ð\eÑfÔfÐfr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zu
    Decorator marking a test that requires Sacremoses. These tests are skipped when Sacremoses isn't installed.
    ztest requires Sacremoses)ró   r	  rm   r  s    rá   Úrequire_sacremosesrš  <  r•  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )r—  ztest requires Seqio)ró   r	  rq   r  s    rá   Úrequire_seqiorœ  C  rW  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zs
    Decorator marking a test that requires Scipy. These tests are skipped when SentencePiece isn't installed.
    ztest requires Scipy)ró   r	  ro   r  s    rá   Úrequire_scipyrž  J  rW  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )u   
    Decorator marking a test that requires ðŸ¤— Tokenizers. These tests are skipped when ðŸ¤— Tokenizers isn't installed.
    ztest requires tokenizers)ró   r	  r{   r  s    rá   Úrequire_tokenizersr   Q  r•  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zm
    Decorator marking a test that requires pandas. These tests are skipped when pandas isn't installed.
    ztest requires pandas)ró   r	  r_   r  s    rá   Úrequire_pandasr¢  X  rR  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zw
    Decorator marking a test that requires PyTesseract. These tests are skipped when PyTesseract isn't installed.
    ztest requires PyTesseract)ró   r	  rf   r  s    rá   Úrequire_pytesseractr¤  _  ó+   € ð X�8ÔÕ7Ñ9Ô9Ð;VÑWÔWÐXaÑbÔbÐbr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z�
    Decorator marking a test that requires PyTorch Quantization Toolkit. These tests are skipped when PyTorch
    Quantization Toolkit isn't installed.
    z*test requires PyTorch Quantization Toolkit)ró   r	  ri   r  s    rá   Úrequire_pytorch_quantizationr§  f  s1   € ð
 r�8ÔÕ@ÑBÔBÐDpÑqÔqØñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z†
    Decorator marking a test that requires the vision dependencies. These tests are skipped when torchaudio isn't
    installed.
    ztest requires vision)ró   r	  r�   r  s    rá   Úrequire_visionr©  p  s*   € ð
 N�8ÔÕ2Ñ4Ô4Ð6LÑMÔMÈiÑXÔXÐXr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zk
    Decorator marking a test that requires SpaCy. These tests are skipped when SpaCy isn't installed.
    ztest requires spacy)ró   r	  rt   r  s    rá   Úrequire_spacyr«  x  rW  r  c                 óÔ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S ddl} t          j        |j                             ¦   «         dk    d¦  «        | ¦  «        S )a  
    Decorator marking a test that requires a multi-GPU CUDA setup (in PyTorch). These tests are skipped on a machine without
    multiple CUDA GPUs.

    To run *only* the multi_gpu tests, assuming all test names contain multi_gpu: $ pytest -sv ./tests -k "multi_gpu"
    rj  rð   r   Nr   z test requires multiple CUDA GPUs©r|   ró   rœ   Útorchr	  ÚcudaÚdevice_count©rù   r®  s     rá   Úrequire_torch_multi_gpur²    sl   € õ ÑÔð HØ<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGà€L€L€Làa�8Ô˜uœz×6Ò6Ñ8Ô8¸1Ò<Ð>`ÑaÔaÐbkÑlÔlÐlr  c                 óÂ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t	          t
          ¦  «        dk    d¦  «        | ¦  «        S )a(  
    Decorator marking a test that requires a multi-accelerator (in PyTorch). These tests are skipped on a machine
    without multiple accelerators. To run *only* the multi_accelerator tests, assuming all test names contain
    multi_accelerator: $ pytest -sv ./tests -k "multi_accelerator"
    rj  rð   r   z#test requires multiple accelerators©r|   ró   rœ   r	  Úbackend_device_countÚtorch_devicer  s    rá   Úrequire_torch_multi_acceleratorr·  Ž  sd   € õ ÑÔð HØ<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGàm�8ÔÕ3µLÑAÔAÀAÒEÐGlÑmÔmØñô ð r  Únc                 ó   ‡ — ˆ fd„}|S )zNDecorator marking a test that requires at least `n` accelerators (in PyTorch).c                 óÌ   •— t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t	          t
          ¦  «        ‰k    d‰› d�¦  «        | ¦  «        S )Nrj  rð   ztest requires >= z acceleratorsr´  )rù   r¸  s    €rá   rH  z/require_torch_n_accelerators.<locals>.decoratorŸ  so   ø€ Ý!Ñ#Ô#ð 	LØ@•8”=Ð(?Ð@Ñ@Ô@ÀÑKÔKÐKØq�xÔ"Õ#7½Ñ#EÔ#EÈÒ#JÐLpÐ`aÐLpÐLpÐLpÑqÔqØñ
ô 
ð 	
r  rI  )r¸  rH  s   ` rá   Úrequire_torch_n_acceleratorsr»  œ  s$   ø€ ð
ð 
ð 
ð 
ð 
ð Ðr  c                 óÔ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S ddl} t          j        |j                             ¦   «         dk     d¦  «        | ¦  «        S )zO
    Decorator marking a test that requires 0 or 1 GPU setup (in PyTorch).
    rj  rð   r   Nr½   ztest requires 0 or 1 GPUr­  r±  s     rá   Úrequire_torch_non_multi_gpur½  ©  sl   € õ ÑÔð HØ<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGà€L€L€LàY�8Ô˜uœz×6Ò6Ñ8Ô8¸1Ò<Ð>XÑYÔYÐZcÑdÔdÐdr  c                 óÂ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t	          t
          ¦  «        dk     d¦  «        | ¦  «        S )zW
    Decorator marking a test that requires 0 or 1 accelerator setup (in PyTorch).
    rj  rð   r½   z test requires 0 or 1 acceleratorr´  r  s    rá   Ú#require_torch_non_multi_acceleratorr¿  µ  s^   € õ ÑÔð HØ<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGàj�8ÔÕ3µLÑAÔAÀAÒEÐGiÑjÔjÐktÑuÔuÐur  c                 óÔ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S ddl} t          j        |j                             ¦   «         dk     d¦  «        | ¦  «        S )zT
    Decorator marking a test that requires 0 or 1 or 2 GPU setup (in PyTorch).
    rj  rð   r   Né   ztest requires 0 or 1 or 2 GPUsr­  r±  s     rá   Úrequire_torch_up_to_2_gpusrÂ  ¿  sl   € õ ÑÔð HØ<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGà€L€L€Là_�8Ô˜uœz×6Ò6Ñ8Ô8¸1Ò<Ð>^Ñ_Ô_Ð`iÑjÔjÐjr  c                 óÂ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t	          t
          ¦  «        dk     d¦  «        | ¦  «        S )z\
    Decorator marking a test that requires 0 or 1 or 2 accelerator setup (in PyTorch).
    rj  rð   rÁ  z&test requires 0 or 1 or 2 acceleratorsr´  r  s    rá   Ú"require_torch_up_to_2_acceleratorsrÄ  Ë  sd   € õ ÑÔð HØ<�xŒ}Ð$;Ð<Ñ<Ô<¸YÑGÔGÐGàp�8ÔÕ3µLÑAÔAÀAÒEÐGoÑpÔpØñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zG
    Decorator marking a test that requires TorchXLA (in PyTorch).
    ztest requires TorchXLA)ró   r	  rˆ   r  s    rá   Úrequire_torch_xlarÆ  ×  s+   € ð S�8ÔÕ5Ñ7Ô7Ð9QÑRÔRÐS\Ñ]Ô]Ð]r  c                 óZ   —  t          j        t          d¬¦  «        d¦  «        | ¦  «        S )zI
    Decorator marking a test that requires NeuronCore (in PyTorch).
    F)Úcheck_devicez test requires PyTorch NeuronCore)ró   r	  r‚   r  s    rá   Úrequire_torch_neuroncorerÉ  Þ  s6   € ð v�8ÔÕ<È%ÐPÑPÔPÐRtÑuÔuØñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zP
    Decorator marking a test that requires TPU (in PyTorch via torch_tpu).
    ztest requires PyTorch TPU)ró   r	  r‡   r  s    rá   Úrequire_torch_tpurË  ç  ó+   € ð V�8ÔÕ5Ñ7Ô7Ð9TÑUÔUÐV_Ñ`Ô`Ð`r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zB
    Decorator marking a test that requires NPU (in PyTorch).
    útest requires PyTorch NPU)ró   r	  rƒ   r  s    rá   Úrequire_torch_npurÏ  î  rÌ  r  c                 óÖ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t          j                             ¦   «         dk    d¦  «        | ¦  «        S )a  
    Decorator marking a test that requires a multi-NPU setup (in PyTorch). These tests are skipped on a machine without
    multiple NPUs.

    To run *only* the multi_npu tests, assuming all test names contain multi_npu: $ pytest -sv ./tests -k "multi_npu"
    rÎ  rð   r   ztest requires multiple NPUs)rƒ   ró   rœ   r	  r®  rÕ   r°  r  s    rá   Úrequire_torch_multi_npurÑ  õ  óc   € õ "Ñ#Ô#ð LØ@�xŒ}Ð$?Ð@Ñ@Ô@ÀÑKÔKÐKà[�8Ô�uœy×5Ò5Ñ7Ô7¸!Ò;Ð=ZÑ[Ô[Ð\eÑfÔfÐfr  c                 óP   —  t          j        t          dk    d¦  «        | ¦  «        S )zB
    Decorator marking a test that should be skipped for HPU.
    Úhpuztest requires a non-HPU©ró   r	  r¶  r  s    rá   Úrequire_non_hpurÖ    ó)   € ð Q�8Ô�|¨uÒ4Ð6OÑPÔPÐQZÑ[Ô[Ð[r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z‚
    Decorator marking a test that requires XPU (in PyTorch).

    These tests are skipped when XPU backend is not available.
    ztest requires XPU device)ró   r	  r‰   r  s    rá   Úrequire_torch_xpurÙ  	  s+   € ð U�8ÔÕ5Ñ7Ô7Ð9SÑTÔTÐU^Ñ_Ô_Ð_r  c                 óP   —  t          j        t          dk    d¦  «        | ¦  «        S )zB
    Decorator marking a test that should be skipped for XPU.
    rÔ   ztest requires a non-XPUrÕ  r  s    rá   Úrequire_non_xpurÛ    r×  r  c                 óÖ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t          j                             ¦   «         dk    d¦  «        | ¦  «        S )a  
    Decorator marking a test that requires a multi-XPU setup (in PyTorch). These tests are skipped on a machine without
    multiple XPUs.

    To run *only* the multi_xpu tests, assuming all test names contain multi_xpu: $ pytest -sv ./tests -k "multi_xpu"
    ztest requires PyTorch XPUrð   r   ztest requires multiple XPUs)r‰   ró   rœ   r	  r®  rÔ   r°  r  s    rá   Úrequire_torch_multi_xpurÝ    rÒ  r  c                 óÖ   — t          ¦   «         s t          j        d¬¦  «        | ¦  «        S  t          j        t          j                             ¦   «         dk    d¦  «        | ¦  «        S )a  
    Decorator marking a test that requires a multi-HPU setup (in PyTorch). These tests are skipped on a machine without
    multiple HPUs.

    To run *only* the multi_hpu tests, assuming all test names contain multi_hpu: $ pytest -sv ./tests -k "multi_hpu"
    ztest requires PyTorch HPUrð   r   ztest requires multiple HPUs)r€   ró   rœ   r	  r®  rÔ  r°  r  s    rá   Úrequire_torch_multi_hpurß  &  rÒ  r  ÚTRANSFORMERS_TEST_BACKENDz.Failed to import `TRANSFORMERS_TEST_BACKEND` 'zf'! This should be the name of an installed module. The original error (look up to see its traceback):
ÚTRANSFORMERS_TEST_DEVICEr¯  zTRANSFORMERS_TEST_DEVICE=zH, but CUDA is unavailable. Please double-check your testing environment.zG, but XPU is unavailable. Please double-check your testing environment.zG, but NPU is unavailable. Please double-check your testing environment.ÚmluzG, but MLU is unavailable. Please double-check your testing environment.rÔ  zG, but HPU is unavailable. Please double-check your testing environment.zUUnknown testing device specified by environment variable `TRANSFORMERS_TEST_DEVICE`: Úcpuc                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z.Decorator marking a test that requires torchaoztest requires torchao)ró   r	  rŠ   r  s    rá   Úrequire_torchaorå  o  s(   € àO�8ÔÕ3Ñ5Ô5Ð7NÑOÔOÐPYÑZÔZÐZr  c                 ó   ‡ — ˆ fd„}|S )Nc                 ó   •— t          ¦   «         o]t          j        t          j        t          j                             d¦  «        ¦  «        j        ¦  «        t          j        ‰¦  «        k    } t          j        |d‰› d�¦  «        | ¦  «        S )NÚtorchaoz4Test requires torchao with the version greater than ú.)rŠ   r   ÚparseÚ	importlibÚmetadataÚbase_versionró   r	  )rù   Úcorrect_torchao_versionÚtorchao_versions     €rá   rH  z;require_torchao_version_greater_or_equal.<locals>.decoratoru  s�   ø€ Ý"6Ñ"8Ô"8ð #,½W¼]ÝŒM�)Ô,×4Ò4°YÑ?Ô?Ñ@Ô@ÔMñ>
ô >
åŒ]˜?Ñ+Ô+ò>,Ðð
�xÔ"Ø#Ð%nÐ\kÐ%nÐ%nÐ%nñ
ô 
à
ñô ð 	r  rI  )rï  rH  s   ` rá   Ú(require_torchao_version_greater_or_equalrð  t  s$   ø€ ðð ð ð ð ð Ðr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z8Decorator marking a test that requires Torch-TensorRT FXztest requires Torch-TensorRT FX)ró   r	  r…   r  s    rá   Úrequire_torch_tensorrt_fxrò  €  s(   € àc�8ÔÕ=Ñ?Ô?ÐAbÑcÔcÐdmÑnÔnÐnr  c                 óP   —  t          j        t          dk    d¦  «        | ¦  «        S )ú8Decorator marking a test that requires CUDA and PyTorch.r¯  ztest requires CUDArÕ  r  s    rá   Úrequire_torch_gpurõ  …  s%   € àL�8Ô�|¨vÒ5Ð7KÑLÔLÈYÑWÔWÐWr  c                 óP   —  t          j        t          dk    d¦  «        | ¦  «        S )rô  Úmpsztest requires MPSrÕ  r  s    rá   Úrequire_torch_mpsrø  Š  s%   € àJ�8Ô�|¨uÒ4Ð6IÑJÔJÈ9ÑUÔUÐUr  c                 ó^   —  t          j        t          dk    ot          d¦  «        | ¦  «        S )zDDecorator marking a test that requires a ROCm (AMD) GPU and PyTorch.r¯  ztest requires a ROCm (AMD) GPU)ró   r	  r¶  ÚIS_ROCM_SYSTEMr  s    rá   Úrequire_rocmrû  �  s+   € àk�8Ô�|¨vÒ5ÐH½.ÐJjÑkÔkÐluÑvÔvÐvr  éP   Úmemoryc                 óª   — t          ¦   «         s| S ddl} t          j        |                     ¦   «         j        dz  |k    d|› d�¦  «        | ¦  «        S )zWDecorator marking a test that requires a CPU RAM with more than `memory` GiB of memory.r   Né   @z'test requires a machine with more than z GiB of CPU RAM memory)rd   Úpsutilró   r	  Úvirtual_memoryÚtotal)rù   rý  r   s      rá   Úrequire_large_cpu_ramr  ”  sq   € åÑ Ô ð ØÐà€M€M€Mð�8ÔØ×ÒÑÔÔ%¨Ñ/°&Ò8ØP°&ÐPÐPÐPñô ð ñô ð r  é   c                 óò   — t           dk    r" t          j        d|› d�¬¦  «        | ¦  «        S  t          j        t          j                             d¦  «        j        dz  |k    d|› d�¦  «        | ¦  «        S )zXDecorator marking a test that requires a CUDA GPU with more than `memory` GiB of memory.r¯  z(test requires a CUDA GPU with more than ú GiB of memoryrð   r   rÿ  z#test requires a GPU with more than )r¶  ró   rœ   r	  r®  r¯  Úget_device_propertiesÚtotal_memory)rù   rý  s     rá   Úrequire_torch_large_gpur	  ¡  s�   € å�vÒÐØf�xŒ}Ð$eÈvÐ$eÐ$eÐ$eÐfÑfÔfÐgpÑqÔqÐqð�8ÔÝŒ
×(Ò(¨Ñ+Ô+Ô8¸7ÑBÀVÒKØD¨fÐDÐDÐDñô ð ñô ð r  )rý  c                ó,   ‡— ˆfd„}| €|n
 || ¦  «        S )z\Decorator marking a test that requires an accelerator with more than `memory` GiB of memory.c                 ó  •— t           dvr! t          j        d‰› d�¦  «        | ¦  «        S t          t          t           ¦  «        } t          j        |                     d¦  «        j        dz  ‰k    d‰› d�¦  «        | ¦  «        S )N)r¯  rÔ   z*test requires a GPU or XPU with more than r  r   rÿ  )r¶  ró   rœ   r  r®  r	  r  r  )ÚtcÚtorch_accelrý  s     €rá   Úmemory_decoratorz9require_torch_large_accelerator.<locals>.memory_decorator¯  s˜   ø€ Ý˜Ð.Ð.Øe•8”=Ð!dÈfÐ!dÐ!dÐ!dÑeÔeÐfhÑiÔiÐiå�e¥\Ñ2Ô2ˆð
�xÔ"Ø×-Ò-¨aÑ0Ô0Ô=ÀÑGÈ&ÒPØO¸ÐOÐOÐOñ
ô 
ð ñô ð 	r  rI  )rù   rý  r  s    ` rá   Úrequire_torch_large_acceleratorr  ¬  s;   ø€ ðð ð ð ð ð  )Ð0ÐÐÐ6FÐ6FÀyÑ6QÔ6QÐQr  c                 ób   —  t          j        t          duo
t          dk    d¦  «        | ¦  «        S )zMDecorator marking a test that requires an accessible accelerator and PyTorch.Nrã  ztest requires acceleratorrÕ  r  s    rá   Úrequire_torch_acceleratorr  ¼  s6   € ào�8Ô�|°4Ð7ÐQ½LÈEÒ<QÐSnÑoÔoØñô ð r  c                 ób   —  t          j        t          t          ¦  «        d¦  «        | ¦  «        S )zBDecorator marking a test that requires a device that supports fp16z&test requires device with fp16 support)ró   r	  r~   r¶  r  s    rá   Úrequire_torch_fp16r  Ã  ó6   € ð�8ÔÝ)­,Ñ7Ô7Ð9añô àñô ð r  c                 ór   —  t          j        t          ¦   «         ot          ¦   «         d¦  «        | ¦  «        S )z7Decorator marking a test that requires supports for fp8ztest requires fp8 support)ró   r	  r)   r”   r  s    rá   Úrequire_fp8r  Ê  s:   € àm�8ÔÕ6Ñ8Ô8ÐOÕ=MÑ=OÔ=OÐQlÑmÔmØñô ð r  c                 ó¶   — ddl }|j                             ¦   «         sd„ S |j                             ¦   «         }t	          j        || |fk     d| › d|› �¦  «        S )u%  Decorator: when running on CUDA, skip if device capability is below the given
    threshold. On non-CUDA backends this is a no-op â€” pair with :func:`require_torch_gpu`
    if the test is CUDA-only, or leave alone if it should also run on other backends
    (which won't be capability-gated).r   Nc                 ó   — | S ©NrI  r  s    rá   ú<lambda>z2require_cuda_capability_at_least.<locals>.<lambda>Ù  s   €  € r  zRequires CUDA capability >= ré  )r®  r¯  Úis_availableÚget_device_capabilityró   ÚskipIf)ÚmajorÚminorr®  Ú
capabilitys       rá   Ú require_cuda_capability_at_leastr!  Ñ  sm   € ð
 €L€L€LàŒ:×"Ò"Ñ$Ô$ð +Ø*Ð*Ð*Ø”×1Ò1Ñ3Ô3€JÝŒ?˜:¨°¨Ò6Ð8fÐW\Ð8fÐ8fÐ_dÐ8fÐ8fÑgÔgÐgr  c                 ób   —  t          j        t          t          ¦  «        d¦  «        | ¦  «        S )zBDecorator marking a test that requires a device that supports bf16z&test requires device with bf16 support)ró   r	  r}   r¶  r  s    rá   Úrequire_torch_bf16r#  Þ  r  r  c                 ó<   ‡ — t          ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                  óê   •— t          ¦   «         r]t          j        ¦   «         }	 t          j        d¦  «          ‰| i |¤Žt          j        |¦  «         S # t          j        |¦  «         w xY w ‰| i |¤ŽS )NT)r‰   r®  Ú$are_deterministic_algorithms_enabledÚuse_deterministic_algorithms)r  r  Úoriginal_staterù   s      €rá   r  z.require_deterministic_for_xpu.<locals>.wrapperæ  sˆ   ø€ å!Ñ#Ô#ð 	.Ý"ÔGÑIÔIˆNðCÝÔ2°4Ñ8Ô8Ð8Ø �y $Ð1¨&Ð1Ð1åÔ2°>ÑBÔBÐBÐBø•Ô2°>ÑBÔBÐBÐBøøøà�9˜dÐ- fÐ-Ð-Ð-s   ¤A ÁA*)r   )rù   r  s   ` rá   Úrequire_deterministic_for_xpur)  å  s6   ø€ Ý
ˆ9ÑÔð	.ð 	.ð 	.ð 	.ñ Ôð	.ð €Nr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z[Decorator marking a test that requires Ampere or a newer GPU arch, cuda>=11 and torch>=1.7.zAtest requires Ampere or a newer GPU arch, cuda>=11 and torch>=1.7)ró   r	  r†   r  s    rá   Úrequire_torch_tf32r+  õ  s4   € ð�8ÔÝÑ!Ô!Ð#fñô àñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z2Decorator marking a test that requires detectron2.ztest requires `detectron2`)ró   r	  r6   r  s    rá   Úrequire_detectron2r-  ü  s(   € àW�8ÔÕ6Ñ8Ô8Ð:VÑWÔWÐXaÑbÔbÐbr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z-Decorator marking a test that requires faiss.ztest requires `faiss`)ró   r	  r9   r  s    rá   Úrequire_faissr/    s'   € àM�8ÔÕ1Ñ3Ô3Ð5LÑMÔMÈiÑXÔXÐXr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zeDecorator marking a test that requires IPython. These tests are skipped when IPython isn't installed.ztest requires `IPython`)ró   r	  rK   r  s    rá   Úrequire_ipythonr1    s(   € àQ�8ÔÕ3Ñ5Ô5Ð7PÑQÔQÐR[Ñ\Ô\Ð\r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zs
    Decorator marking a test that requires optuna.

    These tests are skipped when optuna isn't installed.

    ztest requires optuna)ró   r	  r   r  s    rá   Úrequire_optunar3    rh  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zw
    Decorator marking a test that requires Ray/tune.

    These tests are skipped when Ray/tune isn't installed.

    ztest requires Ray/tune)ró   r	  r   r  s    rá   Úrequire_rayr5    s*   € ð M�8ÔÕ/Ñ1Ô1Ð3KÑLÔLÈYÑWÔWÐWr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zu
    Decorator marking a test that requires swanlab.

    These tests are skipped when swanlab isn't installed.

    ztest requires swanlab)ró   r	  r   r  s    rá   Úrequire_swanlabr7    ó+   € ð P�8ÔÕ3Ñ5Ô5Ð7NÑOÔOÐPYÑZÔZÐZr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zu
    Decorator marking a test that requires trackio.

    These tests are skipped when trackio isn't installed.

    ztest requires trackio)ró   r	  r    r  s    rá   Úrequire_trackior:  )  r8  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zq
    Decorator marking a test that requires wandb.

    These tests are skipped when wandb isn't installed.

    ztest requires wandb)ró   r	  r!   r  s    rá   Úrequire_wandbr<  3  s*   € ð L�8ÔÕ1Ñ3Ô3Ð5JÑKÔKÈIÑVÔVÐVr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zp
    Decorator marking a test requires clearml.

    These tests are skipped when clearml isn't installed.

    ztest requires clearml)ró   r	  r   r  s    rá   Úrequire_clearmlr>  =  r8  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z:
    Decorator marking a test that requires deepspeed
    ztest requires deepspeed)ró   r	  r"   r  s    rá   Úrequire_deepspeedr@  G  r7  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z5
    Decorator marking a test that requires apex
    ztest requires apex)ró   r	  r*   r  s    rá   Úrequire_apexrB  N  ó*   € ð J�8ÔÕ0Ñ2Ô2Ð4HÑIÔIÈ)ÑTÔTÐTr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z5
    Decorator marking a test that requires aqlm
    ztest requires aqlm)ró   r	  r,   r  s    rá   Úrequire_aqlmrE  U  rC  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z5
    Decorator marking a test that requires vptq
    ztest requires vptq)ró   r	  r�   r  s    rá   Úrequire_vptqrG  \  rC  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z5
    Decorator marking a test that requires spqr
    ztest requires spqr)ró   r	  rv   r  s    rá   Úrequire_spqrrI  c  rC  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z3
    Decorator marking a test that requires av
    ztest requires av)ró   r	  r.   r  s    rá   Ú
require_avrK  j  s)   € ð F�8Ô�Ñ0Ô0Ð2DÑEÔEÀiÑPÔPÐPr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z7
    Decorator marking a test that requires decord
    ztest requires decord)ró   r	  r5   r  s    rá   Úrequire_decordrM  q  rR  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zš
    Decorator marking a test that requires the bitsandbytes library. Will be skipped when the library or its hard dependency torch is not installed.
    ztest requires bitsandbytes)ró   r	  r/   r  s    rá   Úrequire_bitsandbytesrO  x  ó+   € ð Z�8ÔÕ8Ñ:Ô:Ð<XÑYÔYÐZcÑdÔdÐdr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z*
    Decorator for optimum dependency
    ztest requires optimum)ró   r	  r]   r  s    rá   Úrequire_optimumrR    ó+   € ð P�8ÔÕ3Ñ5Ô5Ð7NÑOÔOÐPYÑZÔZÐZr  c                 óD   — t          j        t          ¦   «         d¦  «        S )z0
    Decorator for `tensorboard` dependency
    ztest requires tensorboard)ró   r	  r   r  s    rá   Úrequire_tensorboardrU  †  s   € õ ÔÕ7Ñ9Ô9Ð;VÑWÔWÐWr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z,
    Decorator for gptqmodel dependency
    ztest requires gptqmodel)ró   r	  rF   r  s    rá   Úrequire_gptqmodelrW  �  r7  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z&
    Decorator for hqq dependency
    ztest requires hqq)ró   r	  rI   r  s    rá   Úrequire_hqqrY  ”  s*   € ð H�8ÔÕ/Ñ1Ô1Ð3FÑGÔGÈ	ÑRÔRÐRr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z-
    Decorator for auto_round dependency
    ztest requires autoround)ró   r	  r-   r  s    rá   Úrequire_auto_roundr[  ›  s+   € ð U�8ÔÕ6Ñ8Ô8Ð:SÑTÔTÐU^Ñ_Ô_Ð_r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z)
    Decorator for quanto dependency
    ztest requires optimum-quanto)ró   r	  r^   r  s    rá   Úrequire_optimum_quantor]  ¢  s+   € ð ^�8ÔÕ:Ñ<Ô<Ð>\Ñ]Ô]Ð^gÑhÔhÐhr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z5
    Decorator for compressed_tensors dependency
    z test requires compressed_tensors)ró   r	  r2   r  s    rá   Úrequire_compressed_tensorsr_  ©  s+   € ð f�8ÔÕ>Ñ@Ô@ÐBdÑeÔeÐfoÑpÔpÐpr  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z-
    Decorator for fbgemm_gpu dependency
    ztest requires fbgemm-gpu)ró   r	  r:   r  s    rá   Úrequire_fbgemm_gpura  °  r•  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z(
    Decorator for quark dependency
    ztest requires quark)ró   r	  rj   r  s    rá   Úrequire_quarkrc  ·  rW  r  c                 ór   —  t          j        t          ¦   «         ot          ¦   «         d¦  «        | ¦  «        S )zC
    Decorator marking a test that requires higgs and hadamard
    z/test requires flute and fast_hadamard_transform)ró   r	  r?   rH   r  s    rá   Úrequire_flute_hadamardre  ¾  s@   € ð�8ÔÝÑÔÐ8Õ!6Ñ!8Ô!8Ð:kñô àñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z<
    Decorator marking a test that requires fouroversix
    ztest requires fouroversix)ró   r	  r@   r  s    rá   Úrequire_fouroversixrg  Ç  r¥  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zE
    Decorator marking a test that requires fp_quant and qutlass
    ztest requires fp_quant)ró   r	  rA   r  s    rá   Úrequire_fp_quantri  Î  rZ  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z8
    Decorator marking a test that requires qutlass
    ztest requires qutlass)ró   r	  rk   r  s    rá   Úrequire_qutlassrk  Õ  rS  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z;
    Decorator marking a test that requires phonemizer
    ztest requires phonemizer)ró   r	  rb   r  s    rá   Úrequire_phonemizerrm  Ü  r•  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z<
    Decorator marking a test that requires pyctcdecode
    ztest requires pyctcdecode)ró   r	  re   r  s    rá   Úrequire_pyctcdecodero  ã  r¥  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z6
    Decorator marking a test that requires numba
    ztest requires numba)ró   r	  rX   r  s    rá   Úrequire_numbarq  ê  rW  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z8
    Decorator marking a test that requires librosa
    ztest requires librosa)ró   r	  rQ   r  s    rá   Úrequire_librosars  ñ  rS  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z:
    Decorator marking a test that requires soundfile
    ztest requires soundfile)ró   r	  rs   r  s    rá   Úrequire_soundfileru  ø  r7  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zA
    Decorator marking a test that requires python-multipart
    ztest requires python-multipart)ró   r	  rU   r  s    rá   Úrequire_multipartrw  ÿ  s+   € ð [�8ÔÕ5Ñ7Ô7Ð9YÑZÔZÐ[dÑeÔeÐer  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z=
    Decorator marking a test that requires liger_kernel
    ztest requires liger_kernel)ró   r	  rR   r  s    rá   Úrequire_liger_kernelry    rP  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z9
    Decorator marking a test that requires essentia
    ztest requires essentia)ró   r	  r7   r  s    rá   Úrequire_essentiar{    rZ  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z<
    Decorator marking a test that requires pretty_midi
    ztest requires pretty_midi)ró   r	  rc   r  s    rá   Úrequire_pretty_midir}    r¥  r  c                 ó.   — t          j        | ¦  «        d uS r  )ÚshutilÚwhich)Úcmds    rá   Ú
cmd_existsr‚    s   € ÝŒ<˜ÑÔ DÐ(Ð(r  c                 óX   —  t          j        t          d¦  «        d¦  «        | ¦  «        S )z@
    Decorator marking a test that requires `/usr/bin/time`
    ú/usr/bin/timeztest requires /usr/bin/time)ró   r	  r‚  r  s    rá   Úrequire_usr_bin_timer…    s,   € ð [�8Ô�z¨/Ñ:Ô:Ð<YÑZÔZÐ[dÑeÔeÐer  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z8
    Decorator marking a test that requires sudachi
    ztest requires sudachi)ró   r	  rw   r  s    rá   Úrequire_sudachir‡  &  rS  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zC
    Decorator marking a test that requires sudachi_projection
    z/test requires sudachi which supports projection)ró   r	  rx   r  s    rá   Úrequire_sudachi_projectionr‰  -  s1   € ð u�8ÔÕ>Ñ@Ô@ÐBsÑtÔtØñô ð r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )ú8
    Decorator marking a test that requires jumanpp
    ztest requires jumanpp)ró   r	  rN   r  s    rá   Úrequire_jumanpprŒ  6  rS  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )r‹  ztest requires cython)ró   r	  r4   r  s    rá   Úrequire_cythonrŽ  =  rR  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zq
    Decorator marking a test that requires TikToken. These tests are skipped when TikToken isn't installed.
    ztest requires TikToken)ró   r	  ry   r  s    rá   Úrequire_tiktokenr�  D  rZ  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zm
    Decorator marking a test that requires speech. These tests are skipped when speech isn't available.
    r“  )ró   r	  ru   r  s    rá   Úrequire_speechr’  K  s+   € ð R�8ÔÕ2Ñ4Ô4Ð6PÑQÔQÐR[Ñ\Ô\Ð\r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )z7
    Decorator marking a test that requires openai
    ztest requires openai)ró   r	  r\   r  s    rá   Úrequire_openair”  R  rR  r  c                 óV   —  t          j        t          ¦   «         d¦  «        | ¦  «        S )zo
    Decorator marking a test that requires the serving dependencies (fastapi, uvicorn, pydantic, openai).
    z"test requires serving dependencies)ró   r	  rr   r  s    rá   Úrequire_server–  Y  s+   € ð [�8ÔÕ1Ñ3Ô3Ð5YÑZÔZÐ[dÑeÔeÐer  c                 ó^   —  t          j        t          |¦  «        d|› �¦  «        | ¦  «        S )z}
    Decorator marking a test that requires mistral-common. These tests are skipped when mistral-common isn't available.
    z(test requires mistral-common version >= )ró   r	  rT   rD  s     rá   Úrequire_mistral_commonr˜  `  s?   € ð�8ÔÝ# KÑ0Ô0Ð2jÐ]hÐ2jÐ2jñô àñô ð r  c                  ó\   — t          ¦   «         rddl} | j                             ¦   «         S dS )z-
    Return the number of available gpus
    r   N)r|   r®  r¯  r°  )r®  s    rá   Úget_gpu_countrš  i  s4   € õ ÑÔð ØˆˆˆàŒz×&Ò&Ñ(Ô(Ð(àˆqr  c                 ó’  — t          j        ¦   «         d         d         }t          j                             t          j                             |¦  «        ¦  «        }|                     d¦  «        s4t          j                             |¦  «        }|                     d¦  «        ¯4| r t          j                             || ¦  «        S |S )a  
    Args:
        append_path: optional path to append to the tests dir path

    Return:
        The full path to the `tests` dir, so that the tests can be invoked from anywhere. Optionally `append_path` is
        joined after the `tests` dir the former is provided.

    r   Útests)ÚinspectÚstackrØ   ÚpathÚabspathÚdirnameÚendswithÚjoin)Úappend_pathÚcaller__file__Ú	tests_dirs      rá   Úget_tests_dirr§  u  s¡   € õ ”]‘_”_ QÔ'¨Ô*€NÝ”—’¥¤§¢°Ñ ?Ô ?Ñ@Ô@€Ià× Ò  Ñ)Ô)ð /Ý”G—O’O IÑ.Ô.ˆ	ð × Ò  Ñ)Ô)ð /ð ð ÝŒw�|Š|˜I {Ñ3Ô3Ð3àÐr  ÚtrainerÚreturnc                 óz   — | j         }|                      ¦   «         }|                      ||¬¦  «        }|d         }|S )N)r  Ú
dataloaderé   )r  Úget_train_dataloaderÚset_initial_training_values)r¨  Útraining_argsÚtrain_dataloaderÚinitial_training_valuesÚsteps_per_epochs        rá   Úget_steps_per_epochr³  Œ  sE   € Ø”L€MØ×3Ò3Ñ5Ô5Ðà%×AÒAÀ}ÐaqÐAÑrÔrÐØ-¨aÔ0€OàÐr  Úside_effect_valuesc              #   ó.   K  — | E d{V —† 	 | d         V — Œ)z•
    Function that returns side effects for the _evaluate method.
    Used when we're unsure of exactly how many times _evaluate will be called.
    NTéÿÿÿÿrI  )r´  s    rá   Úevaluate_side_effect_factoryr·  –  s;   è è € ð "Ð!Ð!Ð!Ð!Ð!Ð!Ð!ð%Ø  Ô$Ð$Ð$Ð$ð%r  c                 óF   — t          j        dd| dt           j        ¦  «        S )Nz^.*\rÚ r   )ÚreÚsubÚ	MULTILINE)Úbufs    rá   Úapply_print_resetsr¾  ²  s   € ÝŒ6�(˜B  Q­¬Ñ5Ô5Ð5r  c                 óÂ   — t          | ¦  «                             ¦   «         }|                     |                     ¦   «         ¦  «        }|dk    sJ d|› d|› �¦   «         ‚d S )Nr¶  zexpecting to find z in output: f)r¾  ÚlowerÚfind)ÚoutÚwhatÚout_prÚ	match_strs       rá   Úassert_screenoutrÆ  ¶  s\   € Ý Ñ$Ô$×*Ò*Ñ,Ô,€FØ—’˜DŸJšJ™LœLÑ)Ô)€IØ˜Š?ˆ?ˆ?ÐL°ÐLÐLÀFÐLÐL‰?Œ?ˆ?ˆ?ˆ?r  c                 óÔ   — g d¢}|D ]}t          | |d¦  «         Œg d¢}|D ]F}t          | |¦  «        r4t          | |¦  «        �$|D ]!}t          t          | |¦  «        |d¦  «         Œ"ŒGd S )N)Úrms_norm_epsÚlayer_norm_epsÚnorm_epsÚnorm_epsilonÚlayer_norm_epsilonÚbatch_norm_epsç      ð?)Útext_configÚvision_configÚaudio_configÚtext_encoderÚaudio_encoderÚdecoder)r!  Úhasattrr  )ÚconfigÚtarget_attrsÚtarget_attrÚattrsr$  s        rá   Úset_config_for_less_flaky_testrÚ  ¼  s·   € ðð ð €Lð $ð *ð *ˆÝ�˜ SÑ)Ô)Ð)Ð)ð iÐhÐh€EØð Að AˆÝ�6˜4Ñ Ô ð 	A¥W¨V°TÑ%:Ô%:Ð%FØ+ð Að A�Ý� ¨Ñ-Ô-¨{¸CÑ@Ô@Ð@Ð@øðAð Ar  c                 ó<  — d}g d¢}t          ¦   «         rƒt          | t          j        j        ¦  «        rf|                      ¦   «         D ]S}t          |¦  «        j                             |¦  «        r&|D ]#}t          ||¦  «        rt          ||d¦  «         Œ$ŒPd S d S d S )N)Ú	LayerNormÚ	GroupNormÚ	BatchNormÚRMSNormÚBatchNorm2dÚBatchNorm1dÚBitGroupNormActivationÚWeightStandardizedConv2d)ÚepsÚepsilonÚvariance_epsilonrÎ  )r|   Ú
isinstancer®  Únnr•   ÚmodulesÚtypeÚ__name__r¢  rÕ  r!  )ÚmodelÚtarget_namesr×  Úmoduler$  s        rá   Úset_model_for_less_flaky_testrï  Ñ  sÂ   € ð	€Lð :Ð9Ð9€LÝÑÔð 3¥
¨5µ%´(´/Ñ BÔ Bð 3Ø—m’m‘o”oð 	3ð 	3ˆFÝ�F‰|Œ|Ô$×-Ò-¨lÑ;Ô;ð 3Ø(ð 3ð 3�DÝ˜v tÑ,Ô,ð 3Ý ¨¨cÑ2Ô2Ð2øøð3ð 3ð 3ð 3ð	3ð 	3r  c                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )	Ú
CaptureStdav  
    Context manager to capture:

        - stdout: replay it, clean it up and make it available via `obj.out`
        - stderr: replay it and make it available via `obj.err`

    Args:
        out (`bool`, *optional*, defaults to `True`): Whether to capture stdout or not.
        err (`bool`, *optional*, defaults to `True`): Whether to capture stderr or not.
        replay (`bool`, *optional*, defaults to `True`): Whether to replay or not.
            By default each captured stream gets replayed back on context's exit, so that one can see what the test was
            doing. If this is a not wanted behavior and the captured data shouldn't be replayed, pass `replay=False` to
            disable this feature.

    Examples:

    ```python
    # to capture stdout only with auto-replay
    with CaptureStdout() as cs:
        print("Secret message")
    assert "message" in cs.out

    # to capture stderr only with auto-replay
    import sys

    with CaptureStderr() as cs:
        print("Warning: ", file=sys.stderr)
    assert "Warning" in cs.err

    # to capture both streams with auto-replay
    with CaptureStd() as cs:
        print("Secret message")
        print("Warning: ", file=sys.stderr)
    assert "message" in cs.out
    assert "Warning" in cs.err

    # to capture just one of the streams, and not the other, with auto-replay
    with CaptureStd(err=False) as cs:
        print("Secret message")
    assert "message" in cs.out
    # but best use the stream-specific subclasses

    # to capture without auto-replay
    with CaptureStd(replay=False) as cs:
        print("Secret message")
    assert "message" in cs.out
    ```Tc                 óÂ   — || _         |rt          ¦   «         | _        d| _        nd | _        d| _        |rt          ¦   «         | _        d| _        d S d | _        d| _        d S )Nz=error: CaptureStd context is unfinished yet, called too earlyznot capturing stdoutznot capturing stderr)Úreplayr   Úout_bufrÂ  Úerr_bufÚerr)ÚselfrÂ  rö  ró  s       rá   Ú__init__zCaptureStd.__init__  sc   € ØˆŒàð 	.Ý#™:œ:ˆDŒLØVˆDŒHˆHàˆDŒLØ-ˆDŒHàð 	.Ý#™:œ:ˆDŒLØVˆDŒHˆHˆHàˆDŒLØ-ˆDŒHˆHˆHr  c                 óª   — | j         r"t          j        | _        | j         t          _        | j        r"t          j        | _        | j        t          _        | S r  )rô  ÚsysÚstdoutÚout_oldrõ  ÚstderrÚerr_old©r÷  s    rá   Ú	__enter__zCaptureStd.__enter__(  s?   € ØŒ<ð 	&Ýœ:ˆDŒLØœ�CŒJàŒ<ð 	&Ýœ:ˆDŒLØœ�CŒJàˆr  c                 óœ  — | j         rd| j        t          _        | j                              ¦   «         }| j        rt          j                             |¦  «         t          |¦  «        | _        | j	        rY| j
        t          _        | j	                             ¦   «         }| j        rt          j                             |¦  «         || _        d S d S r  )rô  rü  rú  rû  Úgetvalueró  Úwriter¾  rÂ  rõ  rþ  rý  rö  )r÷  ÚexcÚcaptureds      rá   Ú__exit__zCaptureStd.__exit__3  s²   € ØŒ<ð 	4Øœ�CŒJØ”|×,Ò,Ñ.Ô.ˆHØŒ{ð +Ý”
× Ò  Ñ*Ô*Ð*Ý)¨(Ñ3Ô3ˆDŒHàŒ<ð 	 Øœ�CŒJØ”|×,Ò,Ñ.Ô.ˆHØŒ{ð +Ý”
× Ò  Ñ*Ô*Ð*ØˆDŒHˆHˆHð	 ð 	 r  c                 ó^   — d}| j         r|d| j        › d�z  }| j        r|d| j        › d�z  }|S )Nr¹  zstdout: ú
ústderr: )rô  rÂ  rõ  rö  )r÷  Úmsgs     rá   Ú__repr__zCaptureStd.__repr__B  sP   € ØˆØŒ<ð 	+ØÐ*˜dœhÐ*Ð*Ð*Ñ*ˆCØŒ<ð 	+ØÐ*˜dœhÐ*Ð*Ð*Ñ*ˆCØˆ
r  N)TTT©rë  Ú
__module__Ú__qualname__Ú__doc__rø  r   r  r  rI  r  rá   rñ  rñ  æ  s`   € € € € € ð.ð .ð`.ð .ð .ð .ð"	ð 	ð 	ð ð  ð  ðð ð ð ð r  rñ  c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚCaptureStdoutz+Same as CaptureStd but captures only stdoutTc                 óN   •— t          ¦   «                              d|¬¦  «         d S )NF)rö  ró  ©Úsuperrø  ©r÷  ró  Ú	__class__s     €rá   rø  zCaptureStdout.__init__T  ó&   ø€ Ý‰Œ×Ò˜U¨6ÐÑ2Ô2Ð2Ð2Ð2r  ©T©rë  r  r  r  rø  Ú__classcell__©r  s   @rá   r  r  Q  óC   ø€ € € € € Ø5Ð5ð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r  r  c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚCaptureStderrz+Same as CaptureStd but captures only stderrTc                 óN   •— t          ¦   «                              d|¬¦  «         d S )NF)rÂ  ró  r  r  s     €rá   rø  zCaptureStderr.__init__[  r  r  r  r  r  s   @rá   r  r  X  r  r  r  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚCaptureLoggera:  
    Context manager to capture `logging` streams

    Args:
        logger: 'logging` logger object

    Returns:
        The captured output is available via `self.out`

    Example:

    ```python
    >>> from transformers import logging
    >>> from transformers.testing_utils import CaptureLogger

    >>> msg = "Testing 1, 2, 3"
    >>> logging.set_verbosity_info()
    >>> logger = logging.get_logger("transformers.models.bart.tokenization_bart")
    >>> with CaptureLogger(logger) as cl:
    ...     logger.info(msg)
    >>> assert cl.out, msg + "
"
    ```
    c                 ó„   — || _         t          ¦   «         | _        t          j        | j        ¦  «        | _        d| _        d S )Nr¹  )Úloggerr   Úior   ÚStreamHandlerÚshrÂ  )r÷  r#  s     rá   rø  zCaptureLogger.__init__x  s3   € ØˆŒÝ‘*”*ˆŒÝÔ'¨¬Ñ0Ô0ˆŒØˆŒˆˆr  c                 óD   — | j                              | j        ¦  «         | S r  )r#  Ú
addHandlerr&  rÿ  s    rá   r   zCaptureLogger.__enter__~  s   € ØŒ×Ò˜tœwÑ'Ô'Ð'Øˆr  c                 ó€   — | j                              | j        ¦  «         | j                             ¦   «         | _        d S r  )r#  ÚremoveHandlerr&  r$  r  rÂ  )r÷  r  s     rá   r  zCaptureLogger.__exit__‚  s3   € ØŒ×!Ò! $¤'Ñ*Ô*Ð*Ø”7×#Ò#Ñ%Ô%ˆŒˆˆr  c                 ó   — d| j         › d�S )Nz
captured: r  )rÂ  rÿ  s    rá   r  zCaptureLogger.__repr__†  s   € Ø(˜DœHÐ(Ð(Ð(Ð(r  Nr  rI  r  rá   r!  r!  _  sZ   € € € € € ðð ð0ð ð ðð ð ð&ð &ð &ð)ð )ð )ð )ð )r  r!  c              #   ó¼   K  — t          j        ¦   «         }	 t          j        | ¦  «         dV — t          j        |¦  «         dS # t          j        |¦  «         w xY w)ae  
    This is a context manager to temporarily change transformers modules logging level to the desired value and have it
    restored to the original setting at the end of the scope.

    Example:

    ```python
    with LoggingLevel(logging.INFO):
        AutoModel.from_pretrained("openai-community/gpt2")  # calls logger.info() several times
    ```
    N)Útransformers_loggingÚget_verbosityÚset_verbosity)ÚlevelÚ
orig_levels     rá   ÚLoggingLevelr2  Š  sd   è è € õ &Ô3Ñ5Ô5€Jð7ÝÔ*¨5Ñ1Ô1Ð1ØˆˆˆåÔ*¨:Ñ6Ô6Ð6Ð6Ð6øÕÔ*¨:Ñ6Ô6Ð6Ð6øøøs   —A ÁAc                   ó@   — e Zd ZdZd	dedz  dedz  ddfd„Zd„ Zd„ ZdS )
ÚTemporaryHubRepoaø  Create a temporary Hub repository and return its `RepoUrl` object. This is similar to
    `tempfile.TemporaryDirectory` and can be used as a context manager. For example:

        with TemporaryHubRepo(token=self._token) as temp_repo:
            ...

    Upon exiting the context, the repository and everything contained in it are removed.

    Example:

    ```python
    with TemporaryHubRepo(token=self._token) as temp_repo:
        model.push_to_hub(tmp_repo.repo_id, token=self._token)
    ```
    NÚ	namespaceÚtokenr©  c                 óÜ   — || _         t          j        ¦   «         5 }t          |¦  «        j        }|�|› d|› �}t          || j         ¬¦  «        | _        d d d ¦  «         d S # 1 swxY w Y   d S )Nú/)r6  )r6  ÚtempfileÚTemporaryDirectoryr   Únamer   Úrepo_url)r÷  r5  r6  Útmp_dirÚrepo_ids        rá   rø  zTemporaryHubRepo.__init__°  sÉ   € ØˆŒ
ÝÔ(Ñ*Ô*ð 	C¨gÝ˜7‘m”mÔ(ˆGØÐ$Ø&Ð2Ð2¨Ð2Ð2�Ý'¨°t´zÐBÑBÔBˆDŒMð		Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cs   ›9A!Á!A%Á(A%c                 ó   — | j         S r  )r<  rÿ  s    rá   r   zTemporaryHubRepo.__enter__¸  s
   € ØŒ}Ðr  c                 óH   — t          | j        j        | j        d¬¦  «         d S )NT)r>  r6  Ú
missing_ok)r   r<  r>  r6  )r÷  r  rß   Útbs       rá   r  zTemporaryHubRepo.__exit__»  s%   € Ý˜DœMÔ1¸¼ÐPTÐUÑUÔUÐUÐUÐUr  ©NN)rë  r  r  r  Ústrrø  r   r  rI  r  rá   r4  r4  Ÿ  s€   € € € € € ðð ð Cð C #¨¡*ð C¸CÀ$¹Jð CÐRVð Cð Cð Cð Cðð ð ðVð Vð Vð Vð Vr  r4  rŸ  c              #   ó  K  — t          j        | ¦  «        } 	 t          j                             d| ¦  «         dV — t          j                             | ¦  «         dS # t          j                             | ¦  «         w xY w)z´
    Temporary add given path to `sys.path`.

    Usage :

    ```python
    with ExtendSysPath("/path/to/dir"):
        mymodule = importlib.import_module("mymodule")
    ```
    r   N)rØ   Úfspathrú  rŸ  ÚinsertÚremove)rŸ  s    rá   ÚExtendSysPathrI  ¿  sm   è è € õ Œ9�T‰?Œ?€DðÝŒ�Š˜˜4Ñ Ô Ð ØˆˆˆåŒ�Š˜ÑÔÐÐÐø�Œ�Š˜ÑÔÐÐøøøs   ˜$A Á!A>c                   ó:  — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zdd„Zd„ Zd„ ZdS )ÚTestCasePlusa¢  
    This class extends *unittest.TestCase* with additional features.

    Feature 1: A set of fully resolved important file and dir path accessors.

    In tests often we need to know where things are relative to the current test file, and it's not trivial since the
    test could be invoked from more than one directory or could reside in sub-directories with different depths. This
    class solves this problem by sorting out all the basic paths and provides easy accessors to them:

    - `pathlib` objects (all fully resolved):

       - `test_file_path` - the current test file path (=`__file__`)
       - `test_file_dir` - the directory containing the current test file
       - `tests_dir` - the directory of the `tests` test suite
       - `examples_dir` - the directory of the `examples` test suite
       - `repo_root_dir` - the directory of the repository
       - `src_dir` - the directory of `src` (i.e. where the `transformers` sub-dir resides)

    - stringified paths---same as above but these return paths as strings, rather than `pathlib` objects:

       - `test_file_path_str`
       - `test_file_dir_str`
       - `tests_dir_str`
       - `examples_dir_str`
       - `repo_root_dir_str`
       - `src_dir_str`

    Feature 2: Flexible auto-removable temporary dirs which are guaranteed to get removed at the end of test.

    1. Create a unique temporary dir:

    ```python
    def test_whatever(self):
        tmp_dir = self.get_auto_remove_tmp_dir()
    ```

    `tmp_dir` will contain the path to the created temporary dir. It will be automatically removed at the end of the
    test.


    2. Create a temporary dir of my choice, ensure it's empty before the test starts and don't
    empty it after the test.

    ```python
    def test_whatever(self):
        tmp_dir = self.get_auto_remove_tmp_dir("./xxx")
    ```

    This is useful for debug when you want to monitor a specific directory and want to make sure the previous tests
    didn't leave any data in there.

    3. You can override the first two options by directly overriding the `before` and `after` args, leading to the
        following behavior:

    `before=True`: the temporary dir will always be cleared at the beginning of the test.

    `before=False`: if the temporary dir already existed, any existing files will remain there.

    `after=True`: the temporary dir will always be deleted at the end of the test.

    `after=False`: the temporary dir will always be left intact at the end of the test.

    Note 1: In order to run the equivalent of `rm -r` safely, only subdirs of the project repository checkout are
    allowed if an explicit `tmp_dir` is used, so that by mistake no `/tmp` or similar important part of the filesystem
    will get nuked. i.e. please always pass paths that start with `./`

    Note 2: Each test can register multiple temporary dirs and they all will get auto-removed, unless requested
    otherwise.

    Feature 3: Get a copy of the `os.environ` object that sets up `PYTHONPATH` specific to the current test suite. This
    is useful for invoking external programs from the test suite - e.g. distributed training.


    ```python
    def test_whatever(self):
        env = self.get_env()
    ```c                 óà  — g | _         t          j        | j        ¦  «        | _        t          | j        ¦  «                             ¦   «         }|j        d         | _        dD ]?}|j        |         }|dz   	                    ¦   «         r|dz   	                    ¦   «         r nŒ@|r|| _
        nt          d| j        › �¦  «        ‚| j
        dz  | _        | j
        dz  | _        | j
        dz  | _        d S )Nr   )r   r½   rÁ  Úsrcrœ  z+can't figure out the root of the repo from Úexamples)Úteardown_tmp_dirsr�  Úgetfiler  Ú_test_file_pathr   ÚresolveÚparentsÚ_test_file_dirÚis_dirÚ_repo_root_dirrÚ   Ú
_tests_dirÚ_examples_dirÚ_src_dir)r÷  rŸ  Úupr=  s       rá   ÚsetUpzTestCasePlus.setUp$  sû   € à!#ˆÔõ  'œ¨t¬~Ñ>Ô>ˆÔÝ�DÔ(Ñ)Ô)×1Ò1Ñ3Ô3ˆØ"œl¨1œoˆÔØð 	ð 	ˆBØ”l 2Ô&ˆGØ˜%‘×'Ò'Ñ)Ô)ð ¨w¸Ñ/@×.HÒ.HÑ.JÔ.Jð Ø�øØð 	cØ")ˆDÔÐåÐaÈ4ÔK_ÐaÐaÑbÔbÐbØÔ-°Ñ7ˆŒØ!Ô0°:Ñ=ˆÔØÔ+¨eÑ3ˆŒˆˆr  c                 ó   — | j         S r  )rQ  rÿ  s    rá   Útest_file_pathzTestCasePlus.test_file_path8  s   € àÔ#Ð#r  c                 ó*   — t          | j        ¦  «        S r  )rD  rQ  rÿ  s    rá   Útest_file_path_strzTestCasePlus.test_file_path_str<  s   € å�4Ô'Ñ(Ô(Ð(r  c                 ó   — | j         S r  )rT  rÿ  s    rá   Útest_file_dirzTestCasePlus.test_file_dir@  ó   € àÔ"Ð"r  c                 ó*   — t          | j        ¦  «        S r  )rD  rT  rÿ  s    rá   Útest_file_dir_strzTestCasePlus.test_file_dir_strD  ó   € å�4Ô&Ñ'Ô'Ð'r  c                 ó   — | j         S r  )rW  rÿ  s    rá   r¦  zTestCasePlus.tests_dirH  s
   € àŒÐr  c                 ó*   — t          | j        ¦  «        S r  )rD  rW  rÿ  s    rá   Útests_dir_strzTestCasePlus.tests_dir_strL  s   € å�4”?Ñ#Ô#Ð#r  c                 ó   — | j         S r  )rX  rÿ  s    rá   Úexamples_dirzTestCasePlus.examples_dirP  s   € àÔ!Ð!r  c                 ó*   — t          | j        ¦  «        S r  )rD  rX  rÿ  s    rá   Úexamples_dir_strzTestCasePlus.examples_dir_strT  s   € å�4Ô%Ñ&Ô&Ð&r  c                 ó   — | j         S r  )rV  rÿ  s    rá   Úrepo_root_dirzTestCasePlus.repo_root_dirX  rb  r  c                 ó*   — t          | j        ¦  «        S r  )rD  rV  rÿ  s    rá   Úrepo_root_dir_strzTestCasePlus.repo_root_dir_str\  re  r  c                 ó   — | j         S r  )rY  rÿ  s    rá   Úsrc_dirzTestCasePlus.src_dir`  s
   € àŒ}Ðr  c                 ó*   — t          | j        ¦  «        S r  )rD  rY  rÿ  s    rá   Úsrc_dir_strzTestCasePlus.src_dir_strd  s   € å�4”=Ñ!Ô!Ð!r  c                 ó&  — t           j                             ¦   «         }| j        | j        g}d| j        v r|                     | j        ¦  «         |                     |                     dd¦  «        ¦  «         d 	                    |¦  «        |d<   |S )a®  
        Return a copy of the `os.environ` object that sets up `PYTHONPATH` correctly, depending on the test suite it's
        invoked from. This is useful for invoking external programs from the test suite - e.g. distributed training.

        It always inserts `./src` first, then `./tests` or `./examples` depending on the test suite type and finally
        the preset `PYTHONPATH` if any (all full resolved paths).

        z	/examplesÚ
PYTHONPATHr¹  ú:)
rØ   rÙ   Úcopyrp  rt  rd  Úappendrl  Úgetr£  )r÷  ÚenvÚpathss      rá   Úget_envzTestCasePlus.get_envh  s�   € õ Œj�oŠoÑÔˆØÔ'¨Ô)9Ð:ˆØ˜$Ô0Ð0Ð0Ø�LŠL˜Ô.Ñ/Ô/Ð/Ø�Š�S—W’W˜\¨2Ñ.Ô.Ñ/Ô/Ð/àŸHšH U™OœOˆˆLÑØˆ
r  NFc                 óð  — |�—|€d}|€d}t          |¦  «                             ¦   «         }|                     d¦  «        st          d|› d�¦  «        ‚|du r*|                     ¦   «         rt          j        |d¬¦  «         |                     dd¬¦  «         n|€d}|€d}t          j	        ¦   «         }|du r| j
                             |¦  «         |r!t          |¦  «                             ¦   «         n|S )	aˆ  
        Args:
            tmp_dir (`string`, *optional*):
                if `None`:

                   - a unique temporary path will be created
                   - sets `before=True` if `before` is `None`
                   - sets `after=True` if `after` is `None`
                else:

                   - `tmp_dir` will be created
                   - sets `before=True` if `before` is `None`
                   - sets `after=False` if `after` is `None`
            before (`bool`, *optional*):
                If `True` and the `tmp_dir` already exists, make sure to empty it right away if `False` and the
                `tmp_dir` already exists, any existing files will remain there.
            after (`bool`, *optional*):
                If `True`, delete the `tmp_dir` at the end of the test if `False`, leave the `tmp_dir` and its contents
                intact at the end of the test.
            return_pathlib_obj (`bool`, *optional*):
                If `True` will return a pathlib.Path object

        Returns:
            tmp_dir(`string`): either the same value as passed via *tmp_dir* or the path to the auto-selected tmp dir
        NTFz./zI`tmp_dir` can only be a relative path, i.e. `./some/path`, but received `ú`©Úignore_errors©rS  Úexist_ok)r   rR  r  rÚ   Úexistsr  ÚrmtreeÚmkdirr9  ÚmkdtemprO  ry  )r÷  r=  ÚbeforeÚafterÚreturn_pathlib_objrŸ  s         rá   Úget_auto_remove_tmp_dirz$TestCasePlus.get_auto_remove_tmp_dirz  s  € ð4 Ðð
 ˆ~Ø�Øˆ}Ø�õ ˜‘=”=×(Ò(Ñ*Ô*ˆDð ×%Ò% dÑ+Ô+ð Ý ØjÐ`gÐjÐjÐjñô ð ð
 ˜ˆ~ˆ~ $§+¢+¡-¤-ˆ~Ý”˜g°TÐ:Ñ:Ô:Ð:à�JŠJ˜t¨dˆJÑ3Ô3Ð3Ð3ð ˆ~Ø�Øˆ}Ø�õ Ô&Ñ(Ô(ˆGà�Dˆ=ˆ=àÔ"×)Ò)¨'Ñ2Ô2Ð2à*<ÐI�t�G‰}Œ}×$Ò$Ñ&Ô&Ð&À'ÐIr  c                 óŒ  — t          d¦  «        st          d¦  «        ‚t          j        d|› d�¦  «        }t	          ¦   «         5 }t          ||                      ¦   «         ¬¦  «         ddd¦  «         n# 1 swxY w Y   t          |j                             d¦  «        d          	                    d	d
¦  «        ¦  «        dz  }|S )aÍ  
        Runs the passed python one liner (just the code) and returns how much max cpu memory was used to run the
        program.

        Args:
            one_liner_str (`string`):
                a python one liner code that gets passed to `python -c`

        Returns:
            max cpu memory bytes used to run the program. This value is likely to vary slightly from run to run.

        Requirements:
            this helper needs `/usr/bin/time` to be installed (`apt install time`)

        Example:

        ```
        one_liner_str = 'from transformers import AutoModel; AutoModel.from_pretrained("google-t5/t5-large")'
        max_rss = self.python_one_liner_max_rss(one_liner_str)
        ```
        r„  z:/usr/bin/time is required, install with `apt install time`z/usr/bin/time -f %M python -c 'ú')r{  Nr  éþÿÿÿr	  r¹  i   )
r‚  rÚ   ÚshlexÚsplitrñ  Úexecute_subprocess_asyncr}  rå   rö  Úreplace)r÷  Úone_liner_strr�  ÚcsÚmax_rsss        rá   Úpython_one_liner_max_rssz%TestCasePlus.python_one_liner_max_rssÀ  sò   € õ. ˜/Ñ*Ô*ð 	[ÝÐYÑZÔZÐZåŒkÐL¸MÐLÐLÐLÑMÔMˆÝ‰\Œ\ð 	>˜RÝ$ S¨d¯lªl©n¬nÐ=Ñ=Ô=Ð=ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>õ �b”f—l’l 4Ñ(Ô(¨Ô,×4Ò4°ZÀÑDÔDÑEÔEÈÑLˆØˆs   Á$A5Á5A9Á<A9c                 ó>  — | j         D ]}t          j        |d¬¦  «         Œg | _         t          ¦   «         ret	          j        ¦   «          t          j        ¦   «          t          t          j	         
                    ¦   «         ¦  «        D ]}d|v rt          j	        |= Œd S d S )NTr€  Ú
ACCELERATE)rO  r  r…  r)   r’   Ú_reset_stater“   ÚlistrØ   rÙ   Úkeys)r÷  rŸ  Úks      rá   ÚtearDownzTestCasePlus.tearDowná  s®   € àÔ*ð 	4ð 	4ˆDÝŒM˜$¨dÐ3Ñ3Ô3Ð3Ð3Ø!#ˆÔÝ"Ñ$Ô$ð 	&ÝÔ)Ñ+Ô+Ð+ÝÔ%Ñ'Ô'Ð'õ �"œ*Ÿ/š/Ñ+Ô+Ñ,Ô,ð &ð &�Ø 1Ð$Ð$Ýœ
 1˜øð	&ð 	&ð
&ð &r  )NNNF)rë  r  r  r  r[  Úpropertyr]  r_  ra  rd  r¦  rh  rj  rl  rn  rp  rr  rt  r}  r‹  r–  r�  rI  r  rá   rK  rK  Õ  s¿  € € € € € ðLð Lð\4ð 4ð 4ð( ð$ð $ñ „Xð$ð ð)ð )ñ „Xð)ð ð#ð #ñ „Xð#ð ð(ð (ñ „Xð(ð ðð ñ „Xðð ð$ð $ñ „Xð$ð ð"ð "ñ „Xð"ð ð'ð 'ñ „Xð'ð ð#ð #ñ „Xð#ð ð(ð (ñ „Xð(ð ðð ñ „Xðð ð"ð "ñ „Xð"ðð ð ð$DJð DJð DJð DJðLð ð ðB&ð &ð &ð &ð &r  rK  c                  óV   — t           j                             t          j        | ¦  «        S )zÒ
    this is a convenience wrapper, that allows this ::

    @mockenv(RUN_SLOW=True, USE_TF=False) def test_something():
        run_slow = os.getenv("RUN_SLOW", False) use_tf = os.getenv("USE_TF", False)

    )r   r   ÚdictrØ   rÙ   )r  s    rá   Úmockenvr¡  ð  s   € õ Œ:�?Š?�2œ: vÑ.Ô.Ð.r  c               /   ó  ‡K  — t           j        Š|pi }| pg } t          |                     ¦   «         ¦  «        t          | ¦  «        z  t          ‰                     ¦   «         ¦  «        z  }ˆfd„|D ¦   «         }t	          ˆfd„|D ¦   «         ¦  «        }	 ‰                     |¦  «         ˆfd„| D ¦   «          dV — ‰                     |¦  «         ˆfd„|D ¦   «          dS # ‰                     |¦  «         ˆfd„|D ¦   «          w xY w)aM  
    Temporarily updates the `os.environ` dictionary in-place. Similar to mockenv

    The `os.environ` dictionary is updated in-place so that the modification is sure to work in all situations.

    Args:
      remove: Environment variables to remove.
      update: Dictionary of environment variables and values to add/update.
    c                 ó"   •— i | ]}|‰|         “ŒS rI  rI  ©Ú.0rœ  r{  s     €rá   ú
<dictcomp>z#mockenv_context.<locals>.<dictcomp>	  s   ø€ Ð/Ð/Ð/ !�A�s˜1”vÐ/Ð/Ð/r  c              3   ó$   •K  — | ]
}|‰v¯|V — Œd S r  rI  r¤  s     €rá   ú	<genexpr>z"mockenv_context.<locals>.<genexpr>	  s'   øè è € Ð?Ð? 1°!¸3°,°,˜Q°,°,°,°,Ð?Ð?r  c                 ó<   •— g | ]}‰                      |d ¦  «        ‘ŒS r  ©Úpopr¤  s     €rá   ú
<listcomp>z#mockenv_context.<locals>.<listcomp>	  s'   ø€ Ð*Ð*Ð*˜aˆ�Š��DÑ	Ô	Ð*Ð*Ð*r  Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rI  rª  r¤  s     €rá   r¬  z#mockenv_context.<locals>.<listcomp>	  s#   ø€ Ð*Ð*Ð*˜ˆ�Š�‰ŒÐ*Ð*Ð*r  )rØ   rÙ   Úsetr›  Ú	frozensetÚupdate)rH  r°  ÚstompedÚupdate_afterÚremove_afterr{  s        @rá   Úmockenv_contextr´  ü  s3  øè è € õ Œ*€CØˆ\�r€FØˆ\�r€Fõ �6—;’;‘=”=Ñ!Ô!¥C¨¡K¤KÑ/µ3°s·x²x±z´z±?´?ÑB€Gà/Ð/Ð/Ð/ wÐ/Ñ/Ô/€LåÐ?Ð?Ð?Ð?¨Ð?Ñ?Ô?Ñ?Ô?€Lð+Ø�
Š
�6ÑÔÐØ*Ð*Ð*Ð* 6Ð*Ñ*Ô*Ð*Øˆˆˆà�
Š
�<Ñ Ô Ð Ø*Ð*Ð*Ð*˜\Ð*Ñ*Ô*Ð*Ð*Ð*øð 	�
Š
�<Ñ Ô Ð Ø*Ð*Ð*Ð*˜\Ð*Ñ*Ô*Ð*Ð*øøøs   Â'C! Ã!%Dc                 óf   — d}|t           vr%|                      |ddd¬¦  «         dt           |<   dS dS )zö
    This function is to be called from `conftest.py` via `pytest_addoption` wrapper that has to be defined there.

    It allows loading both `conftest.py` files at once without causing a failure due to adding the same `pytest`
    option.

    z--make-reportsÚstoreFzSgenerate report files. The value of this option is used as a prefix to report names)ÚactionrÞ   Úhelpr   N)Úpytest_opt_registeredÚ	addoption)ÚparserÚoptions     rá   Úpytest_addoption_sharedr½  !	  sY   € ð €FØÕ*Ð*Ð*Ø×ÒØØØØfð	 	ñ 	
ô 	
ð 	
ð )*Õ˜fÑ%Ð%Ð%ð +Ð*r  c           
      ó^  ‡— ddl m} t          |¦  «        sd}| j        }|                     ¦   «         }|j        j        }| j        }d|› �Št          ‰¦  «         	                    dd¬¦  «         ˆfd„dD ¦   «         }g }| j
                             ¦   «         D ],}	|	D ]'}
t          |
d	¦  «        r|                     |
¦  «         Œ(Œ-|rÙ|                     d
„ d¬¦  «         t          |d         d¦  «        5 }d}|                     d¦  «         t#          |¦  «        D ]l\  }}
|
j        |k     r-|                     t          |¦  «        |z
  › d|› d�¦  «          n0|                     |
j        d›d|
j        d›d|
j        › d�¦  «         Œmddd¦  «         n# 1 swxY w Y   d„ }d|j        _        t          |d         d¦  «        5 } |||¦  «        | _        |                      ¦   «          ddd¦  «         n# 1 swxY w Y   t          |d         d¦  «        5 } |||¦  «        | _         || ¦  «         ddd¦  «         n# 1 swxY w Y   d|j        _        t          |d         d¦  «        5 } |||¦  «        | _        |                      ¦   «          ddd¦  «         n# 1 swxY w Y   t          |d         d¦  «        5 } |||¦  «        | _        |                      ¦   «          ddd¦  «         n# 1 swxY w Y   t          |d         d¦  «        5 } |||¦  «        | _        |                      ¦   «          |                      ¦   «          ddd¦  «         n# 1 swxY w Y   d | _        t          |d!         d¦  «        5 } |||¦  «        | _        |                      ¦   «          ddd¦  «         n# 1 swxY w Y   t          |d"         d¦  «        5 } |||¦  «        | _        |                      ¦   «          ddd¦  «         n# 1 swxY w Y   || _        || _        ||j        _        dS )#a�  
    Generate multiple reports at the end of test suite run - each report goes into a dedicated file in the current
    directory. The report files are prefixed with the test suite name.

    This function emulates --duration and -rA pytest arguments.

    This function is to be called from `conftest.py` via `pytest_terminal_summary` wrapper that has to be defined
    there.

    Args:
    - tr: `terminalreporter` passed from `conftest.py`
    - id: unique id like `tests` or `examples` that will be incorporated into the final reports filenames - this is
      needed as some jobs have multiple runs of pytest, so we can't have them overwrite each other.

    NB: this functions taps into a private _pytest API and while unlikely, it could break should pytest do internal
    changes - also it calls default internal methods of terminalreporter which can be hijacked by various `pytest-`
    plugins and interfere.

    r   )Úcreate_terminal_writerrœ  zreports/Tr‚  c                 ó"   •— i | ]}|‰› d |› d�“ŒS )r8  z.txtrI  )r¥  rœ  r  s     €rá   r¦  z0pytest_terminal_summary_main.<locals>.<dictcomp>T	  s<   ø€ ð ð ð àð 	
ˆcÐÐ�AÐÐÐðð ð r  )	Ú	durationsÚerrorsÚfailures_longÚfailures_shortÚfailures_lineÚpassesÚstatsÚsummary_shortÚwarningsÚdurationc                 ó   — | j         S r  )rÊ  ©Úxs    rá   r  z.pytest_terminal_summary_main.<locals>.<lambda>l	  s   €  ¤€ r  )rÝ   ÚreverserÁ  Úwgš™™™™™©?zslowest durations
z durations < z secs were omittedz02.2fzs z<8ú r  Nc           	      óf  — |                       d¦  «        }|sd S |                      dd¦  «         |D ]~}|                      |¦  «        }|                      d|dd¬¦  «         t          j        dd|j        d	t          j        t          j        z  ¦  «        }| j         	                    |¦  «         Œd S )
NÚfailedú=zFAILURES SHORT STACKÚ_T)ÚredÚboldz.*_ _ _ (_ ){10,}_ _ r¹  r   )
Ú
getreportsÚ	write_sepÚ_getfailureheadlinerº  r»  Úlongreprtextr¼  ÚDOTALLÚ_twÚline)ÚtrÚreportsÚrepr
  Úlongreprs        rá   Úsummary_failures_shortz<pytest_terminal_summary_main.<locals>.summary_failures_shortv	  sº   € à—-’- Ñ)Ô)ˆØð 	ØˆFØ
�Š�SÐ0Ñ1Ô1Ð1Øð 	"ð 	"ˆCØ×(Ò(¨Ñ-Ô-ˆCØ�LŠL˜˜c t°$ˆLÑ7Ô7Ð7å”vÐ6¸¸CÔ<LÈaÕQSÔQ]Õ`bÔ`iÑQiÑjÔjˆHØŒF�KŠK˜Ñ!Ô!Ð!Ð!ð	"ð 	"r  ÚautorÃ  rÄ  rÝ  rÅ  rÂ  rÉ  ÚwPpsxXEfrÈ  rÇ  )Ú_pytest.configr¿  ÚlenrÖ  Úget_terminal_writerr¼  ÚtbstyleÚreportcharsr   r†  rÇ  ÚvaluesrÕ  ry  ÚsortÚopenr  Ú	enumeraterÊ  ÚwhenÚnodeidrÜ  Úsummary_failuresÚsummary_errorsÚsummary_warningsÚshort_test_summaryÚsummary_stats)rÞ  Úidr¿  rÖ  Úorig_writerÚorig_tbstyleÚorig_reportcharsÚreport_filesÚdlistÚreplistrà  ÚfÚdurations_minÚirâ  r  s                  @rá   Úpytest_terminal_summary_mainrÿ  4	  s‘  ø€ ð( 6Ð5Ð5Ð5Ð5Ð5åˆr‰7Œ7ð ØˆàŒY€FØ×,Ò,Ñ.Ô.€KØ”=Ô(€LØ”~Ðà
�Rˆ/ˆ/€CÝˆ�I„I‡O‚O˜D¨4€OÑ0Ô0Ð0ðð ð ð ð

ðñ ô €Lð$ €EØ”8—?’?Ñ$Ô$ð "ð "ˆØð 	"ð 	"ˆCÝ�s˜JÑ'Ô'ð "Ø—’˜SÑ!Ô!Ð!øð	"ð ð 	OØ�
Š
Ð+Ð+°Tˆ
Ñ:Ô:Ð:Ý�,˜{Ô+¨SÑ1Ô1ð 	O°QØ ˆMØ�GŠGÐ)Ñ*Ô*Ð*Ý# EÑ*Ô*ð Oð O‘��3Ø”< -Ò/Ð/Ø—G’G�s 5™zœz¨A™~Ð]Ð]¸MÐ]Ð]Ð]Ñ^Ô^Ð^Ø�EØ—’˜3œ<ÐMÐMÐM°´ÐMÐMÐM¸s¼zÐMÐMÐMÑNÔNÐNÐNð	Oð 	Oð 	Oñ 	Oô 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oøøøð 	Oð 	Oð 	Oð 	Oð"ð "ð "ð( #€F„MÔÝ	ˆl˜?Ô+¨SÑ	1Ô	1ð °QØ'Ð'¨°Ñ2Ô2ˆŒØ
×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ
 
ˆlÐ+Ô,¨cÑ	2Ô	2ð #°aØ'Ð'¨°Ñ2Ô2ˆŒØÐ˜rÑ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #€F„MÔÝ	ˆl˜?Ô+¨SÑ	1Ô	1ð °QØ'Ð'¨°Ñ2Ô2ˆŒØ
×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ 
ˆl˜8Ô$ cÑ	*Ô	*ð ¨aØ'Ð'¨°Ñ2Ô2ˆŒØ
×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ 
ˆl˜:Ô&¨Ñ	,Ô	,ð °Ø'Ð'¨°Ñ2Ô2ˆŒØ
×ÒÑÔÐØ
×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
  €B„Nõ 
ˆl˜?Ô+¨SÑ	1Ô	1ð  °QØ'Ð'¨°Ñ2Ô2ˆŒØ
×ÒÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  õ 
ˆl˜7Ô# SÑ	)Ô	)ð ¨QØ'Ð'¨°Ñ2Ô2ˆŒØ
×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 €B„FØ%€B„NØ(€F„MÔÐÐs‘   Ã6BFÆFÆFÇ&G8Ç8G<Ç?G<ÈIÉIÉ	IÉ/&J!Ê!J%Ê(J%Ë&K4Ë4K8Ë;K8Ì:MÍMÍ"MÎ&N5Î5N9Î<N9Ï&PÐPÐPc                   ó   — e Zd Zd„ ZdS )Ú
_RunOutputc                 ó0   — || _         || _        || _        d S r  )Ú
returncoderû  rý  )r÷  r  rû  rý  s       rá   rø  z_RunOutput.__init__À	  s   € Ø$ˆŒØˆŒØˆŒˆˆr  N)rë  r  r  rø  rI  r  rá   r  r  ¿	  s#   € € € € € ðð ð ð ð r  r  c              ƒ   ó^   K  — 	 |                       ¦   «         ƒ d {V —†}|r ||¦  «         nd S Œ+r  )Úreadline)ÚstreamÚcallbackrÝ  s      rá   Ú_read_streamr  Æ	  sM   è è € ðØ—_’_Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&ˆØð 	ØˆH�T‰NŒNˆNˆNàˆEðr  c           
   ƒ   ó2  ‡‡‡‡	K  — |r#t          dd                     | ¦  «        ¦  «         t          j        | d         g| dd …         ¢R |t          j        j        t          j        j        |dœŽƒ d {V —†}g Šg Šdˆfd„	Š	t          j        t          j        t          |j	        ˆˆ	fd„¦  «        ¦  «        t          j        t          |j
        ˆˆ	fd	„¦  «        ¦  «        g|¬
¦  «        ƒ d {V —† t          |                     ¦   «         ƒ d {V —†‰‰¦  «        S )Nz

Running: rÐ  r   r   )Ústdinrû  rý  r{  r¹  c                 ó¬   •— |                       d¦  «                             ¦   «         } |                     | ¦  «         ‰st          || |¬¦  «         d S d S )Núutf-8)Úfile)ÚdecodeÚrstripry  Úprint)rÝ  ÚsinkÚpipeÚlabelÚquiets       €rá   Úteez_stream_subprocess.<locals>.teeç	  s_   ø€ Ø�{Š{˜7Ñ#Ô#×*Ò*Ñ,Ô,ˆØ�Š�DÑÔÐØð 	*Ý�%˜ DÐ)Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*r  c                 ó6   •—  ‰| ‰t           j        d¬¦  «        S )Nzstdout:©r  )rú  rû  )ÚlrÂ  r  s    €€rá   r  z$_stream_subprocess.<locals>.<lambda>ð	  ó   ø€ ÀÀÀQÈÍSÌZÐ_hÐAiÑAiÔAi€ r  c                 ó6   •—  ‰| ‰t           j        d¬¦  «        S )Nzstderr:r  )rú  rý  )r  rö  r  s    €€rá   r  z$_stream_subprocess.<locals>.<lambda>ñ	  r  r  ©Útimeout)r¹  )r  r£  ÚasyncioÚcreate_subprocess_execÚ
subprocessÚPIPEÚwaitÚcreate_taskr  rû  rý  r  )
r�  r{  r
  r  r  ÚechoÚprö  rÂ  r  s
       `  @@@rá   Ú_stream_subprocessr%  Ï	  s  øøøøè è € Øð ,Ýˆm˜SŸXšX c™]œ]Ñ+Ô+Ð+åÔ,ØˆAŒðà	ˆQˆRˆRŒðð ð ÝÔ!Ô&ÝÔ!Ô&Øðð ð ð 	ð 	ð 	ð 	ð 	ð 	€Að" €CØ
€Cð*ð *ð *ð *ð *ð *õ Œ,åÔ¥¨Q¬XÐ7iÐ7iÐ7iÐ7iÐ7iÑ jÔ jÑkÔkÝÔ¥¨Q¬XÐ7iÐ7iÐ7iÐ7iÐ7iÑ jÔ jÑkÔkð	
ð ðñ ô ð ð ð ð ð ð ð õ ˜AŸFšF™HœH�n�n�n�n�n�n c¨3Ñ/Ô/Ð/r  é´   c           
      ól  — t          j        ¦   «         }|                     t          | |||||¬¦  «        ¦  «        }d                     | ¦  «        }|j        dk    r7d                     |j        ¦  «        }	t          d|› d|j        › d|	› �¦  «        ‚|j        s|j        st          d|› d�¦  «        ‚|S )	N)r{  r
  r  r  r#  rÐ  r   r  r�  z' failed with returncode z,

The combined stderr from workers follows:
z' produced no output.)	r  Úget_event_loopÚrun_until_completer%  r£  r  rý  ÚRuntimeErrorrû  )
r�  r{  r
  r  r  r#  ÚloopÚresultÚcmd_strrý  s
             rá   r‘  r‘  ø	  sê   € ÝÔ!Ñ#Ô#€DØ×$Ò$Ý˜3 C¨u¸gÈUÐY]Ð^Ñ^Ô^ñô €Fð �hŠh�s‰mŒm€GØÔ˜1ÒÐØ—’˜6œ=Ñ)Ô)ˆÝðC�ð Cð C°&Ô2Cð Cð CØ:@ðCð Cñ
ô 
ð 	
ð Œ=ð ? ¤ð ?ÝÐ=˜wÐ=Ð=Ð=Ñ>Ô>Ð>à€Mr  c                  ó¤   — t           j                             dd¦  «        } t          j        dd| dt          j        ¦  «        } t          | ¦  «        S )z®
    Returns an int value of worker's numerical id under `pytest-xdist`'s concurrent workers `pytest -n N` regime, or 0
    if `-n 1` or `pytest-xdist` isn't being used.
    ÚPYTEST_XDIST_WORKERÚgw0z^gwr¹  r   )rØ   rÙ   rz  rº  r»  r¼  rå   )Úworkers    rá   Úpytest_xdist_worker_idr2  
  s?   € õ
 ŒZ�^Š^Ð1°5Ñ9Ô9€FÝŒV�F˜B ¨­2¬<Ñ8Ô8€FÝˆv‰;Œ;Ðr  c                  óÜ   — ddl } |                       | j        | j        ¦  «        5 }|                     d¦  «         |                     ¦   «         d         cddd¦  «         S # 1 swxY w Y   dS )a  
    Returns a free port number that can be fed to `torch.distributed.launch`'s `--master_port` argument.

    Binds to port 0 to let the OS assign an available port, avoiding collisions from hardcoded ports
    and TCP TIME_WAIT issues between sequential subprocess launches.
    r   N)r¹  r   r   )ÚsocketÚAF_INETÚSOCK_STREAMÚbindÚgetsockname)r4  Úss     rá   Úget_torch_dist_unique_portr:  
  s¦   € ð €M€M€Mà	�Š�v”~ vÔ'9Ñ	:Ô	:ð "¸aØ	�Šˆw‰ŒˆØ�}Š}‰Œ˜qÔ!ð"ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "s   ¥/A!Á!A%Á(A%rÁ  c                 óx  ‡— ddl }t          | t          ¦  «        rˆfd„| D ¦   «         S t          | t          ¦  «        rt          ˆfd„| D ¦   «         ¦  «        S t          | |j        ¦  «        r!t          |                      ¦   «         ¦  «        S t          | t          ¦  «        r ˆfd„|                      ¦   «         D ¦   «         S t          | t          t          |j        f¦  «        s| €| S t          ¦   «         r<t          | t          j        ¦  «        r"t          |                      ¦   «         ‰¦  «        S t          | t          ¦  «        rt!          | ‰¦  «        S t          | |j        |j        |j        f¦  «        r"t          |                      ¦   «         ‰¦  «        S t+          dt-          | ¦  «        › �¦  «        ‚)zŒ
    Simplifies an object by rounding float numbers, and downcasting tensors/numpy arrays to get simple equality test
    within tests.
    r   Nc                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS rI  ©Únested_simplify©r¥  ÚitemÚdecimalss     €rá   r¬  z#nested_simplify.<locals>.<listcomp>.
  s#   ø€ Ð@Ð@Ð@°D•  hÑ/Ô/Ð@Ð@Ð@r  c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S r  r=  r?  s     €rá   r¨  z"nested_simplify.<locals>.<genexpr>0
  s-   øè è € ÐEÐE¸•_ T¨8Ñ4Ô4ÐEÐEÐEÐEÐEÐEr  c                 óT   •— i | ]$\  }}t          |‰¦  «        t          |‰¦  «        “Œ%S rI  r=  )r¥  rœ  ÚvrA  s      €rá   r¦  z#nested_simplify.<locals>.<dictcomp>4
  s4   ø€ ÐcÐcÐcÉtÈqÐRS•  8Ñ,Ô,­o¸aÀÑ.JÔ.JÐcÐcÐcr  zNot supported: )Únumpyrç  rš  ÚtupleÚndarrayr>  Útolistr	   ÚitemsrD  rå   Úint64r|   r®  ÚTensorÚfloatÚroundÚint32Úfloat32Úfloat16r@  Ú	Exceptionrê  )ÚobjrA  Únps    ` rá   r>  r>  &
  s©  ø€ ð
 ÐÐÐå�#•tÑÔð AØ@Ð@Ð@Ð@¸CÐ@Ñ@Ô@Ð@Ý�#•uÑÔð 7ÝÐEÐEÐEÐEÀÐEÑEÔEÑEÔEÐEÝ	�C˜œÑ	$Ô	$ð 7Ý˜sŸzšz™|œ|Ñ,Ô,Ð,Ý	�C�Ñ	!Ô	!ð 7ØcÐcÐcÐcÐWZ×W`ÒW`ÑWbÔWbÐcÑcÔcÐcÝ	�C�#�s B¤HÐ-Ñ	.Ô	.ð 	7°#°+Øˆ
Ý	Ñ	Ô	ð 7¥*¨Sµ%´,Ñ"?Ô"?ð 7Ý˜sŸzšz™|œ|¨XÑ6Ô6Ð6Ý	�C�Ñ	Ô	ð 7Ý�S˜(Ñ#Ô#Ð#Ý	�C˜"œ( B¤J°´
Ð;Ñ	<Ô	<ð 7Ý˜sŸxšx™zœz¨8Ñ4Ô4Ð4åÐ5­$¨s©)¬)Ð5Ð5Ñ6Ô6Ð6r  c                 ó  — t          | ¦  «        5 }|                     ¦   «         }t          |¦  «        dk    r|d         dk    sJ ‚n§t          |¦  «        dk    sJ ‚|d                              ¦   «         dk    sJ ‚|dd…         D ]G}t          |d         ¦  «        t          |d                              ¦   «         ¦  «        z
  }|dk    sJ ‚ŒH|d                              ¦   «         dk    sJ ‚d d d ¦  «         d S # 1 swxY w Y   d S )	Nr   r   ú{}rÁ  Ú{r¶  r½   Ú})rì  Ú	readlinesræ  ÚstripÚlstrip)Ú	file_pathrü  ÚlinesrÝ  Úleft_indents        rá   Ú"check_json_file_has_correct_formatr^  A
  sK  € Ý	ˆi‰Œð ,˜AØ—’‘”ˆÝˆu‰:Œ:˜Š?ˆ?à˜”8˜tÒ#Ð#Ð#Ð#Ð#õ �u‘:”: ’?�?�?�?à˜”8—>’>Ñ#Ô# sÒ*Ð*Ð*Ð*Ø˜a ˜dœð (ð (�Ý! %¨¤(™mœm­c°%¸´(·/²/Ñ2CÔ2CÑ.DÔ.DÑD�Ø" aÒ'Ð'Ð'Ð'Ð'Ø˜”9—?’?Ñ$Ô$¨Ò+Ð+Ð+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   �CC;Ã;C?ÄC?c                 óL   — t          | t          j        j        ¦  «        r| S | | fS r  )rç  ÚcollectionsÚabcr   rÌ  s    rá   Ú	to_2tuplerb  R
  s'   € Ý�!•[”_Ô-Ñ.Ô.ð ØˆØˆqˆ6€Mr  c                   ó   — e Zd ZdS )ÚSubprocessCallExceptionN)rë  r  r  rI  r  rá   rd  rd  Y
  s   € € € € € Ø€Dr  rd  Úcommandc                 óH  — 	 t          j        | t           j        ¬¦  «        }|r't          |d¦  «        r|                     d¦  «        }|S dS # t           j        $ rE}t          dd                     | ¦  «        › d|j                             ¦   «         › �¦  «        |‚d}~ww xY w)z­
    Runs `command` with `subprocess.check_output` and will potentially return the `stdout`. Will also properly capture
    if an error occurred while running `command`
    )rý  r  r  z	Command `rÐ  z$` failed with the following error:

N)	r  Úcheck_outputÚSTDOUTrÕ  r  ÚCalledProcessErrorrd  r£  Úoutput)re  Úreturn_stdoutrj  r  s       rá   Úrun_commandrl  ]
  sÁ   € ð
	ÝÔ(¨½Ô9JÐKÑKÔKˆØð 	Ý�v˜xÑ(Ô(ð 0ØŸš wÑ/Ô/�ØˆMð	ð 	øõ Ô(ð ð ð Ý%Ød˜Ÿš Ñ)Ô)ÐdÐdÐQRÔQY×Q`ÒQ`ÑQbÔQbÐdÐdñ
ô 
àð	øøøøðøøøs   ‚AA ÁB!ÁA BÂB!c                   óL   — e Zd ZdZd„ Zd	d„Zdedefd„Ze	defd„¦   «         Z
dS )
ÚRequestCounteraš  
    Helper class that will count all requests made online.

    Might not be robust if urllib3 changes its logging format but should be good enough for us.

    Usage:
    ```py
    with RequestCounter() as counter:
        _ = AutoTokenizer.from_pretrained("hf-internal-testing/tiny-random-bert")
    assert counter["GET"] == 0
    assert counter["HEAD"] == 1
    assert counter.total_calls == 1
    ```
    c                 óB  ‡ — t          t          ¦  «        ‰ _        t          j        ¦   «         ‰ _        g ‰ _        ˆ fd„}dd l}t          j	        |j
        j        d ||j
        j        j        ¦  «        ¬¦  «        ‰ _        ‰ j                             ¦   «         ‰ _        ‰ S )Nc                 ó   •‡ — ˆ ˆfd„}|S )Nc                  ój   •— ‰j                              t          j        ¦   «         ¦  «          ‰| i |¤ŽS r  )Ú_extra_infory  Ú	threadingÚ	get_ident)r  r  Úfuncr÷  s     €€rá   ÚwrapzHRequestCounter.__enter__.<locals>.patched_with_thread_info.<locals>.wrap„
  s8   ø€ ØÔ ×'Ò'­	Ô(;Ñ(=Ô(=Ñ>Ô>Ð>Ø�t˜TÐ, VÐ,Ð,Ð,r  rI  )ru  rv  r÷  s   ` €rá   Úpatched_with_thread_infoz:RequestCounter.__enter__.<locals>.patched_with_thread_infoƒ
  s)   øø€ ð-ð -ð -ð -ð -ð -ð ˆKr  r   Údebug)Úside_effect)r   rå   Ú_counterrs  rt  Ú
_thread_idrr  Úurllib3r   ÚobjectÚconnectionpoolÚlogrx  ÚpatcherÚstartr   )r÷  rw  r|  s   `  rá   r   zRequestCounter.__enter__~
  s¥   ø€ Ý#¥CÑ(Ô(ˆŒÝ#Ô-Ñ/Ô/ˆŒØˆÔð	ð 	ð 	ð 	ð 	ð 	ˆˆˆå”|ØÔ"Ô&¨Ð=UÐ=UÐV]ÔVlÔVpÔVvÑ=wÔ=wð
ñ 
ô 
ˆŒð ”L×&Ò&Ñ(Ô(ˆŒ	Øˆr  r©  Nc                 óš  — t          | j        j        ¦  «        t          | j        ¦  «        k    sJ ‚t	          | j        | j        j        ¦  «        D ]`\  }}|| j        k    rŒ|j        d         dk    rŒ#|j        d         |j        dd …         z  }dD ]}||v r| j        |xx         dz  cc<    nŒŒa| j         	                    ¦   «          d S )NrŽ  i3  r   r   )	ÚHEADÚGETÚPOSTÚPUTÚDELETEÚCONNECTÚOPTIONSÚTRACEÚPATCH)
ræ  r   Úcall_args_listrr  Úzipr{  r  rz  r€  Ústop)r÷  r  r  Ú	thread_idÚcallr  Úmethods          rá   r  zRequestCounter.__exit__’
  së   € Ý�4”9Ô+Ñ,Ô,µ°DÔ4DÑ0EÔ0EÒEÐEÐEÐEÝ" 4Ô#3°T´YÔ5MÑNÔNð 
	ð 
	‰OˆI�tØ˜DœOÒ+Ð+ØàŒy˜Œ} Ò#Ð#ØØ”)˜A”, ¤¨1¨2¨2¤Ñ.ˆCØjð ð �Ø˜S�=�=Ø”M &Ð)Ð)Ô)¨QÑ.Ð)Ð)Ñ)Ø�Eð !øð 	Œ×ÒÑÔÐÐÐr  rÝ   c                 ó   — | j         |         S r  )rz  )r÷  rÝ   s     rá   Ú__getitem__zRequestCounter.__getitem__¡
  s   € ØŒ}˜SÔ!Ð!r  c                 óN   — t          | j                             ¦   «         ¦  «        S r  )Úsumrz  rê  rÿ  s    rá   Útotal_callszRequestCounter.total_calls¤
  s   € å�4”=×'Ò'Ñ)Ô)Ñ*Ô*Ð*r  ©r©  N)rë  r  r  r  r   r  rD  rå   r“  rž  r–  rI  r  rá   rn  rn  n
  sŠ   € € € € € ðð ðð ð ð(ð ð ð ð"˜sð " sð "ð "ð "ð "ð ð+˜Sð +ð +ð +ñ „Xð+ð +ð +r  rn  r¬  Úmax_attemptsÚwait_before_retryÚdescriptionc                 ó   ‡ ‡— ˆ ˆfd„}|S )a¯  
    To decorate flaky tests. They will be retried on failures.

    Please note that our push tests use `pytest-rerunfailures`, which prompts the CI to rerun certain types of
    failed tests. More specifically, if the test exception contains any substring in `FLAKY_TEST_FAILURE_PATTERNS`
    (in `.circleci/create_circleci_config.py`), it will be rerun. If you find a recurrent pattern of failures,
    expand `FLAKY_TEST_FAILURE_PATTERNS` in our CI configuration instead of using `is_flaky`.

    Args:
        max_attempts (`int`, *optional*, defaults to 5):
            The maximum number of attempts to retry the flaky test.
        wait_before_retry (`float`, *optional*):
            If provided, will wait that number of seconds before retrying the test.
        description (`str`, *optional*):
            A string to describe the situation (what / where / why is flaky, link to GH issue/PR comments, errors,
            etc.)
    c                 óŽ   •‡ — t          j        ‰ ¦  «        ˆˆ ˆfd„¦   «         } t          j        t          d¦  «        |¦  «        S )Nc            
      óî   •— d}|‰k     re	  ‰| i |¤ŽS # t           $ rI}t                               d|› d|› d‰› d�¦  «         ‰�t          j        ‰¦  «         |dz  }Y d }~nd }~ww xY w|‰k     °e ‰| i |¤ŽS )Nr   zTest failed with z at try r8  ré  )rQ  r#  ÚerrorÚtimeÚsleep)r  r  Úretry_countrö  r˜  Útest_func_refr™  s       €€€rá   r  z,is_flaky.<locals>.decorator.<locals>.wrapper½
  sÊ   ø€ àˆKà Ò,Ð,ð%Ø(˜=¨$Ð9°&Ð9Ð9Ð9øå ð %ð %ð %Ý—L’LÐ!_°SÐ!_Ð!_À+Ð!_Ð!_ÐP\Ð!_Ð!_Ð!_Ñ`Ô`Ð`Ø(Ð4Ýœ
Ð#4Ñ5Ô5Ð5Ø 1Ñ$�K�K�K�K�K�Køøøøð	%øøøð	  Ò,Ð,ð !�= $Ð1¨&Ð1Ð1Ð1s   ‹ “
A&�?A!Á!A&ztest is flaky)r  r   ró   r	  Ú_run_flaky_tests)r¢  r  r˜  r™  s   ` €€rá   rH  zis_flaky.<locals>.decorator¼
  s]   øø€ Ý	Œ˜Ñ	'Ô	'ð	2ð 	2ð 	2ð 	2ð 	2ð 	2ñ 
(Ô	'ð	2ð F�xÔ"Õ#3°_ÑEÔEÀgÑNÔNÐNr  rI  )r˜  r™  rš  rH  s   ``  rá   Úis_flakyr¤  ©
  s0   øø€ ð&Oð Oð Oð Oð Oð Oð& Ðr  c                 óJ   — ddl m}  || |pd|dut          j        f¬¦  «        S )a1  
    To decorate tests that download from the Hub. They can fail due to a
    variety of network issues such as timeouts, connection resets, etc.

    Uses exponential backoff starting from `wait_before_retry`.

    Args:
        max_attempts (`int`, *optional*, defaults to 5):
            The maximum number of attempts to retry the flaky test.
        wait_before_retry (`float`, *optional*, defaults to 2):
            If provided, the initial delay in seconds before the first retry.
            Subsequent retries use exponential backoff with jitter.
    r   )Úretryr   N)Úmax_retriesÚinitial_delayÚjitterÚ
exceptions)Úutils.genericr¦  ÚhttpxÚ	HTTPError)r˜  r™  r¦  s      rá   Ú	hub_retryr®  Ò
  sJ   € ð %Ð$Ð$Ð$Ð$Ð$àˆ5Ø Ø'Ð,¨1Ø ¨Ð,Ý”OÐ%ð	ñ ô ð r  c                 óp   — t          ¦   «         r'ddl} |j                             d¦  «        | ¦  «        S | S )a¢  
    Decorator marking a test with order(1). When pytest-order plugin is installed, tests marked with this decorator
    are guaranteed to run first.

    This is especially useful in some test settings like on a Gaudi instance where a Gaudi device can only be used by a
    single process at a time. So we make sure all tests that run in a subprocess are launched first, to avoid device
    allocation conflicts.
    r   Nr   )rh   rô   rõ   Úorderrø   s     rá   Ú	run_firstr±  ê
  sA   € õ !Ñ"Ô"ð Øˆˆˆà#ˆvŒ{× Ò  Ñ#Ô# IÑ.Ô.Ð.àÐr  c                 ó¾  — |€-t          t          j                             dd¦  «        ¦  «        }d}t	          j        |¦  «        }|                     d¦  «        }|                     d¦  «        }|                     ||¬¦  «         | 	                    ||||f¬¦  «        }| 
                    ¦   «          	 |                     |¬¦  «        }	|                     ¦   «          n@# t          $ r3}
|                     ¦   «          |                      |
¦  «         Y d}
~
nd}
~
ww xY w|                     |¬¦  «         |	d         �|                      |	d         › ¦  «         dS dS )	aÆ  
    To run a test in a subprocess. In particular, this can avoid (GPU) memory issue.

    Args:
        test_case (`unittest.TestCase`):
            The test that will run `target_func`.
        target_func (`Callable`):
            The function implementing the actual testing logic.
        inputs (`dict`, *optional*, defaults to `None`):
            The inputs that will be passed to `target_func` through an (input) queue.
        timeout (`int`, *optional*, defaults to `None`):
            The timeout (in seconds) that will be passed to the input and output queues. If not specified, the env.
            variable `PYTEST_TIMEOUT` will be checked. If still `None`, its value will be set to `600`.
    NÚPYTEST_TIMEOUTÚ600Úspawnr   r  )Útargetr  rž  )rå   rØ   rÙ   rz  ÚmultiprocessingÚget_contextÚQueueÚJoinableQueueÚputÚProcessr�  Ú	task_donerQ  Ú	terminateÚfailr£  )rù   Útarget_funcÚinputsr  Ústart_methohdÚctxÚinput_queueÚoutput_queueÚprocessÚresultsr  s              rá   Úrun_test_in_subprocessrÈ  ü
  sj  € ð €Ý•b”j—n’nÐ%5°uÑ=Ô=Ñ>Ô>ˆà€MÝ
Ô
% mÑ
4Ô
4€Cà—)’)˜A‘,”,€KØ×$Ò$ QÑ'Ô'€Lð ‡O‚O�F G€OÑ,Ô,Ð,à�kŠk °KÀÈwÐ3WˆkÑXÔX€GØ‡M‚M�O„O€OðØ×"Ò"¨7Ð"Ñ3Ô3ˆØ×ÒÑ Ô Ð Ð øÝð ð ð Ø×ÒÑÔÐØ�Š�qÑÔÐÐÐÐÐÐøøøøðøøøð ‡L‚L˜€LÑ!Ô!Ð!àˆwÔÐ#Ø�Š˜' 'Ô*Ð,Ñ-Ô-Ð-Ð-Ð-ð $Ð#s   Â6*C! Ã!
DÃ+)DÄDc                 óR   ‡ ‡— ddl Št          j        ‰ ¦  «        ˆ ˆfd„¦   «         }|S )zï
    To decorate a test to run in a subprocess using the `subprocess` module. This could avoid potential GPU memory
    issues (GPU OOM or a test that causes many subsequential failing with `CUDA error: device-side assert triggered`).
    r   Nc                  ób  •— t          j        dd ¦  «        dk    r
 ‰| i |¤Ž d S d                     t           j                             d¦  «                             d¦  «        d d…         ¦  «        }	 t          j        t           j        ¦  «        }d|d<   d|d<   d|v r¨t          |d         j	        j
        ¦  «        }t          |¦  «        D ]Y\  }}||d         j
        v rE|                     d	¦  «        d
d …         }d	                     ‰j        d         › g|z   ¦  «        ||<   ŒZt          j        › ddg|z   }d„ |D ¦   «         }nt          j        › dd|› g}t          j        ||dd¬¦  «         d S # t          j        $ �r+}|j                             ¦   «         }|                     d¦  «        }	d|	d         v rÂd}
|	d
d …         D ]ª}|                     d¦  «        rH|t+          d¦  «        d …         }
d                     |
                     d¦  «        d
d …         ¦  «        }
Œ_|                     d¦  «        r|                     d¦  «        rd|v r nt+          |
¦  «        dk    r|
d|› �z  }
Œ«d|
z   }
|
g|	z   }	d                     |	¦  «        }‰                     |d¬¦  «        ‚d }~ww xY w)NÚ_INSIDE_SUB_PROCESSÚ1rÐ  ÚPYTEST_CURRENT_TESTr¶  ÚtrueÚCIÚpytestconfigú::r   Ú__file__z-mrô   c                 ó   — g | ]
}|d k    ¯|‘ŒS )z--no-summaryrI  ©r¥  rÍ  s     rá   r¬  z>run_test_using_subprocess.<locals>.wrapper.<locals>.<listcomp>D  s"   € ÐIÐIÐI Q°Q¸.Ò5HÐ5H˜qÐ5HÐ5HÐ5Hr  T)r{  ÚcheckÚcapture_outputr  z= test session starts =r   r¹  zFAILED ú - rÓ  z failed in z(subprocess) F)Úpytrace)rØ   Úgetenvr£  rÙ   rz  r�  rx  Údeepcopyrš  Úinvocation_paramsr  rí  Ú__globals__rú  Ú
executabler  Úrunri  rû  r  r  ræ  r¢  r¿  )r  r  Útestr{  re  ÚidxrÍ  r  Úexception_messager\  ÚtextrÝ  ru  rô   s               €€rá   r  z*run_test_using_subprocess.<locals>.wrapper.  só  ø€ åŒ9Ð*¨DÑ1Ô1°SÒ8Ð8ØˆD�$Ð!˜&Ð!Ð!Ð!Ð!Ð!à—8’8�BœJŸNšNÐ+@ÑAÔA×GÒGÈÑLÔLÈSÈbÈSÔQÑRÔRˆDð(DÝ”m¥B¤JÑ/Ô/�Ø-0�Ð)Ñ*ð #��D‘	ð " VÐ+Ð+Ý" 6¨.Ô#9Ô#KÔ#PÑQÔQ�GÝ"+¨GÑ"4Ô"4ð að a™˜˜QØ  ~Ô 6Ô ;Ð;Ð;Ø#'§:¢:¨dÑ#3Ô#3°A°B°BÔ#7˜DØ+/¯9ª9¸Ô9IÈ*Ô9UÐ6WÐ5XÐ[_Ñ5_Ñ+`Ô+`˜G C™LøÝ"%¤.Ð2°D¸(ÐCÀgÑM�GØIÐI¨'ÐIÑIÔI�G�Gõ #&¤.Ð2°D¸(ÀtÀIÐN�Gå”˜w¨C°tÈDÐQÑQÔQÐQÐQÐQøÝÔ0ð Dñ Dð DØ$%¤H§O¢OÑ$5Ô$5Ð!Ø)×/Ò/°Ñ5Ô5�ð -°°a´Ð8Ð8Ø�DØ % a b b¤	ð 0ð 0˜ØŸ?š?¨9Ñ5Ô5ð 0Ø#'­¨I©¬Ð(8Ð(8Ô#9˜DØ#%§7¢7¨4¯:ª:°eÑ+<Ô+<¸Q¸R¸RÔ+@Ñ#AÔ#A˜D˜DØ!Ÿ_š_¨SÑ1Ô1ð 0°d·m²mÀCÑ6HÔ6Hð 0È]Ð^bÐMbÐMbØ!˜EÝ  ™YœY¨š]˜]Ø  K¨ K KÑ/˜DøØ*¨TÑ1�DØ!˜F U™N�EØ$(§I¢I¨eÑ$4Ô$4Ð!Ø—k’kÐ"3¸U�kÑCÔCÐCøøøøð%Døøøs   Á3C>E3 Å3J.ÆD&J)Ê)J.)rô   r  r   )ru  r  rô   s   ` @rá   Úrun_test_using_subprocessrã  '  sP   øø€ ð
 €M€M€Må„_�TÑÔð-Dð -Dð -Dð -Dð -Dñ Ôð-Dð^ €Nr  c                 ó4  — d}t          j        || t           j        ¬¦  «        }d}t          |¦  «        D ]I\  }}d|v rd|vrt          j        dd|¦  «        ||<   d|v sd	|v rt          j        d
|¦  «        r|rd} nŒJd}|sd                     |¦  «        }|S )a®  Prepare a docstring or a `.md` file to be run by doctest.

    The argument `string` would be the whole file content if it is a `.md` file. For a python file, it would be one of
    its docstring. In each case, it may contain multiple python code examples. If `skip_cuda_tests` is `True` and a
    cuda stuff is detective (with a heuristic), this method will return an empty string so no doctest will be run for
    `string`.
    z+(```(?:python|py)[^\S\n]*\n\s*>>> )(.*?```))ÚflagsFzload_dataset(z# doctest: +IGNORE_RESULTz(>>> .*load_dataset\(.*)z\1 # doctest: +IGNORE_RESULTz>>>z...zcuda|to\(0\)|device=0Tr¹  )rº  r�  rÛ  rí  r»  Úsearchr£  )ÚstringÚskip_cuda_testsÚcodeblock_patternÚ
codeblocksÚis_cuda_foundrþ  Ú	codeblockÚmodified_strings           rá   Úpreprocess_stringrî  k  s×   € ð GÐÝ”Ð+¨V½2¼9ÐEÑEÔE€JØ€MÝ! *Ñ-Ô-ð 	ð 	‰ˆˆ9Ø˜iÐ'Ð'Ð,GÈyÐ,XÐ,XÝœFÐ#>Ð@_ÐajÑkÔkˆJ�q‰Mà�iÐÐ 5¨IÐ#5Ð#5Ý”	Ð2°IÑ>Ô>ð $6àð $6ð !ˆMØˆEøà€OØð .ØŸ'š' *Ñ-Ô-ˆàÐr  c                   óª   ‡ — e Zd ZU dZ ej        dej        ej        z  ¦  «        Ze	j
                             dd¦  «        dk    Zeed<   d	ˆ fd„	Zˆ xZS )
ÚHfDocTestParsera¾  
    Overwrites the DocTestParser from doctest to properly parse the codeblocks that are formatted with black. This
    means that there are no extra lines at the end of our snippets. The `# doctest: +IGNORE_RESULT` marker is also
    added anywhere a `load_dataset` call is made as a print would otherwise fail the corresponding line.

    Tests involving cuda are skipped base on a naive pattern that should be updated if it is not enough.
    aó  
        # Source consists of a PS1 line followed by zero or more PS2 lines.
        (?P<source>
            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line
            (?:\n           [ ]*  \.\.\. .*)*)  # PS2 lines
        \n?
        # Want consists of any non-blank lines that do not start with PS1.
        (?P<want> (?:(?![ ]*$)    # Not a blank line
             (?![ ]*>>>)          # Not a line starting with PS1
             # !!!!!!!!!!! HF Specific !!!!!!!!!!!
             (?:(?!```).)*        # Match any character except '`' until a '```' is found (this is specific to HF because black removes the last line)
             # !!!!!!!!!!! HF Specific !!!!!!!!!!!
             (?:\n|$)  # Match a new line or end of string
          )*)
        ÚSKIP_CUDA_DOCTESTÚ0rÌ  rè  ú<string>c                 ór   •— t          || j        ¦  «        }t          ¦   «                              ||¦  «        S )zŸ
        Overwrites the `parse` method to incorporate a skip for CUDA tests, and remove logs and dataset prints before
        calling `super().parse`
        )rî  rè  r  rê  )r÷  rç  r;  r  s      €rá   rê  zHfDocTestParser.parse­  s/   ø€ õ
 # 6¨4Ô+?Ñ@Ô@ˆÝ‰wŒw�}Š}˜V TÑ*Ô*Ð*r  )ró  )rë  r  r  r  rº  Úcompiler¼  ÚVERBOSEÚ_EXAMPLE_RErØ   rÙ   rz  rè  ÚboolÚ__annotations__rê  r  r  s   @rá   rð  rð  ˆ  s™   ø€ € € € € € ðð ð �"”*ð ð Œ\˜BœJÑ&ñô €Kð& œJŸNšNÐ+>ÀÑDÔDÈÒK€O�TÐKÐKÑKð+ð +ð +ð +ð +ð +ð +ð +ð +ð +r  rð  c                   ó*   — e Zd ZdZdee         fd„ZdS )ÚHfDoctestModulezƒ
    Overwrites the `DoctestModule` of the pytest package to make sure the HFDocTestParser is used when discovering
    tests.
    r©  c              #   ó"  K  —  G d„ dt           j        ¦  «        }| j        j        dk    rJ| j        j                             | j        | j                             d¦  «        | j        j        ¬¦  «        }n~	 t          | j        | j        j        | j                             d¦  «        ¬¦  «        }nC# t          $ r6 | j                             d¦  «        rt          d| j        z  ¦  «         n‚ Y nw xY w |t          ¦   «         ¬	¦  «        }t          | ¦  «        }t          d
|t!          ¦   «         t#          | j        ¦  «        ¬¦  «        }|                     ||j        ¦  «        D ](}|j        rt+          j        | |j        ||¬¦  «        V — Œ)d S )Nc                   ó.   ‡ — e Zd ZdZˆ fd„Zdˆ fd„Zˆ xZS )ú7HfDoctestModule.collect.<locals>.MockAwareDocTestFinderz»A hackish doctest finder that overrides stdlib internals to fix a stdlib bug.

            https://github.com/pytest-dev/pytest/issues/3456 https://bugs.python.org/issue25532
            c                 óÜ   •— t          |t          ¦  «        rt          |d|¦  «        }t          |d¦  «        rt	          j        |¦  «        }t          ¦   «                              ||¦  «        S )a3  Doctest code does not take into account `@property`, this
                is a hackish way to fix it. https://bugs.python.org/issue17446

                Wrapped Doctests will need to be unwrapped so the correct line number is returned. This will be
                reported upstream. #8796
                ÚfgetÚ__wrapped__)rç  rž  r  rÕ  r�  Úunwrapr  Ú_find_lineno)r÷  rR  Úsource_linesr  s      €rá   r  zDHfDoctestModule.collect.<locals>.MockAwareDocTestFinder._find_linenoÃ  sm   ø€ õ ˜c¥8Ñ,Ô,ð 4Ý! # v¨sÑ3Ô3�Cå˜3 Ñ.Ô.ð .å!œ.¨Ñ-Ô-�Cõ ‘w”w×+Ò+ØØ ñô ð r  r©  Nc           
      óÆ   •— t          |¦  «        rd S t          ¦   «         5  t          ¦   «                              |||||||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r  )r™   rš   r  Ú_find)	r÷  rœ  rR  r;  rî  r  ÚglobsÚseenr  s	           €rá   r  z=HfDoctestModule.collect.<locals>.MockAwareDocTestFinder._find×  s¯   ø€ Ý˜c‘?”?ð Ø�FÝ-Ñ/Ô/ð ð å‘G”G—M’MØ˜s D¨&°,ÀÀtñô ð ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ¡(AÁAÁAr—  )rë  r  r  r  r  r  r  r  s   @rá   ÚMockAwareDocTestFinderrþ  ½  s`   ø€ € € € € ðð ð
ð ð ð ð ð(ð ð ð ð ð ð ð ð ð r  r	  zconftest.pyÚ
importmode)Úrootpath)ÚrootÚmodeÚdoctest_ignore_import_errorszunable to import module %r)r»  F)ÚverboseÚoptionflagsÚcheckerÚcontinue_on_failure)r;  ÚrunnerÚdtest)ÚdoctestÚDocTestFinderrŸ  r;  rÖ  ÚpluginmanagerÚ_importconftestÚ	getoptionr  r�   r÷   r  rœ   rð  r›   r˜   r–   r—   rÁ  rë  rN  rž   Úfrom_parent)r÷  r	  rî  Úfinderr  r  rß  s          rá   ÚcollectzHfDoctestModule.collect¼  sÐ  è è € ð!	ð !	ð !	ð !	ð !	¥WÔ%:ñ !	ô !	ð !	ðF Œ9Œ>˜]Ò*Ð*Ø”[Ô.×>Ò>Ø”	Ø”×%Ò% lÑ3Ô3ØœÔ-ð ?ñ ô ˆFˆFð
Ý$Ø”IØœÔ-Øœ×.Ò.¨|Ñ<Ô<ðñ ô ��øõ
 ð ð ð Ø”;×'Ò'Ð(FÑGÔGð ÝÐ5¸¼	ÑAÑBÔBÐBÐBàð CÐBðøøøð (Ð'­Ñ/@Ô/@ÐAÑAÔAˆå% dÑ+Ô+ˆÝØØ#Ý ‘N”NÝ 8¸¼Ñ EÔ Eð	
ñ 
ô 
ˆð —K’K ¨¬Ñ8Ô8ð 	_ð 	_ˆDØŒ}ð _Ý!Ô-¨d¸¼È6ÐY]Ð^Ñ^Ô^Ð^Ð^Ð^øð	_ð 	_s   Á69B0 Â0=C0Ã/C0N)rë  r  r  r  r   rž   r  rI  r  rá   rû  rû  ¶  sL   € € € € € ðð ð
C_˜ +Ô.ð C_ð C_ð C_ð C_ð C_ð C_r  rû  ÚdeviceÚdispatch_tablec                 ó¢   — | |vr+t          |d         ¦  «        s|d         S  |d         |i |¤ŽS ||          }t          |¦  «        s|S  ||i |¤ŽS )NrÞ   )r   )r  r  r  r  Úfns        rá   Ú_device_agnostic_dispatchr!    s{   € Ø�^Ð#Ð#Ý˜ yÔ1Ñ2Ô2ð 	-Ø! )Ô,Ð,à(ˆ~˜iÔ(¨$Ð9°&Ð9Ð9Ð9à	˜Ô	€Bõ �B‰<Œ<ð Øˆ	àˆ2ˆtÐ�vÐÐÐr  )r¯  rã  rÞ   c                  ó   — dS ©Nr   rI  rI  r  rá   r  r  !  s   € �q€ r  c                  ó   — dS )Nr   rI  rI  r  rá   r  r  "  s   € ˜1€ r  rÞ   c                  ó   — dS r#  rI  rI  r  rá   r  r  E  s   € ¨q€ r  ÚxlaÚseedc                 ó.   — t          | t          |¦  «        S r  )r!  ÚBACKEND_MANUAL_SEED)r  r'  s     rá   Úbackend_manual_seedr*  q  s   € Ý$ VÕ-@À$ÑGÔGÐGr  c                 ó,   — t          | t          ¦  «        S r  )r!  ÚBACKEND_EMPTY_CACHE©r  s    rá   Úbackend_empty_cacher.  u  ó   € Ý$ VÕ-@ÑAÔAÐAr  c                 ó,   — t          | t          ¦  «        S r  )r!  ÚBACKEND_DEVICE_COUNTr-  s    rá   rµ  rµ  y  s   € Ý$ VÕ-AÑBÔBÐBr  c                 ó,   — t          | t          ¦  «        S r  )r!  Ú"BACKEND_RESET_MAX_MEMORY_ALLOCATEDr-  s    rá   Ú"backend_reset_max_memory_allocatedr4  }  s   € Ý$ VÕ-OÑPÔPÐPr  c                 ó,   — t          | t          ¦  «        S r  )r!  ÚBACKEND_RESET_PEAK_MEMORY_STATSr-  s    rá   Úbackend_reset_peak_memory_statsr7  �  s   € Ý$ VÕ-LÑMÔMÐMr  c                 ó,   — t          | t          ¦  «        S r  )r!  ÚBACKEND_MAX_MEMORY_ALLOCATEDr-  s    rá   Úbackend_max_memory_allocatedr:  …  s   € Ý$ VÕ-IÑJÔJÐJr  c                 ó,   — t          | t          ¦  «        S r  )r!  ÚBACKEND_MEMORY_ALLOCATEDr-  s    rá   Úbackend_memory_allocatedr=  ‰  s   € Ý$ VÕ-EÑFÔFÐFr  c                 ó,   — t          | t          ¦  «        S r  )r!  ÚBACKEND_SYNCHRONIZEr-  s    rá   Úbackend_synchronizer@  �  r/  r  c                 ó,   — t          | t          ¦  «        S r  )r!  Ú BACKEND_TORCH_ACCELERATOR_MODULEr-  s    rá   Ú backend_torch_accelerator_modulerC  ‘  s   € Ý$ VÕ-MÑNÔNÐNr  ÚTRANSFORMERS_TEST_DEVICE_SPECzISpecified path to device spec file is not a file or not found. Received 'ú.pyz;Provided device spec file was not a Python file! Received 'z.Device spec file did not contain `DEVICE_NAME`zBMismatch between environment variable `TRANSFORMERS_TEST_DEVICE` 'z' and device found in spec 'z'
zNEither unset `TRANSFORMERS_TEST_DEVICE` or ensure it matches device spec name.Údevice_fn_dictÚattribute_namec                 ó¶   — 	 t          t          |¦  «        }|| t          <   d S # t          $ r+}d| vrt          d|› dt          › d�¦  «        |‚Y d }~d S d }~ww xY w)NrÞ   r  z` not found in 'z)' and no default fallback function found.)r  Údevice_spec_moduler¶  ÚAttributeErrorÚdevice_spec_path)rF  rG  Úspec_fnr  s       rá   Úupdate_mapping_from_specrM  ·  s‘   € ð	å!Õ"4°nÑEÔE�Ø/6��|Ñ,Ð,Ð,øÝ!ð ð ð à NÐ2Ð2Ý(Øw˜NÐwÐwÕ<LÐwÐwÐwñô àðð 3Ð2Ð2Ð2Ð2Ð2øøøøðøøøs   ‚# £
A­ AÁAÚMANUAL_SEED_FNÚEMPTY_CACHE_FNÚDEVICE_COUNT_FNc                 ó(  ‡— g }g }d„ t          |¦  «        D ¦   «         Št          ˆfd„| D ¦   «         ¦  «        }t          |¦  «        D ]3}|j        t          u r#|j        | vr|                     |j        ¦  «         Œ4| D ]}|‰vr|                     |¦  «         Œ|s|rsdg}|r|                     d|› �¦  «         |r|                     d|› �¦  «         |r|                     d|› �¦  «         t          d                     |¦  «        ¦  «        ‚d S )Nc                 ó   — h | ]	}|j         ’Œ
S rI  ©r;  )r¥  Úfields     rá   ú	<setcomp>z6compare_pipeline_output_to_hub_spec.<locals>.<setcomp>Ì  s   € Ð@Ð@Ð@ e�u”zÐ@Ð@Ð@r  c                 ó   •— g | ]}|‰v ¯|‘Œ	S rI  rI  )r¥  rÝ   Úall_field_namess     €rá   r¬  z7compare_pipeline_output_to_hub_spec.<locals>.<listcomp>Í  s#   ø€ ÐLÐLÐL C°S¸OÐ5KÐ5K˜CÐ5KÐ5KÐ5Kr  z(Pipeline output does not match Hub spec!zMatching keys: z*Missing required keys in pipeline output: z2Keys in pipeline output that are not in Hub spec: r  )r   ÚsortedrÞ   r   r;  ry  rÛ   r£  )	rj  Úhub_specÚmissing_keysÚunexpected_keysÚmatching_keysrT  Ú
output_keyrž  rW  s	           @rá   Ú#compare_pipeline_output_to_hub_specr^  É  sj  ø€ Ø€LØ€OØ@Ð@­v°hÑ/?Ô/?Ð@Ñ@Ô@€OÝÐLÐLÐLÐL¨6ÐLÑLÔLÑMÔM€Mõ ˜Ñ!Ô!ð ,ð ,ˆØŒ=�GÐ#Ð#¨¬
¸&Ð(@Ð(@Ø×Ò ¤
Ñ+Ô+Ð+øð ð /ð /ˆ
Ø˜_Ð,Ð,Ø×"Ò" :Ñ.Ô.Ð.øàð )�ð )Ø;Ð<ˆØð 	<Ø�LŠLÐ:¨=Ð:Ð:Ñ;Ô;Ð;Øð 	VØ�LŠLÐTÀlÐTÐTÑUÔUÐUØð 	aØ�LŠLÐ_ÈoÐ_Ð_Ñ`Ô`Ð`Ý�t—y’y Ñ'Ô'Ñ(Ô(Ð(ð)ð )r  c                 óŠ   — |rt          j        ¦   «          t          | ¦  «         t          j                             ¦   «          d S r  )Úgcr  r.  r®  ÚcompilerÚreset)r  Ú
gc_collects     rá   Úcleanuprd  ä  s=   € àð Ý
Œ
‰ŒˆÝ˜ÑÔÐÝ	„N×ÒÑÔÐÐÐr  c                  ó|  — t           st          rJddl} | j                             ¦   «         r-| j                             ¦   «         \  }}t          rd||fS d||fS t          rKddl} | j                             ¦   «         r.| j                             ¦   «         d         }d}||z  dz	  }d|dfS t          rd	S t          ddfS )
z,
    Get environment device properties.
    r   NÚrocmr¯  Úarchitecturel       ür»   rÔ   )rÕ   NN)
ÚIS_CUDA_SYSTEMrú  r®  r¯  r  r  ÚIS_XPU_SYSTEMrÔ   ÚIS_NPU_SYSTEMr¶  )r®  r  r  ÚarchÚgen_maskÚgens         rá   r  r  ò  så   € õ
 ð .�ð .ØˆˆˆàŒ:×"Ò"Ñ$Ô$ð 	.Ø œ:×;Ò;Ñ=Ô=‰LˆE�5Ýð .Ø  uÐ-Ð-à  uÐ-Ð-Ýð &ØˆˆˆàŒ9×!Ò!Ñ#Ô#ð 	&à”9×2Ò2Ñ4Ô4°^ÔDˆDØ)ˆHØ˜(‘? rÑ)ˆCØ˜3 Ð%Ð%Ýð #à"Ð"Ý˜$ Ð%Ð%r  Ú
propertiesc                 ó„   — | €t          ¦   «         S | \  }}|€d\  }}nt          |t          ¦  «        r|d}}n|\  }}|||fS )z�
    Unpack a `PackedDeviceProperties` tuple into consistently formatted `DeviceProperties` tuple. If properties is None, it is fetched.
    NrC  )r  rç  rå   )rn  Údevice_typeÚmajor_minorr  r  s        rá   Úunpack_device_propertiesrr    sd   € ð ÐÝ$Ñ&Ô&Ð&Ø)Ñ€K�ØÐØ!‰ˆˆuˆuÝ	�K¥Ñ	%Ô	%ð #Ø" Dˆuˆˆà"‰ˆˆuØ˜˜uÐ$Ð$r  c                   óž   — e Zd Zdefd„Zdeeeef                  fd„Ze	de
defd„¦   «         Ze	dededefd„¦   «         Zddedefd
„Zd„ ZdS )ÚExpectationsr©  c                 óD   — |                       t          ¦   «         ¦  «        S )aE  
        Find best matching expectation based on environment device properties. We look at device_type, major and minor
        versions of the drivers. Expectations are stored as a dictionary with keys of the form
        (device_type, (major, minor)). If the major and minor versions are not provided, we use None.
        )Úfind_expectationr  rÿ  s    rá   Úget_expectationzExpectations.get_expectation"  s   € ð ×$Ò$Õ%:Ñ%<Ô%<Ñ=Ô=Ð=r  c                 óH   — d„ | j                              ¦   «         D ¦   «         S )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rI  )rr  )r¥  rœ  rD  s      rá   r¬  z)Expectations.unpacked.<locals>.<listcomp>+  s*   € ÐOÐOÐO±T°Q¸Õ)¨!Ñ,Ô,¨aÐ0ÐOÐOÐOr  )ÚdatarI  rÿ  s    rá   ÚunpackedzExpectations.unpacked*  s"   € ØOÐO¸T¼Y¿_º_Ñ=NÔ=NÐOÑOÔOÐOr  Úexpectation_keyc                 ó4   — t          d„ | D ¦   «         ¦  «        S )a  
        This function returns True if the expectation_key is the Default expectation (None, None).
        When an Expectation dict contains a Default value, it is generally because the test existed before Expectations.
        When we modify a test to use Expectations for a specific hardware, we don't want to affect the tests on other
        hardwares. Thus we set the previous value as the Default expectation with key (None, None) and add a value for
        the specific hardware with key (hardware_type, (major, minor)).
        c              3   ó   K  — | ]}|d u V — Œ	d S r  rI  )r¥  r$  s     rá   r¨  z*Expectations.is_default.<locals>.<genexpr>6  s&   è è € Ð6Ð6 �1˜�9Ð6Ð6Ð6Ð6Ð6Ð6r  )rƒ  )r|  s    rá   Ú
is_defaultzExpectations.is_default-  s!   € õ Ð6Ð6 oÐ6Ñ6Ô6Ñ6Ô6Ð6r  rn  Úotherc                 ó¾   — | \  }}}|\  }}}d}|�&||k    r |dz  }|�||k    r|dz  }|�||k    r|dz  }n
|dv r|dv rd}t                                |¦  «        rd}|S )aö  
        Returns score indicating how similar two instances of the `Properties` tuple are.
        Rules are as follows:
            * Matching `type` adds one point, semi-matching `type` adds 0.1 point (e.g. cuda and rocm).
            * If types match, matching `major` adds another point, and then matching `minor` adds another.
            * The Default expectation (None, None) is worth 0.5 point, which is better than semi-matching. More on this
            in the `is_default` function.
        r   Nr   )r¯  rf  gš™™™™™¹?g      à?)rt  r  )	rn  r€  rp  r  r  Úother_device_typeÚother_majorÚother_minorÚscores	            rá   r…  zExpectations.score8  s®   € ð %/Ñ!ˆ�U˜EØ6;Ñ3Ð˜;¨àˆàÐ" {Ð6GÒ'GÐ'GØ�Q‰JˆEØÐ  U¨kÒ%9Ð%9Ø˜‘
�ØÐ$¨°+Ò)=Ð)=Ø˜Q‘J�EøàÐ,Ð,Ð,Ð1BÐFVÐ1VÐ1VØˆEõ ×"Ò" 5Ñ)Ô)ð 	ØˆEàˆr  ©NNNc                 ó¼   ‡— t          |                      ¦   «         ˆfd„¬¦  «        \  }}t                               ‰|¦  «        dk    rt	          d‰› �¦  «        ‚|S )a  
        Find best matching expectation based on provided device properties. We score each expectation, and to
        distinguish between expectations with the same score, we use the major and minor version numbers, prioritizing
        most recent versions.
        c                 ó¼   •— t                                ‰| d         ¦  «        | d         d         �| d         d         nd| d         d         �| d         d         ndfS )Nr   r   r¶  r½   )rt  r…  )rÍ  rn  s    €rá   r  z/Expectations.find_expectation.<locals>.<lambda>_  sY   ø€ Ý×"Ò" :¨q°¬tÑ4Ô4Ø˜Qœ4 œ7Ð.��!”�Q”�°BØ˜Qœ4 œ7Ð.��!”�Q”�°Bð€ r  )rÝ   r   z"No matching expectation found for )Úmaxr{  rt  r…  rÚ   )r÷  rn  Ú
result_keyr,  s    `  rá   rv  zExpectations.find_expectationW  sv   ø€ õ  #Ø�MŠM‰OŒOðð ð ð ð 
ñ  
ô  
Ñˆ�Võ ×Ò˜j¨*Ñ5Ô5¸Ò:Ð:ÝÐNÀ*ÐNÐNÑOÔOÐOàˆr  c                 ó   — | j         › S r  )rz  rÿ  s    rá   r  zExpectations.__repr__k  s   € Ø”)ˆ~Ðr  N)r†  )rë  r  r  r   rw  rš  rF  ÚDevicePropertiesr{  ÚstaticmethodÚPackedDevicePropertiesrø  r  rL  r…  rv  r  rI  r  rá   rt  rt  !  sý   € € € € € ð> ð >ð >ð >ð >ðP˜$˜uÐ%5°sÐ%:Ô;Ô<ð Pð Pð Pð Pð ð7Ð$:ð 7¸tð 7ð 7ð 7ñ „\ð7ð ðÐ*ð Ð3Cð Èð ð ð ñ „\ðð<ð Ð+;ð ÐUXð ð ð ð ð(ð ð ð ð r  rt  c                  óª   ‡— t           j                             dd¦  «        } |                      ¦   «         dv } | rddl}|j        Šˆfd„}||_        dS dS )aŠ  
    Patch `torch.compile` to always use `fullgraph=True`.

    This is useful when some `torch.compile` tests are running with `fullgraph=False` and we want to be able to run
    them with `fullgraph=True` in some occasion (without introducing new tests) to make sure there is no graph break.

    After PR #40137, `CompileConfig.fullgraph` is `False` by default, this patch is necessary.
    ÚTORCH_COMPILE_FORCE_FULLGRAPHr¹  )ÚyesrÎ  ÚonÚtÚyrÌ  r   Nc                  ó   •— d|d<    ‰| i |¤ŽS )NTÚ	fullgraphrI  )r  r  Úorig_methods     €rá   Úpatchedz0patch_torch_compile_force_graph.<locals>.patched�  s"   ø€ à"&ˆF�;ÑØ�; Ð/¨Ð/Ð/Ð/r  )rØ   rÙ   rz  rÀ  r®  rõ  )Úforce_fullgraphr®  r˜  r—  s      @rá   Úpatch_torch_compile_force_graphrš  o  sz   ø€ õ ”j—n’nÐ%DÀbÑIÔI€OØ%×+Ò+Ñ-Ô-Ð1UÐU€Oàð 
 Øˆˆˆà”mˆð	0ð 	0ð 	0ð 	0ð 	0ð
  ˆŒˆˆð
 ð 
 r  c                  óè  — t           j                             dd¦  «                             d¦  «        d         } |                      d¦  «        \  }}}t	          j        ¦   «         }||}}d\  }}}	t          |¦  «        D ]w}
|                     |
j        ¦  «        r[d|
j	        j
        v rMt          |
j	        j
        d         |¦  «        r-|
}|
j	        j
        d         }|
j        }t          ||¦  «        }	 nŒx|�|j        }d}g }d	}t          |¦  «        D ]}
|                     |
j        ¦  «        r1d|
j	        j
        v r#t          |
j	        j
        d         |¦  «        rd
}n|
j	        j        j        dk    r|
}d	} n|r|                     |
¦  «         Œ€d}t          |¦  «        D ]4}t%          j        ||j	        |j	        j        |j	        j        ¦  «        }|}Œ5|}|j	        j
        d         }t-          j        ¦   «         }d}t          |¦  «        D ]}
|j        |
j        v r|
}Œt           j                             |j        ¦  «        }|j        }|}ddlm} t=          |¦  «        5 }|                     ¦   «         } ||¦  «        }d                      | !                    |dz
  ¦  «        j"        ¦  «        }ddd¦  «         n# 1 swxY w Y   t=          |¦  «        5 }|                     ¦   «         } ||¦  «        }d                      | !                    |dz
  ¦  «        j"        ¦  «        }ddd¦  «         n# 1 swxY w Y   d| › dd› d|› d|› d|› �
}|› dd› d|› d|› d|› �	}| ||||	|||||||fS )z€
    Collect some information about the current test.

    For example, test full name, line number, stack, traceback, etc.
    rÍ  r¹  rÐ  r   rÑ  r†  r÷  NFTr˜  r—  )ÚSourcer  r   ztest:

ú

úP--------------------------------------------------------------------------------z

test context: rw  z

caller context: )#rØ   rÙ   rz  r�  r�  rž  Úreversedr  ÚfunctionÚframeÚf_localsrÕ  Úfilenamer  ÚlinenoÚf_codeÚco_namery  ÚtypesÚTracebackTypeÚf_lastiÚf_linenoÚ	tracebackÚextract_stackrë  rÝ  rŸ  ÚrelpathÚ_pytest._code.sourcerœ  rì  Úreadr£  Úgetstatementr\  ) Úfull_test_nameÚ	test_fileÚ
test_classÚ	test_nameÚstack_from_inspectÚactual_test_fileÚ_actual_test_classÚ
test_frameÚtest_objÚtest_methodr¡  Úline_numberÚframe_of_patched_objÚcaptured_framesÚ
to_captureÚtb_nextÚ
frame_inforB  Útest_tracebackÚorigin_method_being_patchedrž  Úcaller_frameÚcaller_pathÚcaller_linenoÚtest_linenorœ  Úfpr9  ÚsourceÚtest_code_contextÚcaller_code_contextÚ	test_infos                                    rá   Ú_get_test_inforÌ  ‰  sµ  € õ ”Z—^’^Ð$9¸2Ñ>Ô>×DÒDÀSÑIÔIÈ!ÔL€NØ'5×';Ò';¸DÑ'AÔ'AÑ$€Iˆz˜9õ !œ™œÐð ,5°jÐ(ÐØ(8Ñ%€J�˜+ÝÐ,Ñ-Ô-ð ð ˆð
 × Ò  ¤Ñ0Ô0ð	à˜%œ+Ô.Ð.Ð.Ý˜œÔ,¨VÔ4°iÑ@Ô@ð /ð ˆJà”{Ô+¨FÔ3ˆHð  %œ~Ðå! (¨IÑ6Ô6ˆKØˆEøàÐØ Ô'ˆð  Ðà€OØ€Jõ Ð,Ñ-Ô-ð *ð *ˆà× Ò  ¤Ñ0Ô0ð
	à˜%œ+Ô.Ð.Ð.Ý˜œÔ,¨VÔ4°iÑ@Ô@ð /ð ˆJˆJàŒ[ÔÔ'¨9Ò4Ð4Ø#(Ð ØˆJØˆEØð 	*Ø×"Ò" 5Ñ)Ô)Ð)øà€GÝ˜Ñ/Ô/ð ð ˆ
ÝÔ  ¨*Ô*:¸JÔ<LÔ<TÐV`ÔVfÔVoÑpÔpˆØˆˆØ€Nà"6Ô"<Ô"EÀmÔ"TÐõ Ô#Ñ%Ô%€Eà€Lå˜%‘”ð !ð !ˆØ&Ô/°5´:Ð=Ð=Ø ˆLøå”'—/’/ ,Ô"7Ñ8Ô8€KØ Ô'€Mà€Kð ,Ð+Ð+Ð+Ð+Ð+å	ÐÑ	Ô	ð R 2Ø�GŠG‰IŒIˆØ�˜‘”ˆØ ŸIšI f×&9Ò&9¸+È¹/Ñ&JÔ&JÔ&PÑQÔQÐðRð Rð Rñ Rô Rð Rð Rð Rð Rð Rð Røøøð Rð Rð Rð Rõ 
ˆkÑ	Ô	ð V˜bØ�GŠG‰IŒIˆØ�˜‘”ˆØ"Ÿiši¨×(;Ò(;¸MÈAÑ<MÑ(NÔ(NÔ(TÑUÔUÐðVð Vð Vñ Vô Vð Vð Vð Vð Vð Vð Vøøøð Vð Vð Vð Vð
 D˜Nð  Dð  D°ð  Dð  DÐL\ð  Dð  DÐ_jð  Dð  Dð  qBð  Dð  D€IØÐvÐv (ÐvÐvÀÐvÐvÈmÐvÐvÐatÐvÐv€Ið 	ØØØØØØØØØØØðð s&   É(AKËKËKËAL:Ì:L>ÍL>c                 ó€  — d„ }t          | ¦  «        t          |                      ¦   «         ¦  «        z
  }|                      d|z  d¦  «        } 	 t          j        | d¬¦  «        }t          |j        t          j        ¦  «        sJ ‚|j        }|r~g i dddœ}|j        D ](} ||¦  «        }|d          	                    |¦  «         Œ)|j
        D ]=}|j        € ||j        ¦  «        |d	<   Œ ||j        ¦  «        }||d
         |j        <   Œ>|S n0# t          t          f$ r}	t          d|	› �¦  «         Y d}	~	nd}	~	ww xY wdS )zä
    Analyze the positional and keyword arguments in a call expression.

    This will extract the expressions of the positional and kwyword arguments, and associate them to the positions and
    the keyword argument names.
    c                 ó$  — t          | t          j        ¦  «        r| j        S t          | t          j        ¦  «        rt          j        | ¦  «        S t          | t          j        ¦  «        rt          | j        ¦  «        S t          j        | ¦  «        S )z,Extract the name/expression from an AST node)	rç  ÚastÚNamerõ  Ú	AttributeÚunparseÚConstantÚreprrß   )Únodes    rá   Úget_argument_namez._get_call_arguments.<locals>.get_argument_name  su   € å�d�CœHÑ%Ô%ð 	%Ø”7ˆNÝ˜�cœmÑ,Ô,ð 	%Ý”;˜tÑ$Ô$Ð$Ý˜�cœlÑ+Ô+ð 	%Ý˜œ
Ñ#Ô#Ð#å”;˜tÑ$Ô$Ð$r  rÐ  r¹  Úeval)r  N)Úpositional_argsÚkeyword_argsÚstarargsr  rØ  r  rÙ  zError parsing: )ræ  rZ  r’  rÏ  rê  rç  ÚbodyÚCallr  ry  ÚkeywordsÚargrß   ÚSyntaxErrorrJ  r  )
Úcode_contextrÖ  ÚindentÚtreeÚ	call_noder,  rÞ  Úarg_nameÚkeywordr  s
             rá   Ú_get_call_argumentsræ  þ  s©  € ð	%ð 	%ð 	%õ �ÑÔ¥ \×%8Ò%8Ñ%:Ô%:Ñ!;Ô!;Ñ;€FØ×'Ò'¨¨f©°bÑ9Ô9€Lð!%åŒy˜¨FÐ3Ñ3Ô3ˆå˜$œ)¥S¤XÑ.Ô.Ð.Ð.Ð.Ø”Iˆ	àð 	à#%Ø "Ø Øð	ð ˆFð !”~ð ;ð ;�Ø,Ð,¨SÑ1Ô1�ØÐ(Ô)×0Ò0°Ñ:Ô:Ð:Ð:ð %Ô-ð Cð C�Ø”;Ð&à'8Ð'8¸¼Ñ'GÔ'G�F˜8Ñ$Ð$ð  1Ð0°´Ñ?Ô?�HØ:B�F˜>Ô*¨7¬;Ñ7Ð7àˆMð/	øõ2 �Ð(ð %ð %ð %ÝÐ# Ð#Ð#Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$øøøøð%øøøð ˆ4s   ÁB=D ÄD;ÄD6Ä6D;c                 ó  — | › d|› �}t           j                             t           j                             dd¦  «        d¦  «        }t          |d¦  «        5 }|                     |› dd› d�¦  «         ddd¦  «         n# 1 swxY w Y   |S )zgCombine the information about the test and the call information to a patched function/method within it.r�  Ú#_PATCHED_TESTING_METHODS_OUTPUT_DIRr¹  úcaptured_info.txtÚazx========================================================================================================================N)rØ   rŸ  r£  rÙ   rz  rì  r  )rË  Úinfor$  rÇ  s       rá   Ú_prepare_debugging_inforì  :  sÈ   € ð Ð#Ð#˜TÐ#Ð#€DÝ
Œ�Š•R”Z—^’^Ð$IÈ2ÑNÔNÐPcÑdÔd€Aå	ˆa�‰Œð /˜Ø
�Š�DÐ-Ð-˜iÐ-Ð-Ð-Ñ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð €Ks   ÁA>Á>BÂBc                 ó&  — g }d}t          | j        d¦  «        r| j        j        }n@t          | j        d¦  «        r+t          | j        j        d¦  «        r| j        j        j        }t          | d¦  «        rÅ|rÃ|D ]:}|\  }\  }}}	|                     t          |¦  «        › d�|j        dddœ¦  «         Œ;t          | j        d¦  «        r| j        j                             ¦   «          nRt          | j        d¦  «        r=t          | j        j        d¦  «        r#| j        j        j                             ¦   «          t          j	        }
|
t          | ¦  «        _         |
| g|¢R i |¤Ž t          | | j        ¦  «        }|j        j        t!          |¦  «                 }|d	         d
         }|d	         d         }d„ |D ¦   «         }dd› d�                     |¦  «        }|r˜t          |¦  «        › dd› dt%          |¦  «        › dd› d|› dd› dt%          |¦  «        › dd› dd                     d„ |D ¦   «         ¦  «        › dd› dd› �} t          |¦  «        |¦  «        }|j        |_        |j        |_        |}|j        `|                     |¦  «        ‚)a%  Used to report a test that has failures captured and handled by patched functions/methods (without re-raise).

    The patched functions/methods refer to the `patched` defined in `_patch_with_call_info`, which is applied to
    `torch.testing.assert_close` and `unittest.case.TestCase.assertEqual`.

    The objective is to avoid a failure being silence after being processed.

    If there is any failure that is not handled by the patched functions/methods, we add custom error message for them
    along with the usual pytest failure report.
    NrÂ  r,  Ú_outcomer�  ztest_modeling_vit.pyéí   )Úmessagerê  r  rÝ  r   Ú	exceptionr«  c                 ó   — g | ]
}|d          ‘ŒS )rë  rI  rÔ  s     rá   r¬  z%_patched_tearDown.<locals>.<listcomp>„  s   € Ð;Ð;Ð; A�a˜”iÐ;Ð;Ð;r  zP================================================================================z
Handled Failures: (z handled):
rž  z
Unhandled Failures: (z unhandled):
ú, c              3   ó^   K  — | ](}|d          › d|d         › |d         › d|d         › �V — Œ)dS )rê  ú: rð  r  rw  rÝ  NrI  )r¥  rë  s     rá   r¨  z$_patched_tearDown.<locals>.<genexpr>“  sN   è è € Ð
oÐ
oÐQUˆd�6ŒlÐLÐL˜d 9œoÐL¨t°F¬|ÐLÐL¸dÀ6¼lÐLÐLÐ
oÐ
oÐ
oÐ
oÐ
oÐ
or  zž
Note: This failure occurred after other failures analyzed by the patched assertion methods.
To see the full details, temporarily disable assertion patching.
)rÕ  rî  rÂ  r,  ry  rD  rë  ÚclearÚ_patched_tearDownÚorig_tearDownrê  r�  r  Ú_testMethodNameÚ__func__Úcaptured_failuresrõ  r£  ræ  Ú	__cause__Ú__context__Úwith_traceback)r÷  r  r  Úregular_failures_inforÂ  Úerror_entryÚtest_instanceÚexc_typeÚexc_objÚexc_tbrø  rº  rû  Úcaptured_exceptionsÚcaptured_tracebackÚcapturued_infoÚcapturued_info_strÚenhanced_messageÚenhanced_exceptions                      rá   r÷  r÷  F  sS  € ð& Ðà€FÝˆtŒ}˜hÑ'Ô'ð -Ø”Ô%ˆˆÝ	�” Ñ	)Ô	)ð -­g°d´mÔ6JÈHÑ.UÔ.Uð -Ø”Ô%Ô,ˆåˆt�ZÑ Ô ð 0 Vð 0Ø!ð 
	ð 
	ˆKØ9DÑ6ˆMÑ6˜H g¨và!×(Ò(å"% g¡,¤,Ð4Ð4Ð4Ø$Ô-Ø2Øð	ð ñô ð ð õ �4”= (Ñ+Ô+ð 	0ØŒMÔ ×&Ò&Ñ(Ô(Ð(Ð(Ý�T”] HÑ-Ô-ð 	0µ'¸$¼-Ô:NÐPXÑ2YÔ2Yð 	0ØŒMÔ Ô'×-Ò-Ñ/Ô/Ð/õ &Ô3€MØ'…Dˆ�J„JÔð €M�$Ð(˜Ð(Ð(Ð( Ð(Ð(Ð(õ ˜$ Ô 4Ñ5Ô5€KØ#Ô,Ô>½rÀ+¹¼ÔOÐð ,¨AÔ.¨{Ô;ÐØ*¨1Ô-¨kÔ:Ðà;Ð;Ð):Ð;Ñ;Ô;€NØ. Ð.Ð.Ð.×3Ò3°NÑCÔCÐð ð 1Ý #Ð$7Ñ 8Ô 8ð ð à	ðð õ ˜Ñ'Ô'ðð ð 
ð	ð ð
 ðð ð 
ðð õ Ð/Ñ0Ô0ðð ð 
ðð ð ‡‚Ð
oÐ
oÐYnÐ
oÑ
oÔ
oÑoÔoðð ð 
ðð ð 
ðð Ðð$ 7�TÐ"5Ñ6Ô6Ð7GÑHÔHÐØ':Ô'DÐÔ$Ø)<Ô)HÐÔ&ð 1Ðð 	ÔÐ.à
×
,Ò
,Ð-?Ñ
@Ô
@Ð@r  c                 ó~   ‡‡‡— t          | |¦  «        Št          ‰¦  «        sdS ˆˆˆfd„}t          | ||¦  «         dS )zç
    Patch a callerable `attr_name` of a module or class `module_or_class`.

    This will allow us to collect the call information, e.g. the argument names and values, also the literal expressions
    passed as the arguments.
    Nc                  ó   •— t           j                             dd¦  «        s ‰| i |¤ŽS 	  ‰| i |¤Ž d S # t          $ �r�}|}t	          ¦   «         \  }}}}}}	}
}}}}}|› dd› d‰j        › d‰j        › �}t          |¦  «        } ‰‰| ||‰¦  «        }t          ||¦  «        }t          j	        d¦  «        dk    r| 
                    |
¦  «        ‚d	||
|d
œ}t          |j        dd ¦  «        €i |j        _        t          |¦  «        |j        j        vrg |j        j        t          |¦  «        <   |j        j        t          |¦  «                                      |¦  «         t!          t#          |¦  «        j        d¦  «        s?t#          |¦  «        j        }|t&          _        t&          t#          |¦  «        _        Y d }~d S Y d }~d S d }~ww xY w)NrÍ  r¹  r�  rž  z

patched method: ré  rÏ  rÎ  rÒ  )r,  rñ  r«  rë  rû  rø  )rØ   rÙ   rz  ÚAssertionErrorrÌ  r  rë  ræ  rì  rÙ  rþ  r  rú  rû  rõ  ry  rÕ  rê  r�  r÷  rø  )r  r  r  Úcaptured_exceptionr±  r²  rÆ  r¹  rº  r¸  rÁ  rÉ  rÄ  rÅ  rÊ  rË  Úcall_argument_expressionsrë  Úcaptured_failurerø  Ú_parse_call_info_funcr—  Útarget_argss                       €€€rá   r˜  z&_patch_with_call_info.<locals>.patched³  s;  ø€ åŒz�~Š~Ð3°RÑ8Ô8ð 	0Ø�; Ð/¨Ð/Ð/Ð/ð;	<ØˆK˜Ð( Ð(Ð(Ð(Ð(Ð(øÝð 9	<ñ 9	<ð 9	<Ø!"Ðõ Ñ Ô ñØØØØØØØØ!ØØØ#Øà$ÐwÐw¨(ÐwÐwÈÔH^ÐwÐwÐalÔauÐwÐwˆIÝ(;Ð<OÑ(PÔ(PÐ%ð )Ð(¨°d¸FÐD]Ð_jÑkÔkˆDÝ*¨9°dÑ;Ô;ˆDõ Œy˜‰Œ &Ò(Ð(Ø(×7Ò7¸ÑGÔGÐGð #Ø/Ø+Øð	 ð  Ðõ �{Ô+Ð-@À$ÑGÔGÐOØ9;�Ô$Ô6Ý�+‰Œ kÔ&:Ô&LÐLÐLØJL�Ô$Ô6µr¸+±´ÑGØÔ Ô2µ2°k±?´?ÔC×JÒJÐK[Ñ\Ô\Ð\õ �4 ™>œ>Ô2°OÑDÔDð <Ý $ X¡¤Ô 7�Ø2?Õ!Ô/Ý*;•�X‘”Ô'Ð'Ð'Ð'Ð'Ð'Ð'ð<ð <ð <ð <ð <ð <øøøøðm9	<øøøs   «5 µGÁ E<GÇG)r  r   r!  )Úmodule_or_classr#  r  r  r˜  r—  s     `` @rá   Ú_patch_with_call_infor  ¨  sp   øøø€ õ ˜/¨9Ñ5Ô5€KÝ�KÑ Ô ð Øˆð@<ð @<ð @<ð @<ð @<ð @<ð @<õD ˆO˜Y¨Ñ0Ô0Ð0Ð0Ð0r  c           
      ó@  — t          j        | ¦  «        }d„ |j                             ¦   «         D ¦   «         }t	          |¦  «        t	          |d         ¦  «        dz   k    rdg|d         z   |d<   d„ t          |¦  «        D ¦   «         }i }|D ]R}	|	|v r||	         }
|d         |	         }n||	         }||         }
|d         |         }t          |
¦  «        }||dœ||	<   ŒSd}|D ]/}	||	         d	         ||	         d
         }}|d› d|	› d|› d|› d�z  }Œ0|dd…         }|S )zf
    Prepare a string containing the call info to `func`, e.g. argument names/values/expressions.
    c                 ó"   — g | ]\  }}|j         ‘ŒS rI  rS  )r¥  Ú
param_nameÚparams      rá   r¬  z$_parse_call_info.<locals>.<listcomp>ý  s   € ÐXÐXÐXÑ&7 j°%�u”zÐXÐXÐXr  rØ  r   r÷  c                 ó   — i | ]\  }}||“Œ	S rI  rI  )r¥  rà  r  s      rá   r¦  z$_parse_call_info.<locals>.<dictcomp>  s   € Ð`Ð`Ð`±/°#°z˜j¨#Ð`Ð`Ð`r  rÙ  )Úarg_exprÚarg_value_strr¹  r  r  rž  z

argument name: `z`
argument expression: `z`

argument value:

r�  NrŽ  )r�  Ú	signatureÚ
parametersrI  ræ  rí  Ú_format_py_obj)ru  r  r  r  r  r  Úsignature_namesÚparam_position_mappingÚarg_inforä  Ú	arg_valuer  Úarg_posr  rë  s                  rá   Ú_parse_call_infor$  ø  s¯  € õ Ô! $Ñ'Ô'€IØXÐX¸9Ô;O×;UÒ;UÑ;WÔ;WÐXÑXÔX€Oõ ˆ4�y„y•CÐ1Ð2CÔDÑEÔEÈÑIÒIÐIð 9?°xÐB[Ð\mÔBnÑ7nÐ!Ð"3Ñ4à`Ð`ÅYÈÑE_ÔE_Ð`Ñ`Ô`Ðà€HØð 
Tð 
TˆØ�vÐÐØ˜xÔ(ˆIØ0°Ô@ÀÔJˆHˆHà,¨XÔ6ˆGØ˜WœˆIØ0Ð1BÔCÀGÔLˆHå& yÑ1Ô1ˆØ*2À]ÐSÐSˆ�ÑÐà€DØð Jð JˆØ"*¨8Ô"4°ZÔ"@À(È8ÔBTÐUdÔBe�-ˆØ�8ð  Jð  J°ð  Jð  JÐT\ð  Jð  Jð  wDð  Jð  Jð  Jñ  	Jˆˆð ���Œ9€Dà€Kr  c                  ó€  — t           j                             t           j                             dd¦  «        d¦  «        } t          | ¦  «                             d¬¦  «         t          ¦   «         r!ddl}t          |j
        dt          d	¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         t          t          j        j        dt          d¬
¦  «         dS )zþ
    Patch some methods (`torch.testing.assert_close`, `unittest.case.TestCase.assertEqual`, etc).

    This will allow us to collect the call information, e.g. the argument names and values, also the literal expressions
    passed as the arguments.
    rè  r¹  ré  T)rA  r   NÚassert_close)ÚactualÚexpected)r  ÚassertEqual)ÚfirstÚsecondÚassertListEqual)Úlist1Úlist2ÚassertTupleEqual)Útuple1Útuple2ÚassertSetEqual)Úset1r3  ÚassertDictEqual)Úd1Úd2ÚassertIn)ÚmemberÚ	containerÚassertNotInÚ
assertLess)rê  ÚbÚassertLessEqualÚassertGreaterÚassertGreaterEqual)rØ   rŸ  r£  rÙ   rz  r   Úunlinkr|   r®  r  Útestingr$  ró   ÚcaseÚTestCase)r$  r®  s     rá   Ú%patch_testing_methods_to_collect_inforD    sÙ  € õ 	Œ�Š•R”Z—^’^Ð$IÈ2ÑNÔNÐPcÑdÔd€AÝˆ�G„G‡N‚N˜d€NÑ#Ô#Ð#åÑÔð sØˆˆˆå˜eœm¨^Õ=MÐ[qÐrÑrÔrÐrå�(œ-Ô0°-ÕAQÐ_rÐsÑsÔsÐsÝ�(œ-Ô0Ð2CÕEUÐcuÐvÑvÔvÐvÝÝŒÔÐ 2Õ4DÐRfðñ ô ð õ �(œ-Ô0Ð2BÕDTÐbrÐsÑsÔsÐsÝ�(œ-Ô0Ð2CÕEUÐcoÐpÑpÔpÐpÝ�(œ-Ô0°*Õ>NÐ\sÐtÑtÔtÐtÝ�(œ-Ô0°-ÕAQÐ_vÐwÑwÔwÐwÝ�(œ-Ô0°,Õ@PÐ^hÐiÑiÔiÐiÝ�(œ-Ô0Ð2CÕEUÐcmÐnÑnÔnÐnÝ�(œ-Ô0°/ÕCSÐakÐlÑlÔlÐlÝ�(œ-Ô0Ð2FÕHXÐfpÐqÑqÔqÐqÐqÐqr  ÚscriptÚnproc_per_nodeÚis_torchrunr{  c                 óè  — t          j        dd¬¦  «        5 }|                     | ¦  «         |                     ¦   «          |                     d¦  «         |r/d|› dt          ¦   «         › d|j        › �                     ¦   «         }n	d|j        g}	 t          j	        |d	|d	d	¬
¦  «        }n.# t          j
        $ r}t          d|j        › �¦  «        ‚d}~ww xY w	 ddd¦  «         dS # 1 swxY w Y   dS )zmRun the `script` using `torchrun` command for multi-processing in a subprocess. Captures errors as necessary.zw+rE  )r  Úsuffixr   ztorchrun --nproc_per_node z --master_port rÐ  Úpython3T)rÖ  r{  râ  rÕ  z"The following error was captured: N)r9  ÚNamedTemporaryFiler  ÚflushÚseekr:  r;  r�  r  rÞ  ri  rQ  rý  )rE  rF  rG  r{  Útmpr�  rÔ  r  s           rá   ÚtorchrunrO  =  sm  € å	Ô	$¨$°uÐ	=Ñ	=Ô	=ð MÀØ�	Š	�&ÑÔÐØ�	Š	‰ŒˆØ�Š�‰ŒˆØð 	(àu¨^ÐuÐuÕLfÑLhÔLhÐuÐuÐknÔksÐuÐußŠe‰gŒgð ˆCð ˜cœhÐ'ˆCð	MÝ”˜s°4¸SÀtÐSWÐXÑXÔXˆAˆAøÝÔ,ð 	Mð 	Mð 	MÝÐKÀÄÐKÐKÑLÔLÐLøøøøð	Møøøð ðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mð Mð Ms6   —A9C'ÂB+Â*C'Â+CÂ:CÃCÃC'Ã'C+Ã.C+c                 ó’  ‡‡— t          | t          j        ¦  «        st          j        | ¦  «        } d}| j        dk    rt          j        | g¦  «        } d}| j        dk    s!t          | j        dd…         ¦  «        dhk    rÈ|                      ¦   «                              d¦  «        } t          | ¦  «        }| 
                    dd¦  «         
                    d	d¦  «        }d
|v r| 
                    d
d¦  «        }d
|v °| 
                    dd¦  «        }d|v r| 
                    dd¦  «        }d|v °|r
|dd…         }d‰z  |z   }|S t          | ¦  «        }‰€d|v pd|v Št          j        ‰¬¦  «         d‰z  dz   }|d                     ˆˆfd„| D ¦   «         ¦  «        z  }|dd‰z  z   dz   z  }t          j        d¬¦  «         |S )uJ   Format torch's tensor in a pretty way to be shown ðŸ‘€ in the test report.Fr   Tr   r¶  rã  ztensor(r¹  ú)z[ ú[r  rÐ  z  ú    Nze+ze-)Úsci_modez[
ú,
c              3   óB   •K  — | ]}t          |‰d z   ‰¬¦  «        V — ŒdS )r   )Úindent_levelrT  N)Ú_format_tensor)r¥  rÍ  rW  rT  s     €€rá   r¨  z!_format_tensor.<locals>.<genexpr>�  s9   øè è € ÐkÐkÐde�N¨1¸<È!Ñ;KÐV^Ð_Ñ_Ô_ÐkÐkÐkÐkÐkÐkr  ú])rç  r®  rK  ÚtensorÚndimr®  ÚshapeÚdetachÚtorD  r’  Úset_printoptionsr£  )r“  rW  rT  Ú	is_scalarÚt_strs    ``  rá   rX  rX  Q  s  øø€ õ �a�œÑ&Ô&ð ÝŒL˜‰OŒOˆð €IØ„v�‚{€{ÝŒL˜!˜ÑÔˆØˆ	ð 	„v�‚{€{•c˜!œ' ! B $œ-Ñ(Ô(¨Q¨CÒ/Ð/à�HŠH‰JŒJ�MŠM˜%Ñ Ô ˆõ �A‘”ˆð —’˜i¨Ñ,Ô,×4Ò4°S¸"Ñ=Ô=ˆð
 �eˆmˆmØ—M’M $¨Ñ,Ô,ˆEð �eˆmˆmð —’˜d CÑ(Ô(ˆð �eˆmˆmØ—M’M $¨Ñ,Ô,ˆEð �eˆmˆmð ð 	 Ø˜!˜B˜$”KˆEà˜,Ñ&¨Ñ.ˆàˆõ
 �A‘”ˆð ÐØ˜u�}Ð5¨°¨ˆHõ 	Ô¨Ð1Ñ1Ô1Ð1à˜,Ñ&¨Ñ.ˆð 	�—’ÐkÐkÐkÐkÐkÐijÐkÑkÔkÑkÔkÑkˆØ�˜ <Ñ/Ñ/°#Ñ5Ñ5ˆåÔ¨Ð-Ñ-Ô-Ð-à€Lr  c                 ó~   — d| v }d| v }|r|r|                       dd¦  «        } d| › d�S |rd| › d�S |rd| › d�S d| › d�S )a$  Given a string `s`, return a python literal expression that give `s` when it is used in a python source code.

    For example, if `s` is the string `abc`, the return value is `"abc"`.

    We choice double quotes over single quote despite `str(s)` would give `'abc'` instead of `"abc"`.
    r�  ú"z\")r’  )r9  Úhas_single_quoteÚhas_double_quotes      rá   Ú_quote_stringrf  —  s   € ð ˜a�xÐØ˜a�xÐàð 	Ð,ð 	à�IŠI�c˜5Ñ!Ô!ˆØ�1ˆxˆxˆxˆØ	ð Ø�1ˆxˆxˆxˆØ	ð Ø�1ˆxˆxˆxˆà�1ˆxˆxˆxˆr  r¹  c           	      ó  ‡‡"‡#— |€i }n.t          | ¦  «        ‰||f|v r|t          | ¦  «        ‰||f         S t          | j        ¦  «        dk    rt          | ¦  «        S | j        j        dk    r)t          | ¦  «        }|                     dd¦  «        }|}�nX| j        j        dv rt          | ¦  «        }�n9| j        j        dv �r*dd	d
dœ}|| j        j                 \  }}	g }
t          | t          ¦  «        rÈt          |  
                    ¦   «         ¦  «        D ]¥\  }\  }}|t          | ¦  «        dz
  k    }t          |‰dz   d|¬¦  «        }t          |‰dz   |||s|                     ¦   «         dz   dz   nd¬¦  «        }|
                     |                     ¦   «         › d|                     ¦   «         › �¦  «         Œ¦nmt          | ¦  «        D ]]\  }}|t          | ¦  «        dz
  k    }t          |‰dz   |||sdnd¬¦  «        }|
                     |                     ¦   «         ¦  «         Œ^g }g }t          |
¦  «        D �]C\  }}|                     |¦  «         d|d         v }|t          |
¦  «        dz
  k    }|pWt          dd‰dz   z  z  › ¦  «        t          d                     |dd…         ¦  «        ¦  «        z   dt!          |¦  «        z
  k    }|}|sRt          dd‰dz   z  z  › ¦  «        t          d                     |¦  «        ¦  «        z   dt!          |¦  «        z
  k    }|}t#          | ¦  «        t          urt#          | |         ¦  «        n3t#          t%          |                      ¦   «         ¦  «        |         ¦  «        t$          t(          t          fv rd}d}d}t#          | ¦  «        t          urt#          | |         ¦  «        n3t#          t%          |                      ¦   «         ¦  «        |         ¦  «        }t          |¦  «        dk    rot#          | ¦  «        t          urt#          | |dz
           ¦  «        n6t#          t%          |                      ¦   «         ¦  «        |dz
           ¦  «        }||k    }|rd}|�|t          u r|t          u rd}|t          u rd}|dt          fv rd}|rÎt          |¦  «        }|dk    r d}|t          u rHt          dd‰dz   z  z  › ¦  «        t          d                     |dd…         ¦  «        ¦  «        z   dk    }|r$|dd…         D ]}|                     |g¦  «         Œn|                     |dd…         ¦  «         |dd…         }|r|                     |¦  «         g }�ŒEt          |¦  «        dk    r~d}|t          u r@t          dd‰dz   z  z  › ¦  «        t          d                     |¦  «        ¦  «        z   dk    }|r|D ]}|                     |g¦  «         Œn|                     |¦  «         d‰z  › |› d�}ˆfd„|D ¦   «         }|d                     |¦  «        z  }|dd‰z  › |	› �z  }t+          d„ |D ¦   «         ¦  «        Š#‰#Š"‰"r€d                     d„ |D ¦   «         ¦  «        } |› | › |	› �} |dk    r|S t          d‰z  › ¦  «        t          |¦  «        z   t          | ¦  «        z   dk    Š"ˆ"ˆ#fd „}! |!| ¦  «        r	d‰z  › | › �}||t          | ¦  «        ‰||f<   |S )!züFormat python objects of basic built-in type in a pretty way so we could copy-past them to code editor easily.

    Currently, this support int, float, str, list, tuple, and dict.

    It also works with `torch.Tensor` via calling `format_tesnor`.
    Nz<class 'torch.Tensor'>rD  r  z\n)rå   rL  ©rš  rF  r   z[]z()rU  r   zone-line)rá  r  r   rõ  ú,r¹  )rá  r  r   Úprefixr¶  rÐ  é   ró  éx   TFéw   r   rS  c                 óT   •— g | ]$}d d‰dz   z  z  › d                      |¦  «        z   ‘Œ%S )rÐ  rk  r   ró  )r£  )r¥  r½  rá  s     €rá   r¬  z"_format_py_obj.<locals>.<listcomp>>  s9   ø€ Ð\Ð\Ð\Èc˜c Q¨&°1©*Ñ%5Ñ6Ð8¸4¿9º9ÀS¹>¼>ÑIÐ\Ð\Ð\r  rU  c              3   ó   K  — | ]}d |vV — Œ	dS )r  NrI  rÔ  s     rá   r¨  z!_format_py_obj.<locals>.<genexpr>C  s&   è è € Ð%MÐ%M¸ d°! mÐ%MÐ%MÐ%MÐ%MÐ%MÐ%Mr  c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rI  )rZ  rÔ  s     rá   r¬  z"_format_py_obj.<locals>.<listcomp>J  s    € Ð&KÐ&KÐ&K°a q§x¢x¡z¤zÐ&KÐ&KÐ&Kr  c                 óÈ  •— t          | ¦  «        t          t          t          fv �r<g }t          | ¦  «        t          u r2|                     d„ |                      ¦   «         D ¦   «         ¦  «         n<t          | ¦  «        t          t          fv r|                     d„ | D ¦   «         ¦  «         t          d„ |D ¦   «         ¦  «        r=t          | ¦  «        dk    rdS t          | ¦  «        t          | d         ¦  «        urdS ‰S t          t          |¦  «        ¦  «        dk    rdS |d         t          t          fv r‰S |d         t          u rt          | ¦  «        dk    r‰S ‰S dS )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r  ©rê  rÔ  s     rá   r¨  z<_format_py_obj.<locals>.use_one_line_repr.<locals>.<genexpr>Z  s(   è è € Ð,KÐ,K¸­T°!©W¬WÐ,KÐ,KÐ,KÐ,KÐ,KÐ,Kr  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r  rs  rÔ  s     rá   r¨  z<_format_py_obj.<locals>.use_one_line_repr.<locals>.<genexpr>\  s(   è è € Ð,BÐ,B¸­T°!©W¬WÐ,BÐ,BÐ,BÐ,BÐ,BÐ,Br  c              3   óB   K  — | ]}|t           t          t          fv V — Œd S r  rh  rÔ  s     rá   r¨  z<_format_py_obj.<locals>.use_one_line_repr.<locals>.<genexpr>_  s.   è è € ÐKÐK¸˜1¥¥u­dÐ 3Ð3ÐKÐKÐKÐKÐKÐKr  r   Fr   T)rê  rš  rF  r   Úextendrê  Úanyræ  r®  rå   rL  rD  )rR  Úelement_typesÚcould_use_one_lineÚno_new_line_in_elementss     €€rá   Úuse_one_line_reprz)_format_py_obj.<locals>.use_one_line_reprT  sh  ø€ å˜‘9”9¥¥u­dÐ 3Ð3Ñ3à$&�MÝ˜C‘y”y¥DÐ(Ð(Ø%×,Ò,Ð,KÐ,K¸c¿jºj¹l¼lÐ,KÑ,KÔ,KÑKÔKÐKÐKÝ˜c™œ¥t­U mÐ3Ð3Ø%×,Ò,Ð,BÐ,B¸cÐ,BÑ,BÔ,BÑBÔBÐBõ ÐKÐK¸]ÐKÑKÔKÑKÔKð 
7å˜s™8œ8 aš<˜<Ø#( 5õ   ™9œ9­D°°Q´©L¬LÐ8Ð8Ø#( 5ð  7Ð6õ �3˜}Ñ-Ô-Ñ.Ô.°Ò2Ð2Ø$˜uð % QÔ'­Cµ¨<Ð7Ð7à6Ð6Ø& qÔ)­SÐ0Ð0Ý˜s™8œ8 qš=˜=à#:Ð:ð $6Ð5ð �tr  )rõ  rD  r  rX  rë  rf  r’  rç  r   rí  rI  ræ  r  rZ  ry  r£  rå   rê  rš  rê  rF  rƒ  )$rR  rá  r  r   rj  Úquoted_stringrj  ÚparenthesisÚp1Úp2Úelements_without_indentrà  rœ  rD  Úlast_elementÚokÚovrÍ  ÚoÚgroupsr½  Ú
x_expandedÚnot_last_elementÚshould_finalize_xÚshould_finalize_bufÚbuf_not_fit_into_one_lineÚ	prev_typeÚcurrent_typeÚtype_changedÚorig_buf_lenÚnot_fit_into_one_lineÚelement_stringsÚone_line_formr{  ry  rz  s$    `                                @@rá   r  r  ­  sA  øøø€ ð €}Øˆˆåˆs‰GŒG�V˜T 6Ð*¨eÐ3Ð3Ø�"˜S™'œ' 6¨4°Ð8Ô9Ð9õ ˆ3Œ=ÑÔÐ5Ò5Ð5Ý˜cÑ"Ô"Ð"à	ŒÔ	 5Ò	(Ð	(Ý% cÑ*Ô*ˆà%×-Ò-¨d°EÑ:Ô:ˆØˆ‰à	ŒÔ	Ð#3Ð	3Ð	3å�S‘”ˆ‰à	ŒÔ	Ð#<Ð	<Ñ	<àØØð
ð 
ˆð
 ˜Sœ]Ô3Ô4‰ˆˆBà"$ÐÝ�c�4Ñ Ô ð 	;Ý(¨¯ª©¬Ñ5Ô5ð Pð P‘�‘V�a˜Ø"¥c¨#¡h¤h°¡lÒ2�Ý# A¨f°q©j¸zÐQVÐWÑWÔW�Ý#ØØ! A™:ØØØ;GÐO˜2Ÿ9š9™;œ;¨Ñ-°Ñ3Ð3ÈRðñ ô �ð (×.Ò.°"·)²)±+´+Ð/NÐ/NÀÇÂÁÄÐ/NÐ/NÑOÔOÐOÐOðPõ $ C™.œ.ð ;ð ;‘��QØ"¥c¨#¡h¤h°¡lÒ2�Ý"Ø˜f q™j¨t¸5ÐT`ÐIhÈÈÐfhðñ ô �ð (×.Ò.¨q¯xªx©z¬zÑ:Ô:Ð:Ð:àˆØˆÝÐ 7Ñ8Ô8ð C	ñ C	‰FˆC�Ø�JŠJ�q‰MŒMˆMà  R¤˜ˆJØ"¥cÐ*AÑ&BÔ&BÀQÑ&FÒFÐà *ð !,­c°S¸AÀÈ!ÁÑ<LÑ5MÐ2OÑ.PÔ.PÕSVØ—	’	˜#˜b˜c˜cœ(Ñ#Ô#ñTô Tñ /à•cÐ*Ñ+Ô+Ñ+ò/,Ðð
 #-Ðð 'ð @Ý,/°3¸!¸vÈ¹zÑ:JÑ3KÐ0MÑ,NÔ,NÕQTÐUY×U^ÒU^Ð_bÑUcÔUcÑQdÔQdÑ,dÐgjÕmpØ$ñnô nñ hò -Ð)ð '@Ð#õ #' s¡)¤)µ4Ð"7Ð"7•�S˜”X‘”�½TÅ$ÀsÇzÂzÁ|Ä|ÑBTÔBTÐUXÔBYÑ=ZÔ=ZÕ`dÕfkÕmqÐ_rÐrÐrØ$(Ð!Ø&*Ð#ð ˆIÝ-1°#©Y¬Y½dÐ-BÐ-B�4  C¤™>œ>˜>ÍÍTÐRU×R\ÒR\ÑR^ÔR^ÑM_ÔM_Ð`cÔMdÑHeÔHeˆLÝ�3‰xŒx˜!Š|ˆ|Ý26°s±)´)Å4Ð2GÐ2G�D  S¨1¡W¤Ñ.Ô.Ð.ÍTÕRVÐWZ×WaÒWaÑWcÔWcÑRdÔRdÐehÐklÑelÔRmÑMnÔMn�	Ø+¨yÒ8�Øð /Ø*.Ð'ð Ð  Yµ#Ð%5Ð%5¸,Í#Ð:MÐ:MØ&+Ð#ð �sÐ"Ð"Ø$)Ð!à ¥s Ð+Ð+Ø*/Ð'à"ð Ý" 3™xœx�à !Ò#Ð#Ø,0Ð)ð !¥CÐ'Ð'å03°s¸aÀ6ÈAÁ:Ñ>NÑ7OÐ4QÑ0RÔ0RÕUXÐY]×YbÒYbÐcfÐgjÐhjÐgjÔckÑYlÔYlÑUmÔUmÑ0mÐpwÒ0wÐ-à,ð 0Ø!$ S b S¤ð /ð /˜AØ"ŸMšM¨1¨#Ñ.Ô.Ð.Ð.ð/ð Ÿš c¨#¨2¨#¤hÑ/Ô/Ð/à˜b˜c˜cœ(�Cà$ð Ø—M’M #Ñ&Ô&Ð&Ø�Cùõ ˆs‰8Œ8�aŠ<ˆ<Ø$(Ð!Ø�sÐ"Ð"å(+¨s°a¸6ÀA¹:Ñ6FÑ/GÐ,IÑ(JÔ(JÍSÐQU×QZÒQZÐ[^ÑQ_ÔQ_ÑM`ÔM`Ñ(`ÐcfÒ(fÐ%à$ð #Øð 'ð '�AØ—M’M 1 #Ñ&Ô&Ð&Ð&ð'ð —’˜cÑ"Ô"Ð"à˜fÑ$Ð, bÐ,Ð,Ð,ˆØ\Ð\Ð\Ð\ÐU[Ð\Ñ\Ô\ˆØ�%—*’*˜_Ñ-Ô-Ñ-ˆØÐ-�w Ñ'Ð-¨Ð-Ð-Ñ-ˆõ #&Ð%MÐ%M¸_Ð%MÑ%MÔ%MÑ"MÔ"MÐà4Ðð ð 7	>Ø ŸIšIÐ&KÐ&K¸?Ð&KÑ&KÔ&KÑLÔLˆMØ!Ð6 =Ð6°"Ð6Ð6ˆMà�zÒ!Ð!Ø�õ "%¨°&Ñ(8Ð%:Ñ!;Ô!;½cÀ&¹k¼kÑ!IÍCÐP]ÑL^ÔL^Ñ!^ÐbeÒ!eÐð(ð (ð (ð (ð (ð (ðV !Ð  Ñ%Ô%ð >Ø# fÑ,Ð=¨mÐ=Ð=�à-3€E�2ˆc‰7Œ7�F˜D &Ð
)Ñ*à€Mr  c                 ó‚   — t          | d¦  «        5 }|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÏ  )rì  r  )r  Úcontentrü  s      rá   Ú
write_filer”  ‡  sƒ   € Ý	ˆd�C‰Œð ˜AØ	�Š�ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘4´8»8c                 ó~   — t          | d¦  «        5 }t          j        |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NÚr)rì  ÚjsonÚload)r  Úfhs     rá   Úread_json_filerš  Œ  s|   € Ý	ˆd�C‰Œð ˜BÝŒy˜‰}Œ}ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘2²6¹6c                   óN   — 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ZdZdZdZdS )ÚColorsz0ANSI color codes for terminal output formatting.z[0mz[1mz[2mz[31mz[32mz[33mz[34mz[35mz[36mz[37mz[91mz[92mz[93mz[94mz[96mN)rë  r  r  r  ÚRESETÚBOLDÚDIMÚREDÚGREENÚYELLOWÚBLUEÚMAGENTAÚCYANÚWHITEÚ
BRIGHT_REDÚBRIGHT_GREENÚBRIGHT_YELLOWÚBRIGHT_BLUEÚBRIGHT_CYANrI  r  rá   rœ  rœ  —  sc   € € € € € Ø:Ð:à€EØ€DØ
€Cð €CØ€EØ€FØ€DØ€GØ€DØ€Eð €JØ€LØ€MØ€KØ€K€K€Kr  rœ  c                   óø   ‡ — e Zd ZdZej        ej        ej        z   ej	        ej
        ej        ej        ej        ej        ej        ej        ej        z   iZh d£Zd
dedz  dedz  fˆ fd„Zdej        defd	„Zˆ xZS )ÚColoredFormatterz5Custom formatter that adds colors based on log level.>   r¬  r|  ÚhttpcoreÚrequestsNÚfmtÚdatefmtc                 óL   •— t          ¦   «                              ||¦  «         d S r  r  )r÷  r°  r±  r  s      €rá   rø  zColoredFormatter.__init__½  s#   ø€ Ý‰Œ×Ò˜˜gÑ&Ô&Ð&Ð&Ð&r  Úrecordr©  c           	      óV  — |j         | j        v }|r_|                      || j        ¦  «        }|                     ¦   «         }t
          j        › |› d|j         › d|j        d›d|› t
          j        › �	S | j	         
                    |j        t
          j        ¦  «        }|j        }|› |d›t
          j        › �}t
          j        › |                      || j        ¦  «        › t
          j        › �}t
          j        › |j         › t
          j        › �}	|                     ¦   «         }|› d|	› d|› d|› �S )Nr×  Ú8)r;  ÚDIMMED_LOGGERSÚ
formatTimer±  Ú
getMessagerœ  rŸ  Ú	levelnamer�  ÚLEVEL_COLORSrz  Úlevelnor£  )
r÷  r³  Ú	is_dimmedÚ	timestamprð  Úcolorr¹  Úcolored_levelnameÚcolored_timeÚcolored_names
             rá   ÚformatzColoredFormatter.formatÀ  s@  € à”K 4Ô#6Ð6ˆ	àð 	oàŸš¨°´Ñ=Ô=ˆIØ×'Ò'Ñ)Ô)ˆGÝ”jÐn )ÐnÐn°´ÐnÐnÀÔ@PÐnÐnÐnÐW^ÐnÕ`fÔ`lÐnÐnÐnð Ô!×%Ò% f¤nµf´lÑCÔCˆð Ô$ˆ	Ø$ÐA iÐAÐAµ6´<ÐAÐAÐõ !œ*Ð[ d§o¢o°f¸d¼lÑ&KÔ&KÐ[ÍVÌ\Ð[Ð[ˆõ !œ+ÐB v¤{ÐBµF´LÐBÐBˆð ×#Ò#Ñ%Ô%ˆàÐSÐS <ÐSÐSÐ4EÐSÐSÈ'ÐSÐSÐSr  rC  )rë  r  r  r  r   ÚDEBUGrœ  rŸ  r¥  ÚINFOr¦  ÚWARNINGr©  ÚERRORr§  ÚCRITICALrž  rº  r¶  rD  rø  Ú	LogRecordrÂ  r  r  s   @rá   r­  r­  ¯  sã   ø€ € € € € Ø?Ð?ð 	Œ�v”z F¤KÑ/ØŒ�f”lØŒ˜Ô-ØŒ�vÔ(ØÔ˜&œ+¨Ô(9Ñ9ð€Lð BÐAÐA€Nð'ð '˜C $™Jð '¸¸d¹
ð 'ð 'ð 'ð 'ð 'ð 'ðT˜WÔ.ð T°3ð Tð Tð Tð Tð Tð Tð Tð Tr  r­  Ú_warn_once_loggedc                  óà  — t          j        d¦  «        } |                      t           j        ¦  «         | j        s¬t          j        t          j        ¦  «        }|                     t           j        ¦  «         t          j                             ¦   «         rt          d¬¦  «        }nt          j
        dd¬¦  «        }|                     |¦  «         |                      |¦  «         d| _        | S )a  Initialize a test-specific logger with colored stderr handler and INFO level for tests.

    Uses a named logger instead of root logger to avoid conflicts with pytest-xdist parallel execution.
    Uses stderr instead of stdout to avoid deadlocks with pytest-xdist output capture.
    ztransformers.training_testz%Y-%m-%d %H:%M:%S)r±  z4%(asctime)s - %(name)s - %(levelname)s - %(message)sF)r   Ú	getLoggerÚsetLevelrÄ  Úhandlersr%  rú  rý  Úisattyr­  Ú	FormatterÚsetFormatterr(  Ú	propagate)r#  ÚchÚ	formatters      rá   Úinit_test_loggerrÔ  à  sØ   € õ ÔÐ;Ñ<Ô<€FØ
‡O‚O•G”LÑ!Ô!Ð!ð Œ?ð åÔ"¥3¤:Ñ.Ô.ˆØ
�Š•G”LÑ!Ô!Ð!õ Œ:×ÒÑÔð 	Ý(Ð1DÐEÑEÔEˆIˆIåÔ)ØFÐPcðñ ô ˆIð 	�Š˜	Ñ"Ô"Ð"Ø×Ò˜"ÑÔÐà€FÔØ€Mr  Úlogger_instancer
  c                 óz   — |t           vr1|                      |¦  «         t                                |¦  «         dS dS )a:  Log a warning message only once per unique message.

    Uses a global set to track messages that have already been logged
    to prevent duplicate warning messages from cluttering the output.

    Args:
        logger_instance: The logger instance to use for warning.
        msg: The warning message to log.
    N)rÉ  ÚwarningÚadd)rÕ  r
  s     rá   Ú	warn_oncerÙ  þ  sF   € ð Õ#Ð#Ð#Ø×Ò Ñ$Ô$Ð$Ý×Ò˜cÑ"Ô"Ð"Ð"Ð"ð $Ð#r  ÚMemoryStats©Úrss_gibÚrss_pctÚvms_gibÚpeak_rss_gibÚpeak_rss_pctÚavailable_gibÚ	total_gibc                   óT   — e Zd ZdZd„ Zdedefd„Zdedefd„Zdd„Z	de
fd	„Zdd
„ZdS )ÚCPUMemoryMonitorz1Monitor CPU memory usage for the current process.c                 óH  — d| _         d| _        d | _        d| _        d| _        t          ¦   «         rpdd l}|                     t          j	        ¦   «         ¦  «        | _        | 
                    ¦   «         }|j        | _        |                      | j        ¦  «        | _        d S d S )NÚCPUr   )Údevice_nameÚ	_peak_rssÚ_processr  Útotal_memory_gibrd   r   r¼  rØ   Úgetpidr  r  Ú_to_gib)r÷  r   Úmem_infos      rá   rø  zCPUMemoryMonitor.__init__  s�   € Ø ˆÔØˆŒØˆŒØˆÔØ !ˆÔåÑ Ô ð 	DØˆMˆMˆMà"ŸNšN­2¬9©;¬;Ñ7Ô7ˆDŒMØ×,Ò,Ñ.Ô.ˆHØ (¤ˆDÔØ$(§L¢L°Ô1BÑ$CÔ$CˆDÔ!Ð!Ð!ð	Dð 	Dr  Úmemory_in_bytesr©  c                 ó   — |dz  S )zConvert bytes to GiB.rÿ  rI  ©r÷  rî  s     rá   rì  zCPUMemoryMonitor._to_gib.  s   € àÐ"4Ñ5Ð5r  c                 ó6   — | j         dk    rdS d|z  | j         z  S )z,Convert bytes to percentage of total memory.r   g        g      Y@)r  rð  s     rá   Ú_to_pctzCPUMemoryMonitor._to_pct2  s(   € àÔ Ò!Ð!Ø�3Ø�Ñ&¨Ô):Ñ:Ð:r  Nc                 óˆ   — | j         �:| j                              ¦   «         j        }t          | j        |¦  «        | _        dS dS )zUpdate peak memory tracking.N)ré  Úmemory_infoÚrssr‰  rè  )r÷  Úcurrent_rsss     rá   Ú_update_peakzCPUMemoryMonitor._update_peak8  s?   € àŒ=Ð$Øœ-×3Ò3Ñ5Ô5Ô9ˆKÝ  ¤°Ñ=Ô=ˆDŒNˆNˆNð %Ð$r  c                 óN  — t          ¦   «         st          ddddddd¦  «        S ddl}|                      ¦   «          | j                             ¦   «         }|                     ¦   «         }t          |                      |j        ¦  «        |  	                    |j        ¦  «        |                      |j
        ¦  «        |                      | j        ¦  «        |  	                    | j        ¦  «        |                      |j        ¦  «        |                      |j        ¦  «        ¬¦  «        S )zGet current memory statistics.r   NrÛ  )rd   rÚ  r   r÷  ré  rô  r  rì  rõ  rò  Úvmsrè  Ú	availabler  )r÷  r   rí  Úsys_mems       rá   Ú	get_statszCPUMemoryMonitor.get_stats>  sø   € å"Ñ$Ô$ð 	4Ý˜q ! Q¨¨1¨a°Ñ3Ô3Ð3àˆˆˆà×ÒÑÔÐà”=×,Ò,Ñ.Ô.ˆØ×'Ò'Ñ)Ô)ˆåØ—L’L ¤Ñ.Ô.Ø—L’L ¤Ñ.Ô.Ø—L’L ¤Ñ.Ô.ØŸš d¤nÑ5Ô5ØŸš d¤nÑ5Ô5ØŸ,š, wÔ'8Ñ9Ô9Ø—l’l 7¤=Ñ1Ô1ð
ñ 
ô 
ð 	
r  c                 ó^   — | j         �%| j                              ¦   «         j        | _        dS dS )zReset peak memory tracking.N)ré  rô  rõ  rè  rÿ  s    rá   Úreset_peak_statsz!CPUMemoryMonitor.reset_peak_statsT  s.   € àŒ=Ð$Ø!œ]×6Ò6Ñ8Ô8Ô<ˆDŒNˆNˆNð %Ð$r  r—  )rë  r  r  r  rø  rå   rL  rì  rò  r÷  rÚ  rü  rþ  rI  r  rá   rä  rä    s³   € € € € € Ø;Ð;ðDð Dð Dð6 sð 6¨uð 6ð 6ð 6ð 6ð; sð ;¨uð ;ð ;ð ;ð ;ð>ð >ð >ð >ð
˜;ð 
ð 
ð 
ð 
ð,=ð =ð =ð =ð =ð =r  rä  c                 ó¬   — t          ¦   «         }| �Ct          ¦   «         r |                      d|j        d›d�¦  «         n|                      d¦  «         |S )zÍBuild and initialize a CPU memory monitor.

    Args:
        logger_instance: Optional logger to log initialization info. If None, no logging is done.

    Returns:
        CPUMemoryMonitor instance.
    Nz CPU memory monitor initialized: z.2fz
 GiB totalz0psutil not available, memory monitoring disabled)rä  rd   rë  rê  r×  )rÕ  Úmonitors     rá   Úbuild_cpu_memory_monitorr  Z  sg   € õ Ñ Ô €GØÐ"ÝÑ Ô ð 	XØ× Ò Ð!lÀGÔD\Ð!lÐ!lÐ!lÐ!lÑmÔmÐmÐmà×#Ò#Ð$VÑWÔWÐWØ€Nr  Úfolderc                 ó  — t          j        | ¦  «        D �]ê}t           j                             | |¦  «        }|                     d¦  «        rc|                     dd¦  «                             dd¦  «        }t          |¦  «        }t          j        |¦  «         t          j	        ||¦  «         Œ›|t          k    �rCt           j                             | t          ¦  «        }t          |¦  «        5 }t          j        |                     ¦   «         ¦  «        }ddd¦  «         n# 1 swxY w Y   t          j        |¦  «         d|                     ¦   «         v rQ|d         }i }|                     ¦   «         D ]2\  }	}
|
                     dd¦  «                             dd¦  «        ||	<   Œ3||d<   t          |d¦  «        5 }|                     t          j        |d¬	¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   �ŒìdS )
zšConvert all safetensors files into torch bin files, to mimic saving with torch (since we still support loading
    bin files, but not saving them anymore)z.safetensorsz.binrì  Úpytorch_modelNÚ
weight_maprÏ  rk  )rá  )rØ   ÚlistdirrŸ  r£  r¢  r’  rÒ   rH  r®  Úsaver&   r(   rì  r—  Úloadsr¯  r›  rI  r  Údumps)r  r  rŸ  Únew_pathÚ
state_dictrü  Úindexr  Únew_weight_maprœ  rD  s              rá   Úconvert_all_safetensors_to_binsr  l  sB  € õ ”
˜6Ñ"Ô"ð 5ñ 5ˆÝŒw�|Š|˜F DÑ)Ô)ˆØ�=Š=˜Ñ(Ô(ð 	5Ø—|’| N°FÑ;Ô;×CÒCÀGÈ_Ñ]Ô]ˆHÝ" 4™œˆJÝŒI�d‰OŒOˆOÝŒJ�z 8Ñ,Ô,Ð,Ð,àÕ,Ò,Ñ,Ý”w—|’| FÕ,>Ñ?Ô?ˆHÝ�d‘”ð -˜qÝœ
 1§6¢6¡8¤8Ñ,Ô,�ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -åŒI�d‰OŒOˆOØ˜uŸzšz™|œ|Ð+Ð+Ø" <Ô0�
Ø!#�Ø&×,Ò,Ñ.Ô.ð lð l‘D�A�qØ()¯	ª	°.À&Ñ(IÔ(I×(QÒ(QÐRYÐ[jÑ(kÔ(k�N 1Ñ%Ð%Ø"0ˆE�,ÑÝ�h Ñ$Ô$ð 5¨Ø—’�œ
 5°Ð3Ñ3Ô3Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ùð'5ð 5s$   Ã0'D#Ä#D'	Ä*D'	Æ>*G4Ç4G8	Ç;G8	c               #   óŠ   ‡K  — 	 t           j        Šˆfd„} | t           _        dV — ‰t           _        dS # ‰t           _        w xY w)z¯Since we don't support saving with torch `.bin` files anymore, but still support loading them, we use this context
    to easily create the bin files and try to load them backc                 ó@   •—  ‰| |g|¢R i |¤Ž t          |¦  «         d S r  )r  )r÷  Úsave_directoryr  r  Úoriginal_saves       €rá   Únew_savez2force_serialization_as_bin_files.<locals>.new_saveŽ  s9   ø€ ØˆM˜$ Ð@°Ð@Ð@Ð@¸Ð@Ð@Ð@Ý+¨NÑ;Ô;Ð;Ð;Ð;r  N)rÓ   Úsave_pretrained)r  r  s    @rá   Ú force_serialization_as_bin_filesr  †  sb   øè è € ð8å'Ô7ˆð	<ð 	<ð 	<ð 	<ð 	<ð +3�Ô'àˆˆˆà*7�Ô'Ð'Ð'ø¨-�Ô'Ð7Ð7Ð7Ð7s	   …!4 ´A)Fr  )rM  )rü  )r  )NNNFF)NNr&  FT)rÁ  )r¬  NN)r¬  r½   rC  )TN)r   N)r   r¹  Nr¹  (
  rÏ  r`  Ú
contextlibrx  r  r  r`  rë  r�  r—  r   r·  rØ   rº  r�  r  r  rú  r9  rs  rŸ  r«  r§  ró   r   r   Úcollections.abcr   r   r   r   r	   r
   Údataclassesr   r   r   r   r$  r   Úpathlibr   Útypingr   r   r   Úunittest.mockr   r¬  Úhuggingface_hubr   r   Ú	packagingr   Útransformersr-  r¨  r   Úintegrationsr   r   r   r   r   r    r!   Úintegrations.deepspeedr"   Úutilsr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   Úaccelerate.stater’   r“   Úaccelerate.utils.importsr”   Ú_pytest.doctestr•   r–   r—   r˜   r™   rš   r›   Ú_pytest.outcomesrœ   Ú_pytest.pathlibr�   rô   rž   r}  ÚSMALL_MODEL_IDENTIFIERÚDUMMY_UNKNOWN_IDENTIFIERÚDUMMY_DIFF_TOKENIZER_IDENTIFIERÚUSERÚENDPOINT_STAGINGÚTOKENÚ_COMMON_MODEL_NAMES_MAPÚ_VLM_COMMON_MODEL_NAMES_MAPÚ_TEXT_MODEL_TESTER_DEFAULTSr®  Úsafetensors.torchrÒ   Úmodeling_utilsrÓ   Úhiprú  r¯  rh  r  ri  rj  Ú
get_loggerrë  r#  râ   ræ   r
  r£  r'  rò   rü   r   r  r  rö   rý   r  r  r  r  r  r  r%  r(  r*  r,  r/  r1  r4  r6  r9  r;  r=  r@  rD  rE  rJ  rL  rO  rQ  rT  rV  rY  r\  r^  ra  rc  re  rg  rk  rp  rt  rz  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Æ  rÉ  rË  rÏ  rÑ  rÖ  rÙ  rÛ  rÝ  rß  rÙ   ÚbackendÚimport_modulerÔ  ÚModuleNotFoundErrorr  r¶  r  rÚ   r  r*  rå  rð  rò  rõ  rø  rû  rL  r  r	  r  r  r  r  r!  r#  r)  r+  r-  r/  r1  r3  r5  r7  r:  r<  r>  r@  rB  rE  rG  rI  rK  rM  rO  rR  rU  rW  rY  r[  r]  r_  ra  rc  re  rg  ri  rk  rm  ro  rq  rs  ru  rw  ry  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!  r2  r4  ÚPathLikerI  rC  rK  r¡  r´  r¹  r½  rÿ  r  r  r  r%  r‘  r2  r:  r>  r^  rb  rQ  rd  rl  rn  r¤  r®  r±  rÈ  rã  rî  ÚDocTestParserrð  rû  r!  Úmanual_seedr)  Úempty_cacher,  r°  r1  Úreset_max_memory_allocatedr3  Úmax_memory_allocatedr9  Úreset_peak_memory_statsr6  Úmemory_allocatedr<  Úsynchronizer?  rB  rÔ  râ  rÕ   rÔ   r*  r.  rµ  r4  r7  r:  r=  r@  rC  rK  Úis_filerŸ  r�  ÚrealpathÚdevice_spec_dirry  r  Úimport_namerI  ÚDEVICE_NAMErç  rJ  r
  rM  r^  rd  rF  rŒ  rŽ  r  rr  rt  rš  rÌ  ræ  rì  r÷  r  r$  rD  rø  rO  rX  rf  r  r”  rš  rœ  rÏ  r­  r®  rÉ  rù  ÚLoggerrÔ  rÙ  Ú
namedtuplerÚ  rä  r  r  r  rI  r  rá   ú<module>rG     s)  ðð €
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ %Ð %Ð %Ð %Ð %Ð %Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø Ð Ð Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8ð ð Ø Ð Ð Ð Ð Ð Ð à€Gðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ;Ð :Ð :Ð :Ð :Ð :ðpð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pð pðf ÐÑÔð :Ø?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø9Ð9Ð9Ð9Ð9Ð9ð ÐÑÔð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð%Ð%Ð%Ð%Ð%Ø+Ð+Ð+Ð+Ð+Ð+Ø"Ð"Ð"Ð"Ð"Ð"Ð"à€FØ€Kð 6Ð Ø3Ð Ø"AÐ ð %€Ø2Ð ð 	0€ð
 Ø$Ø 6Ø%@Ø":ðð Ð ð Ø%Ø)Ø$>ð	ð Ð ðØ�"ðà�!ðð �4ðð �dð	ð
 �$ðð �"ðð �2ðð ˜ðð ˜1ðð ˜1ðð ˜ðð �&ðð ˜sðð �Aðð �Aðð  �Að!ð" �qð#ð$ ØØ')ØØØØð1ð ð Ð ð8 ÐÑÔð Ø€L€L€LØ+Ð+Ð+Ð+Ð+Ð+à/Ð/Ð/Ð/Ð/Ð/à”]Ô&¨dÐ2€NØ”]Ô'¨tÐ3€NØ�G˜EœM¨5°$Ñ7Ô7¸tÐC€MØ�G˜E 5¨$Ñ/Ô/°tÐ;€M€Mà€NØ€NØ€MØ€Mà	(Ð	Ô	(¨Ñ	2Ô	2€ñð ð ð ñ 
ð 
ð 
ð 
ð &Ð% j¸%Ð@Ñ@Ô@€Ø&Ð& {¸DÐAÑAÔAÐ Ø,Ð,Ð-DÈeÐTÑTÔTÐ Ø"Ð"Ð#;ÀUÐKÑKÔK€Ø)Ð)Ð*>ÈÐMÑMÔMÐ Ø&Ð&Ð'8À%ÐHÑHÔHÐ Ø)Ð)Ð*>ÈÐMÑMÔMÐ Ø0Ð0Ð1LÐVZÐ[Ñ[Ô[Ð ð<ð <ð <ð"=ð =ð =ð :ð :ð :ð=ð =ð =ð Dð Dð Dð Kð Kð Kð?ð ?ð ?ðð ð ð	ð 	ð 	ð_ð _ð _ð^ð ^ð ^ð_ð _ð _ð_ð _ð _ðeð eð eðUð Uð Uð_ð _ð _ðeð eð eðVð Vð Vðcð cð cðUð Uð Uð 6Lð ð ¨sð ð ð ð ð '9ð 
ð 
 ð 
ð 
ð 
ñ 
ð 0@ð ð ¨ð ð ð ñ ñð ¨ð ð ð ñ ðYð Yñ YðYð Yñ YðWð Wñ Wð]ð ]ñ ]ðUð Uñ Uðað añ aðdð dñ dðað añ aðUð Uñ UðYð Yñ YðYð Yñ Yð¨Cð ð ð ñ ð°cð ð ð ñ ðað añ aðgð gñ gðjð jñ jðjð jñ jðð ñ ð
ð 
ñ 
ð
ð 
ñ 
ðUð Uñ Uð¨3ð ð ð ñ ðcð cñ cðað añ aðað añ aðgð gñ gðað añ aðWð Wñ WðWð Wñ Wðað añ aðYð Yñ Yðcð cñ cðð ñ ðYð Yñ YðWð Wñ Wðmð mñ mðð ñ ð
¡Cð 
ð 
ð 
ñ 
ð	eð 	eñ 	eðvð vñ vð	kð 	kñ 	kð	ð 	ñ 	ð^ð ^ñ ^ðð ñ ðað añ aðað añ að
gð 
gñ 
gð\ð \ñ \ð`ð `ñ `ð\ð \ñ \ð
gð 
gñ 
gð
gð 
gñ 
gð ÐÑÔñ 9à€L€L€Là" b¥jÐ0Ð0Ø•*Ð8Ô9‰ð	Ø'�	Õ'©Ñ0Ô0‰AˆAøÙ"ð 	ð 	ñ 	Ø%Ñ%ð%Áð %ð %Ù!"ð%ð %ñô ñ ðøùùøð	øøøð " R¥ZÐ/Ñ/Ø•zÐ"<Ô=‰Ù˜6Ò!Ð!¨%¬*×*AÓ*AÑ*CÔ*CÐ!Ø‘*ð C©Lð  Cð  Cð  Cñô ð ñ ˜5Ò Ð Ð)?Ð)?Ñ)AÔ)AÐ Ø‘*ð B©Lð  Bð  Bð  Bñô ð ñ ˜5Ò Ð Ð)?Ð)?Ñ)AÔ)AÐ Ø‘*ð B©Lð  Bð  Bð  Bñô ð ñ ˜5Ò Ð Ð)?Ð)?Ñ)AÔ)AÐ Ø‘*ð B©Lð  Bð  Bð  Bñô ð ñ ˜5Ò Ð Ð)?Ð)?Ñ)AÔ)AÐ Ø‘*ð B©Lð  Bð  Bð  Bñô ð ð	à�•™\Ñ*Ô*‰AˆAøÙð 	ð 	ñ 	Ø‘,ØvÑhtÐvÐvñô áðøùùøð	øøøð 
Œ×	 Ó	 Ñ	"Ô	"ð Ø‰ˆØ	Ð	Ñ	!Ô	!ð 	Ø‰ˆØ	Ð	Ñ	!Ô	!ð Ø‰ˆØ	Ð	Ñ	!Ô	!ð Ø‰ˆØ	Ð	Ñ	!Ô	!ð Ø‰ˆà‰ˆà�Lð[ð [ñ [ð
	ð 	ñ 	ðoð oñ oð
Xð Xñ Xð
Vð Vñ Vð
wð wñ wñ

ð 
©Uð 
ð 
ð 
ñ 
ñð ©uð ð ð ñ ñRÀrð Rð Rð R¹uð Rð Rð Rñ Rð ð ñ ðð ñ ðð ñ ð
hð 
hñ 
hðð ñ ðð ñ ð ð ñ ðcð cñ cð
Yð Yñ Yð
]ð ]ñ ]ð
Yð Yñ YðXð Xñ Xð[ð [ñ [ð[ð [ñ [ðWð Wñ Wð[ð [ñ [ð_ð _ñ _ðUð Uñ UðUð Uñ UðUð Uñ UðUð Uñ UðQð Qñ QðYð Yñ Yðeð eñ eð[ð [ñ [ðXð Xñ Xð_ð _ñ _ðSð Sñ Sð`ð `ñ `ðið iñ iðqð qñ qðað añ aðWð Wñ Wðð ñ ðcð cñ cð]ð ]ñ ]ð[ð [ñ [ðað añ aðcð cñ cðWð Wñ Wð[ð [ñ [ð_ð _ñ _ðfð fñ fðeð eñ eð]ð ]ñ ]ðcð cñ cð)ð )ñ )ðfð fñ fð[ð [ñ [ðð ñ ð[ð [ñ [ðYð Yñ Yð]ð ]ñ ]ð]ð ]ñ ]ðYð Yñ Yðfð fñ fð :Tð ð °3ð ð ð ñ ð	ð 	ñ 	ñð ð ñ ð. ð ©Sð ñ ð ñ ñ
%Ù™T #¡u *Ô-Ô.ð
%à‰t�C™�JÔ  tÐ+Ô,ð
%ñ 
%ð 
%ñ 
%ñ86ð 6ñ 6ñMð Mñ MñAð Añ Añ*3ð 3ñ 3ð*bð bñ bð bñ bñ bô bñ bðV3ð 3ñ 3ð 3ñ 3‘Jñ 3ô 3ñ 3ð3ð 3ñ 3ð 3ñ 3‘Jñ 3ô 3ñ 3ð()ð ()ñ ()ð ()ñ ()ñ ()ô ()ñ ()ðV Ôñ7ð 7ñ Ôñ7ð(Vð Vñ Vð Vñ Vñ Vô Vñ Vð@ Ôñ˜˜b�kÑ)ð ¨h°t¬nð ñ ð ñ Ôñð(X&ð X&ñ X&ð X&ñ X&�8Õ$ñ X&ô X&ñ X&ñv/ð /ñ /ð Ôñ+ð +ñ Ôñ+ðB Ñ ñ*ð *ñ *ñ&B)ð B)ñ B)ðP €��ðð ñ ð ñ ñ ô ñ ñð ñ ñ&0ð &0Ñblð &0ñ &0ð &0ñ &0ñRð Ñ`jð ñ ð ñ ñ,ð ñ ñ"ð "ñ "ñ7ñ 7ð 7ñ 7ñ6,ð ,ñ ,ñ"ð ñ ð	ð 	ñ 	ð 	ñ 	™iñ 	ô 	ñ 	ññ ™˜cœð ñ ð ñ ð"8+ð 8+ñ 8+ð 8+ñ 8+ñ 8+ô 8+ñ 8+ñv&ñ &™3ñ &±u¸t±|ñ &ÐY\Ð_cÑYcð &ñ &ð &ñ &ñRñ ™Cñ ¹À¹ð ñ ð ñ ñ0ð ñ ñ$(.ñ (.ð (.ñ (.ñV7ð 7ñ 7ðtñð ñ ð:++ð ++ñ ++ð ++ñ ++�gÕ+ñ ++ô ++ñ ++ð\I_ð I_ñ I_ð I_ñ I_�fñ I_ô I_ñ I_ñX cñ ¹4ÀÀXÀÔ;Nð ñ ð ñ ð  ÐÑÔð 99ð ”
Õ&ØÕ ØÕ$ñð Ñð ”
Õ&ØØñð Ñð ”
Õ'ÙˆyÙ�9ñð Ñð ”
Õ5ØØñ*ð *Ñ&ð ”
Õ/ØØñ$ð $Ñ ð ”
Õ2ØØñ'ð 'Ñ#ð ”
Õ+ØØñ ð  Ñð ”
Õ&ØØñð Ñð ”
ØØñ(ð (Ñ$Ð$ñ % dÐ+ÑÙ$ dÐ+ÑÙ%¡y yÐ1ÑÙ*3°TÐ):Ñ&Ù'0°$Ð&7Ñ#Ù$-¨q >Ñ Ù )¨1˜~ÑÙ$ dÐ+ÑÙ(1°4Ð'8Ñ$ð ÐÑÔð 8Ø!&¥Õ!6Ñ˜ÑØ"'¥)Õ"8Ñ˜ÑØ.3­iÑ$ UÑ+àÐÑÔð 8Ø!&¥Õ!6Ñ˜ÑØ!&¥Õ!6Ñ˜ÑØ"'¥)Õ"8Ñ˜ÑØ.3­iÑ$ UÑ+àÐÑÔð 8Ø!&¥Õ!6Ñ˜ÑØ!&¥Õ!6Ñ˜ÑØ"'¥)Õ"8Ñ˜ÑØ.3­iÑ$ UÑ+àÐÑÔð 	8Ø!&¥Õ!6Ñ˜ÑØ!&¥Õ!6Ñ˜ÑØ"'¥)Õ"8Ñ˜ÑØ05µ	Õ0QÑ& uÑ-Ø-2­YÕ-NÑ# EÑ*Ø*/­)Õ*HÑ  Ñ'Ø&+¥iÕ&@Ñ˜UÑ#Ø!&¥Õ!6Ñ˜ÑØ.3­iÑ$ UÑ+ð ÐÑÔð :Ø!&¤Õ!7Ñ™ÑØ!&¤Õ!7Ñ™ÑØ"'¤*Õ"9Ñ™ÑñH ñ H©3ð Hñ Hð Hñ HñB ð Bñ Bð Bñ BñC ð Cñ Cð Cñ CñQ¨sð Qñ Qð Qñ QñN¨Cð Nñ Nð Nñ NñK¨ð Kñ Kð Kñ KñG Sð Gñ Gð Gñ GñB ð Bñ Bð Bñ BñO¨Sð Oñ Oð Oñ Oð ÐÑÔñ 1Jñ '¨"­*Ð4Ñ4Ø�:Ñ&EÔFÑØˆtÑ$Ñ%Ô%×-Ó-Ñ/Ô/ð 	Ø‘*ÙnÑ\lÐnÐnñô ð ð  �WŸ]›]¨2­7×+;Ó+;Ñ<LÑ+MÔ+MÑNÔNÑ‰™Ø��‹™Ñ(Ô(Ð(ð	vÙ*Ð+JÑ-=×-CÓ-CÁEÑ-JÔ-JÐ+JÔK‰KˆKøÙð 	vð 	vñ 	vØ‘*ÑmÑ[kÐmÐmÑnÔnÑtuÐuøùùøð	vøøøð 5˜YÕ4±[ÑAÔAÑð	ZÙ,Õ8‰KˆKøÙð 	Zð 	Zñ 	ZØ ‘.Ñ!QÑRÔRÑXYÐYøùùøð	Zøøøð &¨­Ð3Ð3¹ÉÒ8SÐ8Sñ RÑWcð  Rñ  Rñ  BMð  Rñ  Rð  R‰CÙÑcÑc‰CØ‘*™S‘/”/Ð!á"‰ñ
	±T¸#¸x¸-Ô5Hñ 
	ÐZ]ð 
	ñ 
	ð 
	ñ 
	ð 	!Ñ Ñ!4Ñ6FÑGÔGÐGØ Ñ Ñ!4Ñ6FÑGÔGÐGØ Ñ Ñ!5Ñ7HÑIÔIÐIñ)ð )ñ )ñ6 ññ �Cð ñ ð ñ „ññ ˜˜t™¡S¨4¡Z±°t±Ð;Ô<Ñ á˜s T™z¨4±#©:¹¹cÁ3¸h¼Ñ+GÐGÔHÑ ð ð&Ñ/ð &ñ &ð &ñ „ñ&ð: 15ñ%ñ %Ù&¨Ñ-ð%áð%ñ %ð %ñ %ð$Kð Kñ Kð Kñ K�8Ñ2°CÐ7Ô8ñ Kô Kñ Kñ\ ð  ñ  ñ4rð rñ rñj9ð 9ñ 9ñx	ð 	ñ 	ñ_Að _Añ _AñDM1ð M1ñ M1ñ`$ð $ñ $ñNrð rñ rñ<Mñ M�Sñ M©#ñ M¹Dñ MÉdÐUYÉkð Mñ Mð Mñ Mñ(Cñ Cð Cñ CñLð ñ ñ,Wñ Wð Wñ Wñtð ñ ñ
ð ñ ðð ñ ð ñ ñ ô ñ ð0+Tð +Tñ +Tð +Tñ +T�wÕ(ñ +Tô +Tñ +Tð\ "™c™eœeÑ ‘3�s”8Ñ #Ñ #Ñ #ð˜'�.ð ñ ð ñ ñ<#˜w�~ñ #°Cð #¸Dð #ñ #ð #ñ #ð  %ˆkÕ$Ùðñ ð ñô �ð;=ð ;=ñ ;=ð ;=ñ ;=ñ ;=ô ;=ñ ;=ñ|ñ ¨g­n¸tÑ.Cð ÑO_ð ñ ð ñ ñ$5¨Cð 5ñ 5ð 5ñ 5ð4 ñ8ð 8ñ „ñ8ð 8ð 8s`   Ò9S ÓS1ÓS*Ó*S1×	W ×W=×$W6×6W=õ"u8 õ8võ?vövö0
v; ö;w÷w÷w