ó
    pyüiˆ  ã                   óü  • S SK r S SKrS SKJr  S SKJrJ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JrJr  SS	KJr  SS
KJr  SSKJrJ r J!r!  \ RD                  " \#5      r$\" \%5      RL                  S-  S-  r'\" \%5      RL                  S-  S-  r(\RR                  " S5      r* " S S5      r+ " S S\+5      r, " S S\+5      r- " S S\+5      r.S\/S\S   4S jr0S\/\-  S\1S-  4S jr2S\/\-  S\1SS4S jr3SS SSSSS!.S"\/S#\/S$\/S%\/S&\/S'\S(\/S)\/S*\/S-  S+\4S,\/S-  S-\/S-  S.\/S-  S/\/S-  S\14S0 jjr5\!SS SSSSS SS1.S2\/S3\1S4\/S-  S5\4S6\/S-  S7\/S-  S8\/S-  S9\/S-  S:\4S;\/S-  S\/4S< jj5       r6g)=é    N)ÚPath)ÚAnyÚLiteral)Úhf_hub_download)Úupload_file)ÚCardDataÚDatasetCardDataÚ
EvalResultÚModelCardDataÚSpaceCardDataÚeval_results_to_model_indexÚmodel_index_to_eval_results)ÚHfHubHTTPErrorÚget_sessionÚhf_raise_for_statusÚ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S
 jr\   SS\	\-  S\	S-  S\	S-  S\
