
    Z j                     d   S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJrJrJr  S SKrSSKJr  \" 5       (       a  S SKrS SKJr  S S	KJr   " S
 S\5      r\R0                  " 5       R2                  r\
" \5      R8                  S   rS\ S3R=                  5       r S4S\\ S-  \RB                  " SS94   4S jjr" " S S5      r#S\ \RH                  -  S\ S\ 4S jr%S\
S\#S\ S\ S\&\'\ \(4      4
S jr)S\ S\&\    4S  jr*S\
S!\ S\ S\ 4S" jr+S!\ S\ S\&\'\ \(4      4S# jr,S$\ S%\-4S& jr.S$\
S\#S'\ S%\'\ \ \&4   4S( jr/S\
S\#S\ S\&\'\ \(4      S%\ 4
S) jr0S\
S\#S\&\'\ \(4      4S* jr1S\
S\#S\ S\ S\&\'\ \(4      4
S+ jr2   S5S,\ S-\ S-  S.\S-  S/\ S-  S%\4
S0 jjr3S1\ S%\(4S2 jr4S3 r5g)6    N)Callable)date)Path)	AnnotatedAnycast   )is_libcst_available)
CSTVisitor)matchersc                       \ rS rSrSrS rS\R                  SS4S jrS\R                  4S jr	S\R                  4S	 jrS
rg)ClassFinder$   z3
A visitor to find all classes in a python module.
c                 .    / U l         / U l        SU l        g NF)classespublic_classesis_in_class)selfs    t/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/cli/add_new_model_like.py__init__ClassFinder.__init__)   s    !#DL(*D$D    nodereturnNc                 p    U R                   R                  UR                  R                  5        SU l        g)zwRecord class names. We assume classes always only appear at top-level (i.e. no class definition in function or similar)TN)r   appendnamevaluer   r   r   s     r   visit_ClassDefClassFinder.visit_ClassDef.   s$    LL		0#Dr   c                     SU l         g r   )r   r    s     r   leave_ClassDefClassFinder.leave_ClassDef3   s
    $Dr   c                    [         R                  " [         R                  " [         R                  " [         R                  " 5       S9/S9/S9nU R
                  (       d  [         R                  " X5      (       a  [        [        R                  UR                  S   5      n[        [        R                  UR                  S   R                  5      R                  nUS:X  as  [        [        R                  UR                  5      R                  nU Vs/ s H1  n[        [        R                  UR                  5      R                  PM3     snU l        ggggs  snf )z:Record all public classes inside the `__all__` assignment.)target)targets)bodyr   __all__N)mSimpleStatementLineAssignAssignTargetNamer   matchesr   cstr)   r(   r'   r   TupleelementsSimpleStringr   )r   r   !simple_top_level_assign_structurestmtassigned_variabler3   elements          r   visit_SimpleStatementLine%ClassFinder.visit_SimpleStatementLine6   s    010E0Ehhaffh(G'HIJ1- ##		$(Z(ZCJJ		!5$(4<<?3I3I$J$P$P!$	1#CIItzz:CCHfn*ofn[b40@0@'--+P+V+Vfn*oD' 2 )[#
 +ps   8E)r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r1   ClassDefr!   r$   r,   r9   __static_attributes__ r   r   r   r   $   sG    		%
	$s|| 	$ 	$
	%s|| 	%
	p#2I2I 
	pr   r      z
# coding=utf-8
# Copyright aN   the HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
	repo_pathzFWhen not using an editable install, the path to the Transformers repo.)helpc                 `    [        5       u  nnnn[        U b  [        U 5      O[        UUUUS9  g)z;
Add a new model to the library, based on an existing one.
NrD   old_model_infosnew_lowercase_namenew_model_paper_namefilenames_to_add)get_user_input_add_new_model_like_internalr   	REPO_PATHrG   s        r   add_new_model_likerO   Z   s?     	 !%.%:$y/	'-1)r   c                   &    \ rS rSrSrS\4S jrSrg)
ModelInfosu   zA
Retrieve the basic information about an existing model classes.
lowercase_namec                 t   SSK Jn  SSKJn  SSKJn  SSKJn  SSKJ	n  SSK
Jn  UR                  5       R                  SS	5      R                  S
S	5      U l        U R                  U;  a  U R                  R                  S	S
5        U R                  U;  a  [        U S35      eX R                     U l        U R                   R                  SS5      U l        U R                  U;   a>  S U l        X`R                     U l        U R&                  S:X  a  S OU R&                  U l        OSu  U l        U l        UR)                  U R                  S 5      U l        UR)                  U R                  S 5      U l        UR)                  U R                  S 5      U l        UR)                  U R                  S 5      U l        g )Nr	   CONFIG_MAPPING_NAMES)FEATURE_EXTRACTOR_MAPPING_NAMES)IMAGE_PROCESSOR_MAPPING_NAMES)PROCESSOR_MAPPING_NAMES)TOKENIZER_MAPPING_NAMES)VIDEO_PROCESSOR_MAPPING_NAMES _-z is not a valid model nameConfig PreTrainedTokenizerFast)NN)models.auto.configuration_autorV   #models.auto.feature_extraction_autorW   !models.auto.image_processing_autorX   models.auto.processing_autorY   models.auto.tokenization_autorZ   !models.auto.video_processing_autor[   lowerreplacerS   
ValueErrorconfig_classcamelcase_nametokenizer_classfast_tokenizer_classgetimage_processor_classesvideo_processor_classfeature_extractor_classprocessor_class)r   rS   rV   rW   rX   rY   rZ   r[   s           r   r   ModelInfos.__init__z   s   IYUIKU -224<<S#FNNsTWX&::''S1&:://IJKK01D1DE"//77"E "99#'D (?@S@S(TD%115NNTXTmTm % ?I;D $";'D'H'HI\I\^b'c$%B%F%FtGZGZ\`%a"'F'J'J4K^K^`d'e$6::4;N;NPTUr   )	rl   rk   rn   rr   rp   rS   rs   rm   rq   N)r;   r<   r=   r>   r?   strr   rA   rB   r   r   rQ   rQ   u   s    Vs Vr   rQ   	file_namenew_content	add_afterc                    [        U SSS9 nUR                  5       nSSS5        WR                  US5      u  pVXR-   U-   U-   n[        U SSS9 nUR                  U5        SSS5        g! , (       d  f       NR= f! , (       d  f       g= f)a?  
A utility to add some content inside a given file.

Args:
    file_name (`str` or `os.PathLike`):
        The name of the file in which we want to insert some content.
    new_content (`str`):
        The content to add.
   add_after (`str`):
       The new content is added just after the first instance matching it.
rutf-8encodingN   w)openreadsplitwrite)rv   rw   rx   fold_contentbeforeafters          r   add_content_to_filer      s~     
iw	/1ffh 
0  %%i3MF${2U:K	iw	/1	 
0	/ 
0	/ 
0	/s   A)A:)
A7:
BrH   rI   rJ   rK   c           	         SR                  S UR                  SS5      R                  S5       5       5      nUR                  nUR                  nUSS  VV	s/ s H  u  pUR                  US5      U	4PM     nnn	/ n
S=pU H_  u  pS	U;   a  S
nM  SU;   a  S
nM  [
        R                  " SU5      (       a  U
S   u  pX=(       d    U	4U
S'   MM  U
R                  X45        Ma     [        U S-  S-  S-  S-  S-  SU SU S3SS9  U S-  S-  S-  S-  S-  R                  5       nU(       aq  [
        R                  " SU S3U[
        R                  5      nU(       a@  US   n[        U S-  S-  S-  S-  S-  UR                  Xb5      R                  Xu5      S-   SS9  U(       a  [
        R                  " SU[
        R                  5      nUR                  S5      n[
        R                  " SU S3U[
        R                  5      nU(       a@  US   n[        U S-  S-  S-  S-  S-  UR                  Xb5      R                  Xu5      S-   SS9  U
 H  u  pU	(       d  M  UR                  SS 5      nU S-  S-  S-  S-  U-  R                  5       n[
        R                  " S!U S"3U[
        R                  5      nU H;  n[        U S-  S-  S-  S-  U-  UR                  Xb5      R                  Xu5      US9  M=     M     gs  sn	nf )#a  
Add a model to all the relevant mappings in the auto module.

Args:
    old_model_infos (`ModelInfos`):
        The structure containing the class information of the old model.
    new_lowercase_name (`str`):
        The new lowercase model name.
    new_model_paper_name (`str`):
        The fully cased name (as in the official paper name) of the new model.
    filenames_to_add (`list[tuple[str, bool]]`):
        A list of tuples of all potential filenames to add for a new model, along a boolean flag describing if we
        should add this file or not. For example, [(`modeling_xxx.px`, True), (`configuration_xxx.py`, True), (`tokenization_xxx.py`, False),...]
r`   c              3   @   #    U  H  oR                  5       v   M     g 7fNtitle.0xs     r   	<genexpr>-add_model_to_auto_mappings.<locals>.<genexpr>        `0_1WWYY0_   r^   r]   r~   NautoFimage_processingTvideo_processingz2(?:tokenization)|(?:image_processing)_auto_fast.pysrctransformersmodelszauto_mappings.pyz("z", "zConfig"),
        z2CONFIG_MAPPING_NAMES = OrderedDict(
    [
        rw   rx   z^\s+\("z",\s+{[^}]+}\),?$r   
z3IMAGE_PROCESSOR_MAPPING_NAMES = OrderedDict(
    [
zBVIDEO_PROCESSOR_MAPPING_NAMES\s*=\s*OrderedDict\(\s*\[(.*?)\]\s*\)z",\s+"[^"]+"\),?$z3VIDEO_PROCESSOR_MAPPING_NAMES = OrderedDict(
    [
_fast.py.pyz( {8,12}\(\s*"z",.*?\),\n)(?: {4,12}\(|\]))joinri   r   rS   rl   researchr   r   	read_textfindall	MULTILINEDOTALLgroup)rD   rH   rI   rJ   rK   new_cased_nameold_lowercase_nameold_cased_namefilenameto_addcorrected_filenames_to_addhas_image_processorhas_video_processorfileprevious_fileprevious_to_addautofilematching_linesmatchblock_matchblocks                        r   add_model_to_auto_mappingsr      su   * WW`0B0J0J3PS0T0Z0Z[^0_``N(77$33NWghihjWkWkCS8		,f	5v>Wk   "$055(%"&4'"&YYLdSS-G-K*M.;=VPV-W&r*&--tn= ) EN*X5>ASS+,D0@@STH
 E!N2X=FI[[ffhHw/A.BBV$WYacecocop"1%EE!N2X=FI[[!MM*<QYY"  R iiQS[]_]f]f
 !!!$w/A.BBS$TV[]_]i]ij"1%EE!N2X=FI[[!MM*<QYY"  R 76''
E:H%6AFJXU``bDZZ#$6#77TUW[]_]f]fN (#%6AFJXU %.@ U ] ]&! $ ( 7ms    K=new_paper_namer   c                 ,   Sn[         R                  " SS[        5      R                  SS5      U-   n[        R
                  " SU  SU  S35      n/ nU H'  nS	U S
U 3nSU;   a  US-  nUR                  U5        M)     SR                  U5      nX4-   U-   $ )a  
Create a new doc file to fill for the new model.

Args:
    new_paper_name (`str`):
        The fully cased name (as in the official paper name) of the new model.
    public_classes (`list[str]`):
        A list of all the public classes that the model will have in the library.
u   

⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be rendered properly in your Markdown viewer.

-->

z# ?r`   zcoding=utf-8
z<!--z
        # z#

        ## Overview

        The a<   model was proposed in [<INSERT PAPER NAME HERE>](<INSERT PAPER LINK HERE>) by <INSERT AUTHORS HERE>.
        <INSERT SHORT SUMMARY HERE>

        The abstract from the paper is the following:

        <INSERT PAPER ABSTRACT HERE>

        Tips:

        <INSERT TIPS ABOUT MODEL HERE>

        This model was contributed by [INSERT YOUR HF USERNAME HERE](https://huggingface.co/<INSERT YOUR HF USERNAME HERE>).
        The original code can be found [here](<INSERT LINK TO GITHUB REPO HERE>).

        ## Usage examples

        <INSERT SOME NICE EXAMPLES HERE>

        z## z

[[autodoc]] Modelz
    - forward

)r   sub	COPYRIGHTri   textwrapdedentr   r   )	r   r   
added_notecopyright_for_markdowndoc_templatedoc_for_classesclass_doc	class_docs	            r   create_doc_filer     s    	K   VVFB	:BBCSU[\_ii??
   		L8 O F8+F84f$$Cs#	 ! O,I!09<<r   r   c                 D   U S-  S-  S-  S-  n[        US5       nUR                  5       nSSS5        [        R                  " SU S3W5      nUc  [	        S	U 35      eUR                  S
5      nSU SU S3n	[        U S-  S-  S-  S-  XS9  g! , (       d  f       Nk= f)a\  
Insert the new model in the doc `_toctree.yaml`, in the same section as the old model.

Args:
    old_lowercase_name (`str`):
        The old lowercase model name.
    new_lowercase_name (`str`):
        The new lowercase model name.
    new_model_paper_name (`str`):
        The fully cased name (as in the official paper name) of the new model.
docssourceenz_toctree.ymlrz   Nz- local: model_doc/z\n {8}title: .*?\nzCould not find TOC entry for r   z      - local: model_doc/z
        title: r   r   )r   r   r   r   rj   r   r   )
rD   r   rI   rJ   toc_filer   content	toc_matchold_model_tocnew_tocs
             r   insert_model_in_doc_tocr   K  s     6!H,t3nDH	h	&&( 
 		01C0DDXY[bcI89K8LMNNOOA&M)*<)==NOcNddfgGFX%,~=7 
	s   B
Bc                     U VVs/ s H(  u  p4UR                  X5      R                  SS5      U4PM*     nnnSR                  S U 5       5      n[        [        R                  " SU S35      -   nU$ s  snnf )a  
Create the `__init__.py` file to add in the new model folder.

Args:
    old_lowercase_name (`str`):
        The old lowercase model name.
    new_lowercase_name (`str`):
        The new lowercase model name.
    filenames_to_add (`list[tuple[str, bool]]`):
        A list of tuples of all potential filenames to add for a new model, along a boolean flag describing if we
        should add this file or not. For example, [(`modeling_xxx.px`, True), (`configuration_xxx.py`, True), (`tokenization_xxx.py`, False),...]
r   r`   
            c              3   D   #    U  H  u  pU(       d  M  S U S3v   M     g7f)zfrom .z	 import *NrB   )r   r   r   s      r   r   #create_init_file.<locals>.<genexpr>x  s#     #lQaek$<fTF)$<Qas     z
        from typing import TYPE_CHECKING

        from ...utils import _LazyModule
        from ...utils.import_utils import define_import_structure


        if TYPE_CHECKING:
            z
        else:
            import sys

            _file = globals()["__file__"]
            sys.modules[__name__] = _LazyModule(__name__, _file, define_import_structure(_file), module_spec=__spec__)
        )ri   r   r   r   r   )r   rI   rK   r   r   imports	init_files          r   create_init_filer   g  s     !1 0H 
		,	A	I	I%QS	TV\] 0   ###lQa#llGHOO I 		 I" -s   /A3module_namer   c                     [        U SSS9 nUR                  5       nSSS5        [        R                  " W5      n[	        5       nUR                  U5        UR                  UR                  4$ ! , (       d  f       NW= f)z
Find the name of all classes defined in `module_name`, including public ones (defined in `__all__`).

Args:
    module_name (`str`):
        The full path to the python module from which to extract classes.
rz   r{   r|   N)r   r   r1   parse_moduler   visitr   r   )r   r   source_codemodulevisitors        r   find_all_classes_from_filer     sc     
k3	1Tiik 
2k*FmG
LL??G2222 
2	1s   A..
A<r   c                 \  ^^	 [        U 5      u  p4SR                  U R                  SS 5      R                  SS5      nUR                  m	SU SSR                  S	 U 5       5       3nS
R                  UU	4S jU 5       5      nU Vs/ s H  oR                  T	T5      PM     nnXgU4$ s  snf )ak  
Extract the modular structure that will be needed to copy a file `module_name` using modular.

Args:
    module_name (`str`):
        The full path to the python module to copy with modular.
    old_model_infos (`ModelInfos`):
        The structure containing the class information of the old model.
    new_cased_name (`str`):
        The new cased model name.
.Nr   r`   zfrom ..z import z, c              3   $   #    U  H  ov   M     g 7fr   rB   )r   r   s     r   r   )find_modular_structure.<locals>.<genexpr>  s     :\P[f6P[s   r   c              3   V   >#    U  H  nS UR                  TT5       SU S3v   M      g7f)zclass (z):
    passN)ri   )r   r   r   r   s     r   r   r     s1      "ep[a&?@&Veps   &))r   r   partsri   rl   )
r   rH   r   all_classesr   import_locationr   modular_classesr   r   s
     `      @r   find_modular_structurer     s     #=["IKhh{0056>>ubIO$33N(:\P[:\1\0]^Gkk "ep" O TbbSann^^DSaNb^33 cs   B)c                    SR                  S UR                  SS5      R                  S5       5       5      nUR                  nU S-  S-  S-  U-  nSnSn/ n	U H@  u  pU(       d  M  [	        Xj-  X5      u  pnUSU 3-  nUS	U 3-  nU	R                  U5        MB     S
R                  S U	 5       5      n[        R                  " SU S35      n[        U-   U-   U-   nU	 Vs/ s H  nUR                  SS5      PM     n	nUU	4$ s  snf )am  
Create a new modular file which will copy the old model, based on the new name and the different filenames
(modules) to add.

Args:
    old_model_infos (`ModelInfos`):
        The structure containing the class information of the old model.
    new_lowercase_name (`str`):
        The new lowercase model name.
    filenames_to_add (`list[tuple[str, bool]]`):
        A list of tuples of all potential filenames to add for a new model, along a boolean flag describing if we
        should add this file or not. For example, [(`modeling_xxx.px`, True), (`configuration_xxx.py`, True), (`tokenization_xxx.py`, False),...]
r`   c              3   @   #    U  H  oR                  5       v   M     g 7fr   r   r   s     r   r   &create_modular_file.<locals>.<genexpr>  r   r   r^   r]   r   r   r   r   r   r   c              3   *   #    U  H	  o S 3v   M     g7f),NrB   )r   public_classs     r   r   r     s     4o\nL~Q5G\ns   z"

        __all__ = [
            z
        ]
        ")	r   ri   r   rS   r   extendr   r   r   )rD   rH   rI   rK   r   r   old_folder_rootall_imports
all_bodiesall_public_classesr   r   r   r)   r   public_classes_formattedall_statementmodular_filer   s                      r   create_modular_filer     sO   & WW`0B0J0J3PS0T0Z0Z[^0_``N(77%'.88CFXXO KJ,6,B*O-)G> Ry>)KD-'J%%n5 -  0444o\n4ooOO && '		M {*Z7-GLL^_L^L,..sB7L^_+++ `s   #Dc           	         SR                  S UR                  SS5      R                  S5       5       5      nUR                  nUR                  nUSS  VVs/ s H  u  pxSUR                  XR5      -   U4PM     nnn/ n	U HO  u  p[
        R                  " SU S	3U
5      (       a  U	S
   u  pX=(       d    U4U	S
'   M=  U	R                  X45        MQ     0 nU	 H  u  pU(       d  M  UR                  X%5      nU S-  S-  U-  U-  nUR                  5       (       d  MD  [        US5       nUR                  5       nSSS5        WR                  S5      nSnUU   R                  S5      (       a   US-  nUU   R                  S5      (       a  M   [        SR                  UUS 5      -   nUR                  Xd5      X'   M     U$ s  snnf ! , (       d  f       N= f)aa  
Create the test files for the new model. It basically copies over the old test files and adjust the class names.

Args:
    old_model_infos (`ModelInfos`):
        The structure containing the class information of the old model.
    new_lowercase_name (`str`):
        The new lowercase model name.
    filenames_to_add (`list[tuple[str, bool]]`):
        A list of tuples of all potential filenames to add for a new model, along a boolean flag describing if we
        should add this file or not. For example, [(`modeling_xxx.px`, True), (`configuration_xxx.py`, True), (`tokenization_xxx.py`, False),...]
r`   c              3   @   #    U  H  oR                  5       v   M     g 7fr   r   r   s     r   r   $create_test_files.<locals>.<genexpr>  r   r   r^   r]   r~   Ntest_z+test_(?:tokenization)|(?:image_processing)_r   r   testsr   rz   r   r   #)r   ri   r   rS   rl   r   r   r   is_filer   r   
startswithr   )rD   rH   rI   rK   r   r   r   r   r   r   r   r   r   
test_filesnew_fileoriginal_test_fileoriginal_test_pathr   	test_code
test_linesidxs                        r   create_test_filesr    s    WW`0B0J0J3PS0T0Z0Z[^0_``N(77$33N !1 4 4H 
8##$6K	KVT 4  
 "$(99CDVCWW_`bfgg-G-K*M.;=VPV-W&r*&--tn= ) J66!)!1!12D!Y!*W!4x!?BT!TWi!i%--//(#.!FFH	 / #.JCS/,,S11q S/,,S11!DIIj.>$??I#,#4#4^#TJ  7" ?* /.s   "G(G
G	c                    [        5       (       d  [        S5      eUR                  nU S-  S-  S-  U-  n[        R                  " USS9  [        XX$5      u  px[        USU S3-  S	5       n	U	R                  U5        S
S
S
5        [        XRU5      n
[        US-  S	5       n	U	R                  U
5        S
S
S
5        [        U S-  S-  S-  S-  SU S3SS9  [        XX#U5        U S-  S-  U-  n[        R                  " USS9  [        US-  S	5          S
S
S
5        [        XX$5      nUR                  5        H-  u  p[        X-  S	5       n	U	R                  U5        S
S
S
5        M/     [        X85      n[        U S-  S-  S-  S-  U S3-  S	5       n	U	R                  U5        S
S
S
5        [        XX#5        U S-  S-  S-  S-  n[        R                   " SSXkUS/U [        R"                  S9  [        R                   " SSXkU/U [        R"                  S9  [        R                   " / SQU [        R"                  S9  [        R                   " SS/U [        R"                  S9  [        R                   " SSU/U [        R"                  S9  g
! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GM  = f! , (       d  f       GN7= f)a  
Creates a new model module like a given model of the Transformers library.

Args:
    repo_path (`Path`):
        The path to the root of the Transformers repository.
    old_model_infos (`ModelInfos`):
        The structure containing the class information of the old model.
    new_lowercase_name (`str`):
        The new lowercase model name.
    new_model_paper_name (`str`):
        The fully cased name (as in the official paper name) of the new model.
    filenames_to_add (`list[tuple[str, bool]]`):
        A list of tuples of all potential filenames to add for a new model, along a boolean flag describing if we
        should add this file or not. For example, [(`modeling_xxx.px`, True), (`configuration_xxx.py`, True), (`tokenization_xxx.py`, False),...]
zHYou need to install `libcst` to run this command -> `pip install libcst`r   r   r   T)exist_okmodular_r   r   Nz__init__.pyz
    from .z
 import *
zif TYPE_CHECKING:
r   r  r   r   r   	model_docz.mdruffcheckz--fix)cwdstdoutformat)pythonzutils/check_doc_toc.pyz--fix_and_overwriter  zutils/sort_auto_mappings.pyz utils/modular_model_converter.py)r
   rj   rS   osmakedirsr   r   r   r   r   r   r  itemsr   r   
subprocessrunDEVNULL)rD   rH   rI   rJ   rK   r   new_module_folderr   r   r   r   tests_folderr  r   r   doc_filemodel_init_files                    r   rM   rM     s   0   cdd(77 "E)N:XEHZZKK!D1 $7$6$ L 
H-?,@"DDc	Ja	 
K !!3IYZI	-/	5		 
6 EN*X5E !3 4K@' y;Meuv w&14FFLKKt,	l]*C	0 
1"9?QdJ'--/,)3/1GGG 0/ 0
 3DH	i& 8+d2[@FXEYY\C]]_b	cgh	 
dI;Md  %'.88CmSONN	+?GT!!
 NN	,OL!!
 NNC[e[m[m NNH;<)T^TfTfg NN	57IJPYblbtbtk 
K	J
 
6	5" 
1	0 0/
 
d	cs<   +J
 JJ.
K K

J
J+.
J= 
K	
K"questiondefault_value
convert_tofallback_messagec                    U R                  S5      (       d  U S-   n Ub  U  SU S3n SnU(       dK  [        U 5      nUb  [        U5      S:X  a  UnUb   U" U5      nSnOSnU(       d  [	        U5        U(       d  MK  W$ ! [         a    Sn N+f = f)a  
A utility function that asks a question to the user to get an answer, potentially looping until it gets a valid
answer.

Args:
    question (`str`):
        The question to ask the user.
    default_value (`str`, *optional*):
        A potential default value that will be used when the answer is empty.
    convert_to (`Callable`, *optional*):
        If set, the answer will be passed to this function. If this function raises an error on the provided
        answer, the question will be asked again.
    fallback_message (`str`, *optional*):
        A message that will be displayed each time the question is asked again to the user.

Returns:
    `Any`: The answer provided by the user (or the default), passed through the potential conversion function.
r\   z [z] Fr   T)endswithinputlen	Exceptionprint)r"  r#  r$  r%  valid_answeranswers         r   get_user_fieldr.  ~  s    0 S!!c> Zr-3Lx$V)9"F!%#F+#  L"# l  M  %$%s   
A= =BBr   c                 r    U R                  5       S;   a  gU R                  5       S;   a  g[        U  S35      e)z
Converts a string to a bool.
)1yyestrueT)0nnofalseFz0 is not a value that can be converted to a bool.)rh   rj   )r   s    r   convert_to_boolr8    s;     	wwy--wwy--
sJK
LLr   c            
         SSK Jn   [        U R                  5       5      nSnU(       d~  [	        S5      nX1;   a  SnOb[        U S35        [        R                  " X15      n[        U5      S:  a/  [        U5      S:  a  SR                  U5      n[        S	U S
35        U(       d  M~  [        W5      n[        S5      n[        SSR                  S UR                  S5       5       5      S9nSnSn	Sn
SnSnSnUR                  b  [        SU S3[        SS9nUR                  b  [        SU S3[        SS9n	UR                   b  [        SU S3[        SS9n
UR"                  b  [        SU S3[        SS9nUR$                  b  [        SU S3[        SS9nUR&                  b  [        SU S3[        SS9nUR(                  nSU S3S4SU S3S4SU S3U4SU S3U	4SU S3U
4S U S3U4S!U S3U4S"U S3U44nXVX4$ )#z=
Ask the user for the necessary inputs to add the new model.
r   rU   FzWWhat model would you like to duplicate? Please provide it as lowercase, e.g. `llama`): Tz is not a valid model type.r~   z or zDid you mean ?zSWhat is the new model name? Please provide it as snake lowercase, e.g. `new_model`?zUWhat is the fully cased name you would like to appear in the doc (e.g. `NeW ModEl`)? r`   c              3   @   #    U  H  oR                  5       v   M     g 7fr   r   r   s     r   r   !get_user_input.<locals>.<genexpr>  s     O1NAggii1Nr   r]   )r#  zHDo you want to create a new tokenizer? If `no`, it will use the same as z (y/n)?z.Please answer yes/no, y/n, true/false or 1/0. )r$  r%  zMDo you want to create a new fast tokenizer? If `no`, it will use the same as zNDo you want to create a new image processor? If `no`, it will use the same as zNDo you want to create a new video processor? If `no`, it will use the same as zPDo you want to create a new feature extractor? If `no`, it will use the same as zHDo you want to create a new processor? If `no`, it will use the same as configuration_r   	modeling_tokenization_r   image_processing_video_processing_feature_extraction_processing_)+transformers.models.auto.configuration_autorV   listkeysr(  r+  difflibget_close_matchesr)  r   rQ   r.  r   rm   r8  rn   rp   rq   rr   rs   rS   )rV   model_typesvalid_model_typeold_model_typenear_choicesrH   rI   rJ   add_tokenizeradd_fast_tokenizeradd_image_processoradd_video_processoradd_feature_extractoradd_processorr   rK   s                   r   rL   rL     s    Q+0023K e
 (#^$$?@A"44^QL< A%|$q(#);;|#<Ll^156  !0O (] *_ggO1C1I1I#1NOO M!M&&2&VWeVffmn&M

 ++7+[\j[kkrs&M

 ..:,\]k\llst&M

 ,,8,\]k\llst&M

 ..: .^_m^nnuv&M!

 &&2&VWeVffmn&M
 )77 ,-S	148'(	,d3+,C	0-@+,H	57IJ/0	46IJ/0	46IJ12#	68MN)*#	.>	 0DVVr   r   )NNN)6rG  r  r   r  r   collections.abcr   datetimer   pathlibr   typingr   r   r   typerutilsr
   libcstr1   r   r   r+   r   todayyearCURRENT_YEAR__file__parentsrN   lstripr   ru   ArgumentrO   rQ   PathLiker   rE  tupleboolr   r   r   r   setr   r   r   r  rM   r.  r8  rL   rB   r   r   <module>re     s    	 	   $   ' '  '
 !$pj p> zz|  N""1%	N  FH 
. 	d
ENN(pqq6$V $VN3#4 3 SV ,^^^ ^ 	^
 5d+,^B5=C 5=c 5=p),BE]`8# ## #Y]^cdgimdm^nYo #L3C 3C 3 44(24DG4
3T>422,2,2, 2, 5d+,	2,
 	2,j11&01X\]bcfhlcl]mXn1h\\\ \ 	\
 5d+,\B !%"&#'	..:. 4. Dj	.
 	.bMs Mt M\Wr   