
    HTh                        S SK r S SKrS SKJr  S SKJrJrJrJrJ	r	J
r
  S SKrS SKrS SKJr  S SKJr  S SKJrJrJrJrJrJrJr  S SKJrJrJr  SS	KJr  SS
KJ r   SSK!J"r"J#r#J$r$  \#RJ                  " \&5      r'\" \(5      RR                  S-  S-  r*\" \(5      RR                  S-  S-  r+\RX                  " S5      r- " S S5      r. " S S\.5      r/ " S S\.5      r0 " S S\.5      r1S\2S\S   4S jr3S\
\2\4   S\\   4S jr4S\
\2\4   S\SS4S jr5SS SSSSS!.S"\2S#\2S$\2S%\2S&\2S'\S(\2S)\2S*\\2   S+\6S,\\2   S-\\2   S.\\2   S/\\2   S\4S0 jjr7\$SS SSSSS SS1.S2\2S3\S4\\2   S5\6S6\\2   S7\\2   S8\\2   S9\\2   S:\6S;\\2   S\24S< jj5       r8g)=    N)Path)AnyDictLiteralOptionalTypeUnion)hf_hub_download)upload_file)CardDataDatasetCardData
EvalResultModelCardDataSpaceCardDataeval_results_to_model_indexmodel_index_to_eval_results)get_sessionis_jinja_available	yaml_dump   )	constants)EntryNotFoundError)SoftTemporaryDirectoryloggingvalidate_hf_hub_args	templateszmodelcard_template.mdzdatasetcard_template.mdz1^(\s*---[\r\n]+)([\S\s]*?)([\r\n]+---(\r\n|\n|$))c                      \ rS rSr\r\rSrSS\	S\
4S jjr\S 5       r\R                  S\	4S j5       rS rS	\\\	4   4S
 jr\   SS\\	\4   S\\	   S\\	   S\
4S jj5       rSS\\	   4S jjr       S S\	S\\	   S\\	   S\\	   S\\	   S\\	   S\\
   S\\	   4S jjr\  S!S\S\\	   S\\	   4S jj5       rSrg)"RepoCard&   modelcontentignore_metadata_errorsc                     X l         Xl        g)a  Initialize a RepoCard from string content. The content should be a
Markdown file with a YAML block at the beginning and a Markdown body.

Args:
    content (`str`): The content of the Markdown file.

Example:
    ```python
    >>> from huggingface_hub.repocard import RepoCard
    >>> text = '''
    ... ---
    ... language: en
    ... license: mit
    ... ---
    ...
    ... # My repo
    ... '''
    >>> card = RepoCard(text)
    >>> card.data.to_dict()
    {'language': 'en', 'license': 'mit'}
    >>> card.text
    '\n# My repo\n'

    ```
<Tip>
Raises the following error:

    - [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError)
      when the content of the repo card metadata is not a dictionary.

</Tip>
N)r"   r!   )selfr!   r"   s      P/var/www/auris/envauris/lib/python3.13/site-packages/huggingface_hub/repocard.py__init__RepoCard.__init__+   s    H '=#    c                     [        U R                  5      =(       d    SnSU U R                  R                  XR                  S9 U SU U R
                   3$ )zLThe content of the RepoCard, including the YAML block and the Markdown body.