4S jj5       rSS\	S-  4S jjr       S S\	S\	S-  S\	S-  S\	S-  S\	S-  S\	S-  S\
S-  S\	S-  4S jjr\  S!S\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.
N)r    r   )Úselfr   r    s      ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/huggingface_hub/repocard.pyÚ__init__ÚRepoCard.__init__*   s   € ðD '=Ô#Ø�ó    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.contentO   sz   € ô )¨¯©Ó7×?¸4ˆ
Ø�Z�L §¡×!2Ñ!2¸j×YmÑYmÐ!2Ð!nÐ oÐpzÐo{Ð{~ð  @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Úendr1   ÚyamlÚ	safe_loadÚ
isinstanceÚdictÚ
ValueErrorÚloggerÚwarningÚcard_data_classr    r.   ÚlistÚkeysr0   )r"   r   ÚmatchÚ
yaml_blockÚ	data_dicts        r#   r   r2   U   sÁ   € ð  Œä ×'Ñ'¨Ó0ˆÞàŸ™ Q›ˆJØ§	¡	£ Ð.ˆDŒIÜŸš zÓ2ˆIàÑ Ø�	ô ˜i¬×.Ñ.Ü Ð!LÓMÐMð /ô �N‰NÐ_Ô`ØˆIØŒIà×(Ò(Ñi¨9ÑiÈT×MhÑMhÒiˆŒ	Ü# I§N¡NÓ$4Ó5ˆÕr&   c                 ó   • U R                   $ ©N)r   )r"   s    r#   Ú__str__ÚRepoCard.__str__p   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"   rL   Úfs      r#   ÚsaveÚRepoCard.saves   sQ   € ô ˜“>ˆØ�‰×Ñ d°TÐÑ:ä�( ¨b¸7ÒCÀqØ�G‰G”C˜“IÔ÷ D×CÖCús   ²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 "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"]

    ```
)r`   ra   z.Cannot load RepoCard: path not found on disk (z).ÚrrQ   rR   rS   )r    N)r   Úis_filer=   r[   r   r   ÚREPOCARD_NAMEr`   r?   rY   Úread)Úclsr_   r`   ra   r    Ú	card_pathr\   s          r#   ÚloadÚRepoCard.load‡   sª   € ôH �Ó ×(Ñ(×*Ñ*Ü˜_Ó-‰IÜ˜¬×-Ñ-ÜÜØ#Ü×+Ñ+Ø'×8¨3¯=©=Øñ	ó‰Iô ÐMÈoÐM^Ð^`ÐaÓbÐbð �^‰^ ¨b¸7ˆ^ÑCÀqÙ�q—v‘v“xÐ8NÑO÷ D×C×Cús   Â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5        g! [
         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.
)ÚrepoTyper   ÚAcceptz
text/plainz(https://huggingface.co/api/validate-yaml)ÚjsonÚheadersi�  N)	r`   r[   r   Úpostr   r   Ústatus_coder?   r1   )r"   r`   Úbodyro   ÚresponseÚexcs         r#   ÚvalidateÚRepoCard.validate½   s‰   € ð( ×/ §¡ˆ	ð "Ü˜4“yñ
ˆð ˜\Ð*ˆð	Ü"“}×)Ñ)Ð*TÐ[_Ð)ÐqˆHÜ Õ)øÜó 	Ø×#Ñ# sÓ*Ü  §¡Ó/Ð/à�	ûð		ús   ©#A Á
BÁ'A>Á>BÚrepo_idÚcommit_messageÚcommit_descriptionÚrevisionÚ	create_prÚparent_commitc	                 óT  • U=(       d    U R                   nU R                  US9  [        5        n	[        U	5      [        R
                  -  n
U
R                  [        U 5      SS9  [        [        U
5      [        R
                  UUUUUUUUS9
nSSS5        U$ ! , (       d  f       W$ = f)ar  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 too concurrently.
Returns:
    `str`: URL of the commit which updated the card metadata.
)r`   rR   )rV   )
Úpath_or_fileobjÚpath_in_reporw   ra   r`   rx   ry   r{   rz   r|   N)	r`   ru   r   r   r   re   Ú
write_textr[   r   )r"   rw   ra   r`   rx   ry   rz   r{   r|   ÚtmpdirÚtmp_pathÚurls               r#   Úpush_to_hubÚRepoCard.push_to_hubâ   s¤   € ðR ×/ §¡ˆ	ð 	�‰ 	ˆÑ*ä#Ô%¨Ü˜F“|¤i×&=Ñ&=Ñ=ˆHØ×Ñ¤ D£	°GÐÑ<ÜÜ # 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†   r6   )r   Újinja2ÚImportErrorÚto_dictÚcopyÚupdater   Ú	read_textÚdefault_template_pathÚTemplateÚrenderr/   )	rg   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ÓFˆLØ—?‘? <Ó0ˆØ—/’/ÑJ¨I×,=Ñ,=Ó,?ÐJÀ6ÑJˆÙ�7‹|Ðr&   )r-   r0   r   r.   r    r1   )F)NNFrI   )NNNNNNN©NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   rB   ÚTEMPLATE_MODELCARD_PATHr�   r`   r[   Úboolr$   Úpropertyr   ÚsetterrJ   r   r]   Úclassmethodri   ru   r„   r–   Ú__static_attributes__r6   r&   r#   r   r   %   s   † Ø€OØ3ÐØ€Iñ# ð #¸Tõ #ðJ ñWó ðWð
 ‡^�^ð6˜só 6ó ð6ò4ð˜T C™Zô ð( ð !%Ø Ø',ñ3Pà˜t™ð3Pð ˜‘:ð3Pð �T‰zð	3Pð
 !%ô3Pó ð3Pñj# #¨¡*õ #ðP !Ø $Ø%)Ø)-Ø#Ø!%Ø$(ñ=àð=ð �T‰zð=ð ˜‘:ð	=ð
 ˜d™
ð=ð   $™Jð=ð ˜‘*ð=ð ˜$‘;ð=ð ˜T‘zõ=ð~ ð %)Ø#'ñ	(àð(ð ˜T‘zð(ð ˜D‘jô	(ó ó(r&   r   c            	       ób   ^ • \ rS rSr\r\rSr\	  S	S\S\
S-  S\
S-  4U 4S jjj5       rSrU =r$ )
Ú	ModelCardiM  r   Nr†   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–   ©rg   r†   r‡   rˆ   r“   Ú	__class__s        €r#   r–   ÚModelCard.from_templateR  s   ø€ ôR ‰wÒ$ Y¸|Ñ_ÈÑ_Ð_r&   r6   r˜   )r™   rš   r›   rœ   r   rB   r�   r�   r`   r¡   r[   r–   r¢   Ú__classcell__©r©   s   @r#   r¤   r¤   M  s[   ø† Ø#€OØ3ÐØ€Iàð %)Ø#'ñ	H`à ðH`ð ˜T‘zðH`ð ˜D‘j÷	H`ó öH`r&   r¤   c            	       ób   ^ • \ rS rSr\r\rSr\	  S	S\S\
S-  S\
S-  4U 4S jjj5       rSrU =r$ )
ÚDatasetCardiž  ÚdatasetNr†   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&   r6   r˜   )r™   rš   r›   rœ   r	   rB   ÚTEMPLATE_DATASETCARD_PATHr�   r`   r¡   r[   r–   r¢   r«   r¬   s   @r#   r®   r®   ž  sV   ø† Ø%€OØ5ÐØ€Iàð %)Ø#'ñ	8`à"ð8`ð ˜T‘zð8`ð ˜D‘j÷	8`ó ö8`r&   r®   c                   ó    • \ rS rSr\r\rSrSr	g)Ú	SpaceCardiß  Úspacer6   N)
r™   rš   r›   rœ   r   rB   r�   r�   r`   r¢   r6   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)zÔDetect 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�!ƒ|ØØƒz�d“jØØ	ƒ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 )Nr4   r5   )
r   r�   r7   r8   r9   r;   r<   r=   r>   r?   )r¾   r   rE   rF   r.   s        r#   Úmetadata_loadrÀ   ú  sh   € Ü�:Ó×(Ñ(Ó*€GÜ×#Ñ# GÓ,€EÞØ—[‘[ “^ˆ
Ü�~Š~˜jÓ)ˆØ‰<œ: d¬D×1Ñ1ØˆKÜÐDÓEÐEàr&   r.   c                 óÊ  • SnSn[         R                  R                  U 5      (       a~  [        U 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(   rQ   Úutf8)rU   rV   r   NrP   F)Ú	sort_keysr*   r)   )ÚosÚpathÚexistsrY   rf   r=   ÚnewlinesÚtupler[   r   r7   r8   Ústartr:   rZ   Úclose)r¾   r.   r*   r   ÚreadmeÚ	data_yamlrE   Úoutputs           r#   Úmetadata_saverÎ     s2  € ð €JØ€Gä	‡w�w‡~�~�j×!Ñ!Ü�* b°6Ò:¸fØ—k‘k“mˆGÜ˜&Ÿ/™/¬5×1Ñ1Ø#Ÿ_™_¨QÑ/‘
Ü˜FŸO™O¬S×1Ñ1Ø#Ÿ_™_�
÷ ;ô 
ˆj˜# r°FÒ	;¸vÜ˜d¨eÀ
ÑKˆ	ä ×'Ñ'¨Ó0ˆÞØ˜_˜uŸ{™{›}Ð-°#°j°\À)ÀÈCÐPZÈ|Ð0\Ñ\Ð_f×gpÑgpÓgrÐgtÐ_uÑu‰Fà˜:˜, y k°°Z°LÀÀ	ÐJˆFà�‰�VÔØ�‰Œ÷ 
<Ð	;÷ ;Õ:ú÷ 
<Õ	;ús   ´A+EÂ3B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&   )r`   Ú	overwritera   rx   ry   rz   r{   r|   rw   Úmetadatar`   rì   ra   rx   ry   rz   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  pÍUS:X  Ga=  S	US
   ;  a  [        USU 5      US
   S	'   [        U5      u  pïUR                  R                  c"  XûR                  l        XëR                  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XÛR                  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
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 too 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: )ra   r`   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.)ra   r`   rx   ry   r{   rz   r|   )r¤   r®   r   r?   ri   r   r–   r   ÚitemsÚgetattrr   r.   rê   ré   Úis_equal_except_valuerá   râ   rã   rç   rè   ÚappendÚgetr„   )rw   rí   r`   rì   ra   rx   ry   rz   r{   r|   Ú
card_classÚcardÚkeyÚvalueré   Únew_resultsÚexisting_resultsÚ
new_resultÚresult_foundÚexisting_results                       r#   Úmetadata_updaterþ   §  ss  € ðH (6Ñ'A‘^ÐGm€Nð Ñ˜I¨Ó0Ü‰
Ø	�iÓ	Ü ‰
Ø	�gÓ	Ü‰
äÐ.¨y¨kÐ:Ó;Ð;ð4Ø�‰˜w¸yˆÐIˆð —n‘n×&‰
ˆØ�-Ôà˜U 1™XÓ%Ü#*¨4°¸wÓ#G��a‘˜Ñ Ü&AÀ%Ó&HÑ#ˆJØ�y‰y×%Ñ%Ñ-Ø)4—	‘	Ô&Ø'1—	‘	Ö$à#'§9¡9×#9Ñ#9Ð ó #.�JØ#(�LÛ+;˜Ø%×;Ñ;¸O×LÓLØ)¨_Ó<ÆYÜ&0ð%/Ø/9×/EÑ/EÐ.FÀhØ'1×'=Ñ'=Ð&>ð ?Fð%Fó'"ð !"ð ,0˜LØ;E×;RÑ;R˜OÔ8Ø.×7Ñ7¸4Ô?Ø?I×?VÑ?V Ö <ñ ,<÷ (˜<ØŸ	™	×.Ñ.×5Ñ5°jÖAô! #.ð& �y‰y�}‰}˜SÓ!Ñ-¶iÀDÇIÁIÇMÁMÐRUÓDVÐZ_ÓD_Ü ØOÐPSÈuð ULð Lóð ð
 "'—	‘	˜#”ñW 'ðZ ×ÑØØØØ%Ø-ØØØ#ð ð 	ð 	øôk ó 4Ø˜ÓÜÐiÓjÐjð ×'Ñ'¬«
Ó3‹ð4ús   ÁH% È%4IÉI)7rÄ   ÚreÚpathlibr   Útypingr   r   r;   Úhuggingface_hub.file_downloadr   Úhuggingface_hub.hf_apir   Úhuggingface_hub.repocard_datar   r	   r
   r   r   r   r   Úhuggingface_hub.utilsr   r   r   r   r   rQ   r   Úerrorsr   Úutilsr   r   r   Ú
get_loggerr™   r@   Ú__file__rW   r�   r²   Úcompiler7   r   r¤   r®   r´   r[   r,   r>   rÀ   rÎ   rž   rë   rþ   r6   r&   r#   Ú<module>r     sµ  ðÛ 	Û 	Ý ß ã å 9Ý .÷÷ ñ ÷ rÕ qå Ý &ß HÑ Hð 
×	Ò	˜HÓ	%€ñ ˜x›.×/Ñ/°+Ñ=Ð@WÑWÐ Ù  ›N×1Ñ1°KÑ?ÐB[Ñ[Ð ð —:’:ÐRÓSÐ ÷eñ eôP	N`�ô N`ôb>`�(ô >`ôB�ô ð ð ¨Ð1IÑ)Jô ð*
˜c D™jð 
¨T°D©[ô 
ð˜c D™jð °ð ¸ô ðT "&Ø"Ø!%Ø $Ø#'Ø-1ò}àð}ð ð}ð ð	}ð
 ð}ð ð}ð ð}ð ð}ð ð}ð ˜$‘Jð}ð ð}ð ˜$‘Jð}ð ˜‘:ð}ð ˜D‘jð}ð !$ d¡
ð}ð  
õ!}ð@ ð
 !ØØØ!%Ø%)ØØØ $òRØðRàðRð �T‰zð	Rð
 ðRð �‰:ðRð ˜$‘JðRð ˜d™
ðRð �D‰jðRð ðRð ˜‘:ðRð 	ôRó ñRr&   