---)
line_breakoriginal_order)_detect_line_ending_contentdatato_yaml_original_ordertext)r$   r,   s     r%   r!   RepoCard.contentR   sz     )7?4
ZL!2!2jYmYm!2!n opzo{{~  @J  K  LP  LU  LU  KV  W  	Wr(   c                    Xl         [        R                  U5      nU(       ad  UR                  S5      nXR	                  5       S U l        [        R                  " U5      nUc  0 n[        U[        5      (       d  [        S5      eO[        R                  S5        0 nXl        U R                  " S0 UDSU R                  0D6U l        [!        UR#                  5       5      U l        g)z Set the content of the RepoCard.   N)repo card metadata block should be a dictzBRepo card metadata block was not found. Setting CardData to empty.r"    )r/   REGEX_YAML_BLOCKsearchgroupendr3   yaml	safe_load
isinstancedict
ValueErrorloggerwarningcard_data_classr"   r0   listkeysr2   )r$   r!   match
yaml_block	data_dicts        r%   r!   r4   X   s       ''0QJ		.DIz2I 	 i.. !LMM / NN_`II((i9iTMhMhi	#INN$45r(   c                     U R                   $ N)r!   )r$   s    r%   __str__RepoCard.__str__s   s    ||r(   filepathc                     [        U5      nUR                  R                  SSS9  [        USSSS9 nUR	                  [        U 5      5        SSS5        g! , (       d  f       g= f)a3  Save a RepoCard to a file.

Args:
    filepath (`Union[Path, str]`): Filepath to the markdown file to save.

Example:
    ```python
    >>> from huggingface_hub.repocard import RepoCard
    >>> card = RepoCard("---\nlanguage: en\n---\n# This is a test repo card")
    >>> card.save("/tmp/test.md")

    ```
T)parentsexist_okw utf-8modenewlineencodingN)r   parentmkdiropenwritestr)r$   rN   fs      r%   saveRepoCard.savev   sQ     >dT:(b7CqGGCI DCCs   A
A$Nrepo_id_or_path	repo_typetokenc           	         [        U5      R                  5       (       a  [        U5      nO[[        U[        5      (       a7  [        [	        U[
        R                  U=(       d    U R                  US95      nO[        SU S35      eUR                  SSSS9 nU " UR                  5       US9sS	S	S	5        $ ! , (       d  f       g	= f)
a  Initialize a RepoCard from a Hugging Face Hub repo's README.md or a local filepath.

Args:
    repo_id_or_path (`Union[str, Path]`):
        The repo ID associated with a Hugging Face Hub repo or a local filepath.
    repo_type (`str`, *optional*):
        The type of Hugging Face repo to push to. Defaults to None, which will use use "model". Other options
        are "dataset" and "space". Not used when loading from a local filepath. If this is called from a child
        class, the default value will be the child class's `repo_type`.
    token (`str`, *optional*):
        Authentication token, obtained with `huggingface_hub.HfApi.login` method. Will default to the stored token.
    ignore_metadata_errors (`str`):
        If True, errors while parsing the metadata section will be ignored. Some information might be lost during
        the process. Use it at your own risk.

Returns:
    [`huggingface_hub.repocard.RepoCard`]: The RepoCard (or subclass) initialized from the repo's
        README.md file or filepath.

Example:
    ```python
    >>> from huggingface_hub.repocard import RepoCard
    >>> card = RepoCard.load("nateraw/food")
    >>> assert card.data.tags == ["generated_from_trainer", "image-classification", "pytorch"]

    ```
)rb   rc   z.Cannot load RepoCard: path not found on disk (z).rrS   rT   rU   )r"   N)r   is_filer?   r]   r
   r   REPOCARD_NAMErb   rA   r[   read)clsra   rb   rc   r"   	card_pathr^   s          r%   loadRepoCard.load   s    H  ((**_-I--#++'83==	I MoM^^`abb ^^b7^Cqqvvx8NO DCCs   B66
Cc                 >   U=(       d    U R                   nU[        U 5      S.nSS0n [        5       R                  SX#S9nUR	                  5         g! [
        R                  R                   a,  nWR                  S:X  a  [        UR                  5      eUeSnAff = f)a  Validates card against Hugging Face Hub's card validation logic.
Using this function requires access to the internet, so it is only called
internally by [`huggingface_hub.repocard.RepoCard.push_to_hub`].

Args:
    repo_type (`str`, *optional*, defaults to "model"):
        The type of Hugging Face repo to push to. Options are "model", "dataset", and "space".
        If this function is called from a child class, the default will be the child class's `repo_type`.

<Tip>
Raises the following errors:

    - [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError)
      if the card fails validation checks.
    - [`HTTPError`](https://requests.readthedocs.io/en/latest/api/#requests.HTTPError)
      if the request to the Hub API fails for any other reason.

</Tip>
)repoTyper!   Acceptz
text/plainz(https://huggingface.co/api/validate-yaml)headersi  N)rb   r]   r   postraise_for_statusrequests
exceptions	HTTPErrorstatus_coderA   r3   )r$   rb   bodyrp   re   excs         r%   validateRepoCard.validate   s    , /	 "4y
 \*	""#Mt"eA "",, 	}}# ((			s   (A B0'BBrepo_idcommit_messagecommit_descriptionrevision	create_prparent_commitc	                 V   U=(       d    U R                   nU R                  US9  [        5        n	[        U	5      [        R
                  -  n
U
R                  [        U 5      5        [        [        U
5      [        R
                  UUUUUUUUS9
nSSS5        U$ ! , (       d  f       W$ = f)aq  Push a RepoCard to a Hugging Face Hub repo.

Args:
    repo_id (`str`):
        The repo ID of the Hugging Face Hub repo to push to. Example: "nateraw/food".
    token (`str`, *optional*):
        Authentication token, obtained with `huggingface_hub.HfApi.login` method. Will default to
        the stored token.
    repo_type (`str`, *optional*, defaults to "model"):
        The type of Hugging Face repo to push to. Options are "model", "dataset", and "space". If this
        function is called by a child class, it will default to the child class's `repo_type`.
    commit_message (`str`, *optional*):
        The summary / title / first line of the generated commit.
    commit_description (`str`, *optional*)
        The description of the generated commit.
    revision (`str`, *optional*):
        The git revision to commit from. Defaults to the head of the `"main"` branch.
    create_pr (`bool`, *optional*):
        Whether or not to create a Pull Request with this commit. Defaults to `False`.
    parent_commit (`str`, *optional*):
        The OID / SHA of the parent commit, as a hexadecimal string. Shorthands (7 first characters) are also supported.
        If specified and `create_pr` is `False`, the commit will fail if `revision` does not point to `parent_commit`.
        If specified and `create_pr` is `True`, the pull request will be created from `parent_commit`.
        Specifying `parent_commit` ensures the repo has not changed before committing the changes, and can be
        especially useful if the repo is updated / committed to concurrently.
Returns:
    `str`: URL of the commit which updated the card metadata.
)rb   )
path_or_fileobjpath_in_repor{   rc   rb   r|   r}   r   r~   r   N)	rb   ry   r   r   r   rg   
write_textr]   r   )r$   r{   rc   rb   r|   r}   r~   r   r   tmpdirtmp_pathurls               r%   push_to_hubRepoCard.push_to_hub   s    R /	 		*#%F|i&=&==HD	* #H&44#-#5#!+C & 
 &% 
s   A B
B(	card_datatemplate_pathtemplate_strc                    [        5       (       a  SSKnO[        S5      eUR                  5       R	                  5       nUR                  U5        Ub  [        U5      R                  5       nUc#  [        U R                  5      R                  5       nUR                  U5      nUR                  " SSUR                  5       0UD6nU " U5      $ )a  Initialize a RepoCard from a template. By default, it uses the default template.

Templates are Jinja2 templates that can be customized by passing keyword arguments.

Args:
    card_data (`huggingface_hub.CardData`):
        A huggingface_hub.CardData instance containing the metadata you want to include in the YAML
        header of the repo card on the Hugging Face Hub.
    template_path (`str`, *optional*):
        A path to a markdown file with optional Jinja template variables that can be filled
        in with `template_kwargs`. Defaults to the default template.

Returns:
    [`huggingface_hub.repocard.RepoCard`]: A RepoCard instance with the specified card data and content from the
    template.
r   NzjUsing RepoCard.from_template requires Jinja2 to be installed. Please install it with `pip install Jinja2`.r   r8   )r   jinja2ImportErrorto_dictcopyupdater   	read_textdefault_template_pathTemplaterenderr1   )	ri   r   r   r   template_kwargsr   kwargstemplater!   s	            r%   from_templateRepoCard.from_template&  s    0 9 
 ""$))+o&$.88:L 9 9:DDFL??<0//JI,=,=,?J6J7|r(   )r/   r2   r!   r0   r"   r3   )F)NNFrK   )NNNNNNNNN)__name__
__module____qualname____firstlineno__r   rD   TEMPLATE_MODELCARD_PATHr   rb   r]   boolr&   propertyr!   setterrL   r	   r   r_   classmethodr   rk   ry   r   r   __static_attributes__r8   r(   r%   r   r   &   s   O3I% %T %N W W
 ^^6s 6 64U49- (  $(#',3PsDy)3P C=3P }	3P
 !%3P 3Pj%(3- %T  $#'(,,0"&$('+== }= C=	=
 != %SM= 3-= D>=  }=~  (,&*	((  }( sm	( (r(   r   c            	       b   ^  \ rS rSr\r\rSr\	  SS\S\
\   S\
\   4U 4S jjj5       rSrU =r$ )		ModelCardiR  r    r   r   r   c                 (   > [         TU ]  " XU40 UD6$ )a5	  Initialize a ModelCard from a template. By default, it uses the default template, which can be found here:
https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/templates/modelcard_template.md

Templates are Jinja2 templates that can be customized by passing keyword arguments.

Args:
    card_data (`huggingface_hub.ModelCardData`):
        A huggingface_hub.ModelCardData instance containing the metadata you want to include in the YAML
        header of the model card on the Hugging Face Hub.
    template_path (`str`, *optional*):
        A path to a markdown file with optional Jinja template variables that can be filled
        in with `template_kwargs`. Defaults to the default template.

Returns:
    [`huggingface_hub.ModelCard`]: A ModelCard instance with the specified card data and content from the
    template.

Example:
    ```python
    >>> from huggingface_hub import ModelCard, ModelCardData, EvalResult

    >>> # Using the Default Template
    >>> card_data = ModelCardData(
    ...     language='en',
    ...     license='mit',
    ...     library_name='timm',
    ...     tags=['image-classification', 'resnet'],
    ...     datasets=['beans'],
    ...     metrics=['accuracy'],
    ... )
    >>> card = ModelCard.from_template(
    ...     card_data,
    ...     model_description='This model does x + y...'
    ... )

    >>> # Including Evaluation Results
    >>> card_data = ModelCardData(
    ...     language='en',
    ...     tags=['image-classification', 'resnet'],
    ...     eval_results=[
    ...         EvalResult(
    ...             task_type='image-classification',
    ...             dataset_type='beans',
    ...             dataset_name='Beans',
    ...             metric_type='accuracy',
    ...             metric_value=0.9,
    ...         ),
    ...     ],
    ...     model_name='my-cool-model',
    ... )
    >>> card = ModelCard.from_template(card_data)

    >>> # Using a Custom Template
    >>> card_data = ModelCardData(
    ...     language='en',
    ...     tags=['image-classification', 'resnet']
    ... )
    >>> card = ModelCard.from_template(
    ...     card_data=card_data,
    ...     template_path='./src/huggingface_hub/templates/modelcard_template.md',
    ...     custom_template_var='custom value',  # will be replaced in template if it exists
    ... )

    ```
superr   ri   r   r   r   r   	__class__s        r%   r   ModelCard.from_templateW  s    R w$Y|___r(   r8   r   )r   r   r   r   r   rD   r   r   rb   r   r   r]   r   r   __classcell__r   s   @r%   r   r   R  s[    #O3I (,&*	H` H`  }H` sm	H` H`r(   r   c            	       b   ^  \ rS rSr\r\rSr\	  SS\S\
\   S\
\   4U 4S jjj5       rSrU =r$ )	DatasetCardi  datasetr   r   r   c                 (   > [         TU ]  " XU40 UD6$ )ad  Initialize a DatasetCard from a template. By default, it uses the default template, which can be found here:
https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/templates/datasetcard_template.md

Templates are Jinja2 templates that can be customized by passing keyword arguments.

Args:
    card_data (`huggingface_hub.DatasetCardData`):
        A huggingface_hub.DatasetCardData instance containing the metadata you want to include in the YAML
        header of the dataset card on the Hugging Face Hub.
    template_path (`str`, *optional*):
        A path to a markdown file with optional Jinja template variables that can be filled
        in with `template_kwargs`. Defaults to the default template.

Returns:
    [`huggingface_hub.DatasetCard`]: A DatasetCard instance with the specified card data and content from the
    template.

Example:
    ```python
    >>> from huggingface_hub import DatasetCard, DatasetCardData

    >>> # Using the Default Template
    >>> card_data = DatasetCardData(
    ...     language='en',
    ...     license='mit',
    ...     annotations_creators='crowdsourced',
    ...     task_categories=['text-classification'],
    ...     task_ids=['sentiment-classification', 'text-scoring'],
    ...     multilinguality='monolingual',
    ...     pretty_name='My Text Classification Dataset',
    ... )
    >>> card = DatasetCard.from_template(
    ...     card_data,
    ...     pretty_name=card_data.pretty_name,
    ... )

    >>> # Using a Custom Template
    >>> card_data = DatasetCardData(
    ...     language='en',
    ...     license='mit',
    ... )
    >>> card = DatasetCard.from_template(
    ...     card_data=card_data,
    ...     template_path='./src/huggingface_hub/templates/datasetcard_template.md',
    ...     custom_template_var='custom value',  # will be replaced in template if it exists
    ... )

    ```
r   r   s        r%   r   DatasetCard.from_template  s    r w$Y|___r(   r8   r   )r   r   r   r   r   rD   TEMPLATE_DATASETCARD_PATHr   rb   r   r   r]   r   r   r   r   s   @r%   r   r     sV    %O5I (,&*	8`"8`  }8` sm	8` 8`r(   r   c                        \ rS rSr\r\rSrSr	g)	SpaceCardi  spacer8   N)
r   r   r   r   r   rD   r   r   rb   r   r8   r(   r%   r   r     s    #O3Ir(   r   r!   return)r*   
Nc                     U R                  S5      nU R                  S5      nU R                  S5      nX-   S:X  a  gX1:X  a  X2:X  a  gX:  a  gg)zDetect the line ending of a string. Used by RepoCard to avoid making huge diff on newlines.

Uses same implementation as in Hub server, keep it in sync.

Returns:
    str: The detected line ending of the string.
r   r*   r   r   N)count)r!   crlfcrlfs       r%   r.   r.     sQ     
t	B	t	B== D	w!|zdj	wr(   
local_pathc                    [        U 5      R                  5       n[        R                  U5      nU(       aL  UR	                  S5      n[
        R                  " U5      nUb  [        U[        5      (       a  U$ [        S5      eg )Nr6   r7   )
r   r   r9   r:   r;   r=   r>   r?   r@   rA   )r   r!   rG   rH   r0   s        r%   metadata_loadr     sh    :((*G##G,E[[^
~~j)<:dD11KDEEr(   r0   c                    SnSn[         R                  R                  U 5      (       a  [        U SSSS9 nUR	                  5       n[        UR                  [        5      (       a  UR                  S   nO+[        UR                  [        5      (       a  UR                  nSSS5        [        U SSSS9 n[        US	US
9n[        R                  U5      nU(       a2  USUR                  5        SU U SU 3-   X6R                  5       S -   nOSU U SU U 3nUR                  U5        UR                  5         SSS5        g! , (       d  f       N= f! , (       d  f       g= f)a  
Save the metadata dict in the upper YAML part Trying to preserve newlines as
in the existing file. Docs about open() with newline="" parameter:
https://docs.python.org/3/library/functions.html?highlight=open#open Does
not work with "^M" linebreaks, which are replaced by 

r*   rS   re   utf8)rW   rX   r   NrR   F)	sort_keysr,   r+   )ospathexistsr[   rh   r?   newlinestupler]   r   r9   r:   startr<   r\   close)r   r0   r,   r!   readme	data_yamlrG   outputs           r%   metadata_saver     s6    JG	ww~~j!!*c2?6kkmG&//511#__Q/
FOOS11#__
 @ 
j#rF	;vde
K	 ''0_u{{}-#j\)CPZ|0\\_fgpgpgrgt_uuF:,ykZL	JFV 
<	; @? 
<	;s   A+E4BE
E
E#F)metrics_configmetrics_verifieddataset_configdataset_splitdataset_revisionmetrics_verification_tokenmodel_pretty_nametask_pretty_nametask_idmetrics_pretty_name
metrics_idmetrics_valuedataset_pretty_name
dataset_idr   r   r   r   r   r   c                 B    S[        U [        UUUUUUUUU	UU
UUS9/S90$ )u  
Creates a metadata dict with the result from a model evaluated on a dataset.

Args:
    model_pretty_name (`str`):
        The name of the model in natural language.
    task_pretty_name (`str`):
        The name of a task in natural language.
    task_id (`str`):
        Example: automatic-speech-recognition. A task id.
    metrics_pretty_name (`str`):
        A name for the metric in natural language. Example: Test WER.
    metrics_id (`str`):
        Example: wer. A metric id from https://hf.co/metrics.
    metrics_value (`Any`):
        The value from the metric. Example: 20.0 or "20.0 ± 1.2".
    dataset_pretty_name (`str`):
        The name of the dataset in natural language.
    dataset_id (`str`):
        Example: common_voice. A dataset id from https://hf.co/datasets.
    metrics_config (`str`, *optional*):
        The name of the metric configuration used in `load_metric()`.
        Example: bleurt-large-512 in `load_metric("bleurt", "bleurt-large-512")`.
    metrics_verified (`bool`, *optional*, defaults to `False`):
        Indicates whether the metrics originate from Hugging Face's [evaluation service](https://huggingface.co/spaces/autoevaluate/model-evaluator) or not. Automatically computed by Hugging Face, do not set.
    dataset_config (`str`, *optional*):
        Example: fr. The name of the dataset configuration used in `load_dataset()`.
    dataset_split (`str`, *optional*):
        Example: test. The name of the dataset split used in `load_dataset()`.
    dataset_revision (`str`, *optional*):
        Example: 5503434ddd753f426f4b38109466949a1217c2bb. The name of the dataset dataset revision
        used in `load_dataset()`.
    metrics_verification_token (`bool`, *optional*):
        A JSON Web Token that is used to verify whether the metrics originate from Hugging Face's [evaluation service](https://huggingface.co/spaces/autoevaluate/model-evaluator) or not.

Returns:
    `dict`: a metadata dict with the result from a model evaluated on a dataset.

Example:
    ```python
    >>> from huggingface_hub import metadata_eval_result
    >>> results = metadata_eval_result(
    ...         model_pretty_name="RoBERTa fine-tuned on ReactionGIF",
    ...         task_pretty_name="Text Classification",
    ...         task_id="text-classification",
    ...         metrics_pretty_name="Accuracy",
    ...         metrics_id="accuracy",
    ...         metrics_value=0.2662102282047272,
    ...         dataset_pretty_name="ReactionJPEG",
    ...         dataset_id="julien-c/reactionjpeg",
    ...         dataset_config="default",
    ...         dataset_split="test",
    ... )
    >>> results == {
    ...     'model-index': [
    ...         {
    ...             'name': 'RoBERTa fine-tuned on ReactionGIF',
    ...             'results': [
    ...                 {
    ...                     'task': {
    ...                         'type': 'text-classification',
    ...                         'name': 'Text Classification'
    ...                     },
    ...                     'dataset': {
    ...                         'name': 'ReactionJPEG',
    ...                         'type': 'julien-c/reactionjpeg',
    ...                         'config': 'default',
    ...                         'split': 'test'
    ...                     },
    ...                     'metrics': [
    ...                         {
    ...                             'type': 'accuracy',
    ...                             'value': 0.2662102282047272,
    ...                             'name': 'Accuracy',
    ...                             'verified': False
    ...                         }
    ...                     ]
    ...                 }
    ...             ]
    ...         }
    ...     ]
    ... }
    True

    ```
model-index)	task_name	task_typemetric_namemetric_typemetric_valuedataset_namedataset_typemetric_configverifiedverify_tokenr   r   r   )
model_nameeval_results)r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                 r%   metadata_eval_resultr   ,  sQ    R 	2(.% 3 *!.!4!+"0-!;#1"/%5
 r(   )rb   	overwriterc   r|   r}   r~   r   r   r{   metadatarb   r   rc   r|   r}   r~   r   r   c                   Ub  UOSnUb  US:X  a  [         n
O(US:X  a  [        n
OUS:X  a  [        n
O[        SU 35      e U
R	                  XUS9nUR                  5        GH  u  pUS:X  Ga=  S	US
   ;  a  [        USU 5      US
   S	'   [        U5      u  pUR                  R                  c"  XR                  l        XR                  l        Mo  UR                  R                  nU H  nSnU H  nUR                  U5      (       d  M  UU:w  a-  U(       d&  [        SUR                   SUR                    S35      eSnUR"                  Ul        UR$                  SL d  Mr  UR&                  Ul        M     U(       a  M  UR                  R                  R)                  U5        M     GMJ  UR                  R+                  U5      b5  U(       d.  UR                  R+                  U5      U:w  a  [        SU S35      eXR                  U'   GM     UR-                  U UUUUUUU	S9$ ! [
         a.    US:X  a  [        S5      eU
R                  [        5       5      n GNf = f)a  
Updates the metadata in the README.md of a repository on the Hugging Face Hub.
If the README.md file doesn't exist yet, a new one is created with metadata and an
the default ModelCard or DatasetCard template. For `space` repo, an error is thrown
as a Space cannot exist without a `README.md` file.

Args:
    repo_id (`str`):
        The name of the repository.
    metadata (`dict`):
        A dictionary containing the metadata to be updated.
    repo_type (`str`, *optional*):
        Set to `"dataset"` or `"space"` if updating to a dataset or space,
        `None` or `"model"` if updating to a model. Default is `None`.
    overwrite (`bool`, *optional*, defaults to `False`):
        If set to `True` an existing field can be overwritten, otherwise
        attempting to overwrite an existing field will cause an error.
    token (`str`, *optional*):
        The Hugging Face authentication token.
    commit_message (`str`, *optional*):
        The summary / title / first line of the generated commit. Defaults to
        `f"Update metadata with huggingface_hub"`
    commit_description (`str` *optional*)
        The description of the generated commit
    revision (`str`, *optional*):
        The git revision to commit from. Defaults to the head of the
        `"main"` branch.
    create_pr (`boolean`, *optional*):
        Whether or not to create a Pull Request from `revision` with that commit.
        Defaults to `False`.
    parent_commit (`str`, *optional*):
        The OID / SHA of the parent commit, as a hexadecimal string. Shorthands (7 first characters) are also supported.
        If specified and `create_pr` is `False`, the commit will fail if `revision` does not point to `parent_commit`.
        If specified and `create_pr` is `True`, the pull request will be created from `parent_commit`.
        Specifying `parent_commit` ensures the repo has not changed before committing the changes, and can be
        especially useful if the repo is updated / committed to concurrently.
Returns:
    `str`: URL of the commit which updated the card metadata.

Example:
    ```python
    >>> from huggingface_hub import metadata_update
    >>> metadata = {'model-index': [{'name': 'RoBERTa fine-tuned on ReactionGIF',
    ...             'results': [{'dataset': {'name': 'ReactionGIF',
    ...                                      'type': 'julien-c/reactiongif'},
    ...                           'metrics': [{'name': 'Recall',
    ...                                        'type': 'recall',
    ...                                        'value': 0.7762102282047272}],
    ...                          'task': {'name': 'Text Classification',
    ...                                   'type': 'text-classification'}}]}]}
    >>> url = metadata_update("hf-internal-testing/reactiongif-roberta-card", metadata)

    ```
z$Update metadata with huggingface_hubr    r   r   zUnknown repo_type: )rc   rb   zJCannot update metadata on a Space that doesn't contain a `README.md` file.r   namer   r   Fz6You passed a new value for the existing metric 'name: z, type: z6'. Set `overwrite=True` to overwrite existing metrics.Tz9You passed a new value for the existing meta data field 'z7'. Set `overwrite=True` to overwrite existing metadata.)rc   rb   r|   r}   r   r~   r   )r   r   r   rA   rk   r   r   r   itemsgetattrr   r0   r   r   is_equal_except_valuer   r   r   r   r   appendgetr   )r{   r   rb   r   rc   r|   r}   r~   r   r   
card_classcardkeyvaluer   new_resultsexisting_results
new_resultresult_foundexisting_results                       r%   metadata_updater    ss   H (6'A^GmN I0
	i	 
	g	
.yk:;;4wyI nn&
-U1X%#*4w#Ga &A%&H#Jyy%%-)4		&'1		$#'99#9#9  #.J#(L+;%;;OLL)_<Y&0%//9/E/E.Fh'1'='=&> ?F%F'" !" ,0L;E;R;RO8.774??I?V?V < ,< (<		..55jA! #.& yy}}S!-iDIIMMRUDVZ_D_ OPSu UL L 
 "'		#W 'Z %-#  	 	i  4ijj ''
34s   H% %4II)9r   repathlibr   typingr   r   r   r   r   r	   rs   r=   huggingface_hub.file_downloadr
   huggingface_hub.hf_apir   huggingface_hub.repocard_datar   r   r   r   r   r   r   huggingface_hub.utilsr   r   r   rS   r   errorsr   utilsr   r   r   
get_loggerr   rB   __file__rY   r   r   compiler9   r   r   r   r   r]   r.   r   r   r   r   r  r8   r(   r%   <module>r     s   	 	  < <   9 .   M L  & H H 
		H	% x.//+=@WW  N11K?B[[  ::RS i iX	N` N`b>`( >`B  1I)J *
eCI. 
8D> 
eCI. d t T %)"$(#'&*04}} } 	}
 } } } } } SM} } SM} C=} sm} !)}  
!}@ 
  $$((,"#'QQQ }	Q
 Q C=Q SMQ !Q smQ Q C=Q 	Q Qr(   