
    HTh"              	          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  S SKJrJr  \R                  " \5      r\ " S S5      5       r\ " S S	5      5       rS
\	\\\\   4      S\	\   S\\   4S jr " S S\5      r " S S\5      r " S S\5      rS\\\\4      S\
\\\   4   4S jrS rS\S
\\   S\\\\4      4S jrS\	\\      S\	\\      4S jrg)    N)defaultdict)	dataclass)AnyDictListOptionalTupleUnion)logging	yaml_dumpc                      \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   Sr\	\   \S	'   Sr
\	\   \S
'   Sr\	\   \S'   Sr\	\   \S'   Sr\	\\\4      \S'   Sr\	\   \S'   Sr\	\   \S'   Sr\	\\\4      \S'   Sr\	\   \S'   Sr\	\   \S'   Sr\	\   \S'   Sr\	\   \S'   \S\4S j5       rSS S\4S jrSS jrSrg)
EvalResult   uC  
Flattened representation of individual evaluation results found in model-index of Model Cards.

For more information on the model-index spec, see https://github.com/huggingface/hub-docs/blob/main/modelcard.md?plain=1.

Args:
    task_type (`str`):
        The task identifier. Example: "image-classification".
    dataset_type (`str`):
        The dataset identifier. Example: "common_voice". Use dataset id from https://hf.co/datasets.
    dataset_name (`str`):
        A pretty name for the dataset. Example: "Common Voice (French)".
    metric_type (`str`):
        The metric identifier. Example: "wer". Use metric id from https://hf.co/metrics.
    metric_value (`Any`):
        The metric value. Example: 0.9 or "20.0 ± 1.2".
    task_name (`str`, *optional*):
        A pretty name for the task. Example: "Speech Recognition".
    dataset_config (`str`, *optional*):
        The name of the dataset configuration used in `load_dataset()`.
        Example: fr in `load_dataset("common_voice", "fr")`. See the `datasets` docs for more info:
        https://hf.co/docs/datasets/package_reference/loading_methods#datasets.load_dataset.name
    dataset_split (`str`, *optional*):
        The split used in `load_dataset()`. Example: "test".
    dataset_revision (`str`, *optional*):
        The revision (AKA Git Sha) of the dataset used in `load_dataset()`.
        Example: 5503434ddd753f426f4b38109466949a1217c2bb
    dataset_args (`Dict[str, Any]`, *optional*):
        The arguments passed during `Metric.compute()`. Example for `bleu`: `{"max_order": 4}`
    metric_name (`str`, *optional*):
        A pretty name for the metric. Example: "Test WER".
    metric_config (`str`, *optional*):
        The name of the metric configuration used in `load_metric()`.
        Example: bleurt-large-512 in `load_metric("bleurt", "bleurt-large-512")`.
        See the `datasets` docs for more info: https://huggingface.co/docs/datasets/v2.1.0/en/loading#load-configurations
    metric_args (`Dict[str, Any]`, *optional*):
        The arguments passed during `Metric.compute()`. Example for `bleu`: max_order: 4
    verified (`bool`, *optional*):
        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.
    verify_token (`str`, *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.
    source_name (`str`, *optional*):
        The name of the source of the evaluation result. Example: "Open LLM Leaderboard".
    source_url (`str`, *optional*):
        The URL of the source of the evaluation result. Example: "https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard".
	task_typedataset_typedataset_namemetric_typemetric_valueN	task_namedataset_configdataset_splitdataset_revisiondataset_argsmetric_namemetric_configmetric_argsverifiedverify_tokensource_name
source_urlreturnc                 t    U R                   U R                  U R                  U R                  U R                  4$ )z9Returns a tuple that uniquely identifies this evaluation.)r   r   r   r   r   selfs    U/var/www/auris/envauris/lib/python3.13/site-packages/huggingface_hub/repocard_data.pyunique_identifierEvalResult.unique_identifier   s9     NN!!
 	
    otherc                     U R                   R                  5        H/  u  p#US:X  a  M  US:w  d  M  [        X5      [        X5      :w  d  M/    g   g)z`
Return True if `self` and `other` describe exactly the same metric but with a
different value.
r   r   FT)__dict__itemsgetattr)r$   r)   key_s       r%   is_equal_except_value EvalResult.is_equal_except_value   sK    
 mm))+FCn$ n$);wu?R)R , r(   c                 P    U R                   b  U R                  c  [        S5      eg g )NzAIf `source_name` is provided, `source_url` must also be provided.)r   r    
ValueErrorr#   s    r%   __post_init__EvalResult.__post_init__   s,    'DOO,C`aa -D'r(    )r!   N)__name__
__module____qualname____firstlineno____doc__str__annotations__r   r   r   r   r   r   r   r   r   r   r   r   boolr   r   r    propertytupler&   r0   r4   __static_attributes__r6   r(   r%   r   r      s4   -f N      $Ix}# %)NHSM( $(M8C=' '+hsm* .2L(4S>*1 "&K#%
 $(M8C=' -1K$sCx.)0  $Hhtn# #'L(3-& "&K#% !%J$
5 
 
< D br(   r   c                       \ rS rSrSrSS\4S jjrS rS rSS\	\
\      S	\4S
 jjrS rS rSS\S\S	\4S jjrSS\S\S	\4S jjrS\S	\4S jrS\S\S	S4S jrS\S	\4S jrS	\4S jrSrg)CardData   a  Structure containing metadata from a RepoCard.

[`CardData`] is the parent class of [`ModelCardData`] and [`DatasetCardData`].

Metadata can be exported as a dictionary or YAML. Export can be customized to alter the representation of the data
(example: flatten evaluation results). `CardData` behaves as a dictionary (can get, pop, set values) but do not
inherit from `dict` to allow this export step.
ignore_metadata_errorsc                 :    U R                   R                  U5        g N)r+   update)r$   rE   kwargss      r%   __init__CardData.__init__   s    V$r(   c                     [         R                  " U R                  5      nU R                  U5        UR	                  5        VVs0 s H  u  p#Uc  M
  X#_M     snn$ s  snnf )zConverts CardData to a dict.

Returns:
    `dict`: CardData represented as a dictionary ready to be dumped to a YAML
    block for inclusion in a README.md file.
)copydeepcopyr+   _to_dictr,   )r$   	data_dictr.   values       r%   to_dictCardData.to_dict   sK     MM$--0	i -6__->T->zs%

->TTTs   	AAc                     g)zUse this method in child classes to alter the dict representation of the data. Alter the dict in-place.

Args:
    data_dict (`dict`): The raw dict representation of the card data.
Nr6   r$   rP   s     r%   rO   CardData._to_dict   s     	r(   Noriginal_orderr!   c                 F   U(       ao  U[        [        U R                  R                  5       5      [        U5      -
  5      -    Vs0 s H#  nX0R                  ;   d  M  X0R                  U   _M%     snU l        [	        U R                  5       SUS9R                  5       $ s  snf )zDumps CardData to a YAML block for inclusion in a README.md file.

Args:
    line_break (str, *optional*):
        The line break to use when dumping to yaml.

Returns:
    `str`: CardData represented as a YAML block.
F)	sort_keys
line_break)listsetr+   keysr   rR   strip)r$   rZ   rW   ks       r%   to_yamlCardData.to_yaml   s      ($s4==3E3E3G/H3~K^/^*___A% $==##_DM
 5ZPVVXXs   BBc                 ,    [        U R                  5      $ rG   )reprr+   r#   s    r%   __repr__CardData.__repr__   s    DMM""r(   c                 "    U R                  5       $ rG   )r`   r#   s    r%   __str__CardData.__str__   s    ||~r(   r.   defaultc                 F    U R                   R                  U5      nUc  U$ U$ z#Get value for a given metadata key.)r+   get)r$   r.   ri   rQ   s       r%   rl   CardData.get   s%    !!#&-w2U2r(   c                 8    U R                   R                  X5      $ )z#Pop value for a given metadata key.)r+   pop)r$   r.   ri   s      r%   ro   CardData.pop   s    }}  ..r(   c                      U R                   U   $ rk   r+   r$   r.   s     r%   __getitem__CardData.__getitem__   s    }}S!!r(   rQ   c                      X R                   U'   g)z#Set value for a given metadata key.Nrr   )r$   r.   rQ   s      r%   __setitem__CardData.__setitem__   s    "cr(   c                     XR                   ;   $ )z%Check if a given metadata key is set.rr   rs   s     r%   __contains__CardData.__contains__   s    mm##r(   c                 ,    [        U R                  5      $ )z'Return the number of metadata keys set.)lenr+   r#   s    r%   __len__CardData.__len__   s    4==!!r(   rr   )F)NNrG   )r7   r8   r9   r:   r;   r>   rJ   rR   rO   r   r   r<   r`   rd   rg   r   rl   ro   rt   rw   rz   intr~   rA   r6   r(   r%   rC   rC      s    %t %
UYxS	7J YVY Y$#3s 3S 3C 3
/s /S /C /"s "s "#s #3 #4 #$ $ $" "r(   rC   eval_results
model_namer!   c                     U c  / $ [        U [        5      (       a  U /n [        U [        5      (       a  [        S U  5       5      (       d  [	        S[        U 5       S35      eUc  [	        S5      eU $ )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7frG   )
isinstancer   ).0rs     r%   	<genexpr>)_validate_eval_results.<locals>.<genexpr>   s     4eXdSTZ:5N5NXds   zM`eval_results` should be of type `EvalResult` or a list of `EvalResult`, got .z7Passing `eval_results` requires `model_name` to be set.)r   r   r[   allr3   type)r   r   s     r%   _validate_eval_resultsr      s}     	,
++$~lD))4eXd4e1e1e[\`am\n[oopq
 	
 RSSr(   c                     ^  \ rS rSrSrSSSSSSSSSSSSSS.S\\\\\   4      S\\\\\   4      S\\\	      S	\\\\\   4      S
\\   S\\   S\\   S\\   S\\\      S\\   S\\   S\\\      S\
4U 4S jjjrS rSrU =r$ )ModelCardDatai	  ai  Model Card Metadata that is used by Hugging Face Hub when included at the top of your README.md

Args:
    base_model (`str` or `List[str]`, *optional*):
        The identifier of the base model from which the model derives. This is applicable for example if your model is a
        fine-tune or adapter of an existing model. The value must be the ID of a model on the Hub (or a list of IDs
        if your model derives from multiple models). Defaults to None.
    datasets (`Union[str, List[str]]`, *optional*):
        Dataset or list of datasets that were used to train this model. Should be a dataset ID
        found on https://hf.co/datasets. Defaults to None.
    eval_results (`Union[List[EvalResult], EvalResult]`, *optional*):
        List of `huggingface_hub.EvalResult` that define evaluation results of the model. If provided,
        `model_name` is used to as a name on PapersWithCode's leaderboards. Defaults to `None`.
    language (`Union[str, List[str]]`, *optional*):
        Language of model's training data or metadata. It must be an ISO 639-1, 639-2 or
        639-3 code (two/three letters), or a special value like "code", "multilingual". Defaults to `None`.
    library_name (`str`, *optional*):
        Name of library used by this model. Example: keras or any library from
        https://github.com/huggingface/huggingface.js/blob/main/packages/tasks/src/model-libraries.ts.
        Defaults to None.
    license (`str`, *optional*):
        License of this model. Example: apache-2.0 or any license from
        https://huggingface.co/docs/hub/repositories-licenses. Defaults to None.
    license_name (`str`, *optional*):
        Name of the license of this model. Defaults to None. To be used in conjunction with `license_link`.
        Common licenses (Apache-2.0, MIT, CC-BY-SA-4.0) do not need a name. In that case, use `license` instead.
    license_link (`str`, *optional*):
        Link to the license of this model. Defaults to None. To be used in conjunction with `license_name`.
        Common licenses (Apache-2.0, MIT, CC-BY-SA-4.0) do not need a link. In that case, use `license` instead.
    metrics (`List[str]`, *optional*):
        List of metrics used to evaluate this model. Should be a metric name that can be found
        at https://hf.co/metrics. Example: 'accuracy'. Defaults to None.
    model_name (`str`, *optional*):
        A name for this model. It is used along with
        `eval_results` to construct the `model-index` within the card's metadata. The name
        you supply here is what will be used on PapersWithCode's leaderboards. If None is provided
        then the repo name is used as a default. Defaults to None.
    pipeline_tag (`str`, *optional*):
        The pipeline tag associated with the model. Example: "text-classification".
    tags (`List[str]`, *optional*):
        List of tags to add to your model that can be used when filtering on the Hugging
        Face Hub. Defaults to None.
    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.
    kwargs (`dict`, *optional*):
        Additional metadata that will be added to the model card. Defaults to None.

Example:
    ```python
    >>> from huggingface_hub import ModelCardData
    >>> card_data = ModelCardData(
    ...     language="en",
    ...     license="mit",
    ...     library_name="timm",
    ...     tags=['image-classification', 'resnet'],
    ... )
    >>> card_data.to_dict()
    {'language': 'en', 'license': 'mit', 'library_name': 'timm', 'tags': ['image-classification', 'resnet']}

    ```
NF)
base_modeldatasetsr   languagelibrary_namelicenselicense_namelicense_linkmetricsr   pipeline_tagtagsrE   r   r   r   r   r   r   r   r   r   r   r   r   rE   c                  > Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        [        U5      U l        UR                  SS 5      nU(       a   [        U5      u  pXl	        X0l        [*        TU ]X  " S0 UD6  U R                  (       a'   [/        U R                  U R                  5      U l        g g ! [        [         4 aB  nU(       a  ["        R%                  S5         S nANz['        SUR(                   SU S35      eS nAff = f! [0         a9  nU(       a  ["        R%                  SU S35         S nAg ['        SU 35      UeS nAff = f)	Nmodel-indexz<Invalid model-index. Not loading eval results into CardData.z4Invalid `model_index` in metadata cannot be parsed:  z. Pass `ignore_metadata_errors=True` to ignore this error while loading a Model Card. Warning: some information will be lost. Use it at your own risk.z!Failed to validate eval_results: z). Not loading eval results into CardData.r6   )r   r   r   r   r   r   r   r   r   r   r   _to_unique_listr   ro   model_index_to_eval_resultsKeyError	TypeErrorloggerwarningr3   	__class__superrJ   r   	Exception)r$   r   r   r   r   r   r   r   r   r   r   r   r   rE   rI   model_indexerrorer   s                     r%   rJ   ModelCardData.__init__I  s[   $ % ( ((($(#D)	jj5+F{+S(
",$0! 	"6"U$:4;L;Ldoo$^!  i( )NN#abb$NuN__`af`g hS S 	  U)NN%FqcIr#stt$'H%LMSTT	Us<   .C )%D% D" DDD"%
E(/ E#E##E(c                 r    U R                   b*  [        U R                  U R                   5      US'   US	 US	 gg)z[Format the internal data dict. In this case, we convert eval results to a valid model indexNr   r   r   )r   eval_results_to_model_indexr   rU   s     r%   rO   ModelCardData._to_dict  s>    ('B4??TXTeTe'fIm$.)9\+B )r(   )r   r   r   r   r   r   r   r   r   r   r   r   )r7   r8   r9   r:   r;   r   r
   r<   r   r   r>   rJ   rO   rA   __classcell__r   s   @r%   r   r   	  sD   =D 7;483748&*!%&*&*'+$(&*$(',8U U3S	>238U 5d3i01	8U
 tJ/08U 5d3i018U sm8U #8U sm8U sm8U $s)$8U SM8U sm8U tCy!8U !%8U 8UtC Cr(   r   c                   t  ^  \ rS rSrSrSSSSSSSSSSSSSSS.S\\\\\   4      S\\\\\   4      S\\\\\   4      S	\\\\\   4      S
\\\\\   4      S\\\\\   4      S\\\      S\\\\\   4      S\\\\\   4      S\\   S\\   S\\	   S\\\\\   4      S\
4U 4S jjjrS rSrU =r$ )DatasetCardDatai  aG	  Dataset Card Metadata that is used by Hugging Face Hub when included at the top of your README.md

Args:
    language (`List[str]`, *optional*):
        Language of dataset's data or metadata. It must be an ISO 639-1, 639-2 or
        639-3 code (two/three letters), or a special value like "code", "multilingual".
    license (`Union[str, List[str]]`, *optional*):
        License(s) of this dataset. Example: apache-2.0 or any license from
        https://huggingface.co/docs/hub/repositories-licenses.
    annotations_creators (`Union[str, List[str]]`, *optional*):
        How the annotations for the dataset were created.
        Options are: 'found', 'crowdsourced', 'expert-generated', 'machine-generated', 'no-annotation', 'other'.
    language_creators (`Union[str, List[str]]`, *optional*):
        How the text-based data in the dataset was created.
        Options are: 'found', 'crowdsourced', 'expert-generated', 'machine-generated', 'other'
    multilinguality (`Union[str, List[str]]`, *optional*):
        Whether the dataset is multilingual.
        Options are: 'monolingual', 'multilingual', 'translation', 'other'.
    size_categories (`Union[str, List[str]]`, *optional*):
        The number of examples in the dataset. Options are: 'n<1K', '1K<n<10K', '10K<n<100K',
        '100K<n<1M', '1M<n<10M', '10M<n<100M', '100M<n<1B', '1B<n<10B', '10B<n<100B', '100B<n<1T', 'n>1T', and 'other'.
    source_datasets (`List[str]]`, *optional*):
        Indicates whether the dataset is an original dataset or extended from another existing dataset.
        Options are: 'original' and 'extended'.
    task_categories (`Union[str, List[str]]`, *optional*):
        What categories of task does the dataset support?
    task_ids (`Union[str, List[str]]`, *optional*):
        What specific tasks does the dataset support?
    paperswithcode_id (`str`, *optional*):
        ID of the dataset on PapersWithCode.
    pretty_name (`str`, *optional*):
        A more human-readable name for the dataset. (ex. "Cats vs. Dogs")
    train_eval_index (`Dict`, *optional*):
        A dictionary that describes the necessary spec for doing evaluation on the Hub.
        If not provided, it will be gathered from the 'train-eval-index' key of the kwargs.
    config_names (`Union[str, List[str]]`, *optional*):
        A list of the available dataset configs for the dataset.
NF)r   r   annotations_creatorslanguage_creatorsmultilingualitysize_categoriessource_datasetstask_categoriestask_idspaperswithcode_idpretty_nametrain_eval_indexconfig_namesrE   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   c                   > X0l         X@l        Xl        X l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        U=(       d    UR                  SS 5      U l        [        TU ]<  " S0 UD6  g )Ntrain-eval-indexr6   )r   r   r   r   r   r   r   r   r   r   r   r   ro   r   r   rJ   )r$   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   rI   r   s                   r%   rJ   DatasetCardData.__init__  sv    & %9!!2 .... !2&( !1 XFJJ?QSW4X"6"r(   c                 ,    UR                  S5      US'   g )Nr   r   )ro   rU   s     r%   rO   DatasetCardData._to_dict  s    (16H(I	$%r(   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r7   r8   r9   r:   r;   r   r
   r<   r   r   r>   rJ   rO   rA   r   r   s   @r%   r   r     s   %T 5937@D=A;?;?/3;?48+/%)+/8<',!"# 5d3i01"# %T#Y/0	"#
 'uS$s)^'<="# $E#tCy.$9:"# "%T#Y"78"# "%T#Y"78"# "$s),"# "%T#Y"78"# 5d3i01"# $C="# c]"# #4."# uS$s)^45"#  !%!"# "#HJ Jr(   r   c                      ^  \ rS rSrSrSSSSSSSSSSSSS.S\\   S\\   S\\   S	\\   S
\\   S\\   S\\   S\\   S\\\      S\\\      S\\\      S\	4U 4S jjjr
SrU =r$ )SpaceCardDatai  a8	  Space Card Metadata that is used by Hugging Face Hub when included at the top of your README.md

To get an exhaustive reference of Spaces configuration, please visit https://huggingface.co/docs/hub/spaces-config-reference#spaces-configuration-reference.

Args:
    title (`str`, *optional*)
        Title of the Space.
    sdk (`str`, *optional*)
        SDK of the Space (one of `gradio`, `streamlit`, `docker`, or `static`).
    sdk_version (`str`, *optional*)
        Version of the used SDK (if Gradio/Streamlit sdk).
    python_version (`str`, *optional*)
        Python version used in the Space (if Gradio/Streamlit sdk).
    app_file (`str`, *optional*)
        Path to your main application file (which contains either gradio or streamlit Python code, or static html code).
        Path is relative to the root of the repository.
    app_port (`str`, *optional*)
        Port on which your application is running. Used only if sdk is `docker`.
    license (`str`, *optional*)
        License of this model. Example: apache-2.0 or any license from
        https://huggingface.co/docs/hub/repositories-licenses.
    duplicated_from (`str`, *optional*)
        ID of the original Space if this is a duplicated Space.
    models (List[`str`], *optional*)
        List of models related to this Space. Should be a dataset ID found on https://hf.co/models.
    datasets (`List[str]`, *optional*)
        List of datasets related to this Space. Should be a dataset ID found on https://hf.co/datasets.
    tags (`List[str]`, *optional*)
        List of tags to add to your Space that can be used when filtering on the Hub.
    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.
    kwargs (`dict`, *optional*):
        Additional metadata that will be added to the space card.

Example:
    ```python
    >>> from huggingface_hub import SpaceCardData
    >>> card_data = SpaceCardData(
    ...     title="Dreambooth Training",
    ...     license="mit",
    ...     sdk="gradio",
    ...     duplicated_from="multimodalart/dreambooth-training"
    ... )
    >>> card_data.to_dict()
    {'title': 'Dreambooth Training', 'sdk': 'gradio', 'license': 'mit', 'duplicated_from': 'multimodalart/dreambooth-training'}
    ```
NF)titlesdksdk_versionpython_versionapp_fileapp_portr   duplicated_frommodelsr   r   rE   r   r   r   r   r   r   r   r   r   r   r   rE   c                   > Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        [        U5      U l        [        TU ]4  " S0 UD6  g )Nr6   )r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   )r$   r   r   r   r   r   r   r   r   r   r   r   rE   rI   r   s                 r%   rJ   SpaceCardData.__init__  sV    " 
&,  . #D)	"6"r(   )r   r   r   r   r   r   r   r   r   r   r   )r7   r8   r9   r:   r;   r   r<   r   r   r>   rJ   rA   r   r   s   @r%   r   r     s    /h  $!%)(,"&"&!%)-&*(,$(',# }# c]	#
 c]# !# 3-# 3-# ## "## c## 49%# tCy!# !%# #r(   r   r   c           	      :   / nU  GH  nUS   nUS   nU GHz  nUS   S   nUS   R                  S5      nUS   S   nUS   S   n	US   R                  S5      n
US   R                  S5      nUS   R                  S5      nUS   R                  S	5      nUR                  S
0 5      R                  S5      nUR                  S
0 5      R                  S5      nUS    H  nUS   nUS   nUR                  S5      nUR                  S	5      nUR                  S5      nUR                  S5      nUR                  S5      n[        S 0 SU_SU_SU	_SU_SU_SU_SU
_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_6nUR                  U5        M     GM}     GM     WU4$ )!a  Takes in a model index and returns the model name and a list of `huggingface_hub.EvalResult` objects.

A detailed spec of the model index can be found here:
https://github.com/huggingface/hub-docs/blob/main/modelcard.md?plain=1

Args:
    model_index (`List[Dict[str, Any]]`):
        A model index data structure, likely coming from a README.md file on the
        Hugging Face Hub.

Returns:
    model_name (`str`):
        The name of the model as found in the model index. This is used as the
        identifier for the model on leaderboards like PapersWithCode.
    eval_results (`List[EvalResult]`):
        A list of `huggingface_hub.EvalResult` objects containing the metrics
        reported in the provided model_index.

Example:
    ```python
    >>> from huggingface_hub.repocard_data import model_index_to_eval_results
    >>> # Define a minimal model index
    >>> model_index = [
    ...     {
    ...         "name": "my-cool-model",
    ...         "results": [
    ...             {
    ...                 "task": {
    ...                     "type": "image-classification"
    ...                 },
    ...                 "dataset": {
    ...                     "type": "beans",
    ...                     "name": "Beans"
    ...                 },
    ...                 "metrics": [
    ...                     {
    ...                         "type": "accuracy",
    ...                         "value": 0.9
    ...                     }
    ...                 ]
    ...             }
    ...         ]
    ...     }
    ... ]
    >>> model_name, eval_results = model_index_to_eval_results(model_index)
    >>> model_name
    'my-cool-model'
    >>> eval_results[0].task_type
    'image-classification'
    >>> eval_results[0].metric_type
    'accuracy'

    ```
nameresultstaskr   datasetconfigsplitrevisionargssourceurlr   rQ   r   verifyTokenr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r6   )rl   r   append)r   r   elemr   r   resultr   r   r   r   r   r   r   r   r   r    metricr   r   r   r   r   r   r   eval_results                            r%   r   r   +  s0   p LF|y/Fvv.Iv**62I!),V4L!),V4L#I.228<N"9-11':M%i044Z@!),008L **Xr266v>KHb155e<J +$Vn%g$jj0$jj0 &

8 4!::j1%zz-8( '!- ". !,	
 ". ( $2 #0 &6 ". !, !, #0 & ".  !,!"  *#& ##K09 ,  X r(   c                     [        U [        [        [        45      (       a  [	        U 5      " S U  5       5      $ [        U [
        5      (       a&  [	        U 5      " S U R                  5        5       5      $ U $ )zc
Recursively remove `None` values from a dict. Borrowed from: https://stackoverflow.com/a/20558778
c              3   @   #    U  H  oc  M  [        U5      v   M     g 7frG   _remove_none)r   xs     r%   r   _remove_none.<locals>.<genexpr>  s     G#Qa#s   c              3   f   #    U  H'  u  pUc  M
  Uc  M  [        U5      [        U5      4v   M)     g 7frG   r   )r   r_   vs      r%   r   r     s+     wWX;ij;,q/<?;s   	111)r   r[   r@   r\   r   dictr,   )objs    r%   r   r     sZ     #eS)**CyG#GGG	C		Cyw		www
r(   c                    [        [        5      nU H   nX#R                     R                  U5        M"     / nUR	                  5        GH  nUS   nUR
                  UR                  S.UR                  UR                  UR                  UR                  UR                  UR                  S.U Vs/ s HS  nUR                  UR                  UR                  UR                   UR"                  UR$                  UR&                  S.PMU     snS.nUR(                  b.  SUR(                  0n	UR*                  b  UR*                  U	S'   XS'   UR                  U5        GM     U US	./n
[-        U
5      $ s  snf )
a@  Takes in given model name and list of `huggingface_hub.EvalResult` and returns a
valid model-index that will be compatible with the format expected by the
Hugging Face Hub.

Args:
    model_name (`str`):
        Name of the model (ex. "my-cool-model"). This is used as the identifier
        for the model on leaderboards like PapersWithCode.
    eval_results (`List[EvalResult]`):
        List of `huggingface_hub.EvalResult` objects containing the metrics to be
        reported in the model-index.

Returns:
    model_index (`List[Dict[str, Any]]`): The eval_results converted to a model-index.

Example:
    ```python
    >>> from huggingface_hub.repocard_data import eval_results_to_model_index, EvalResult
    >>> # Define minimal eval_results
    >>> eval_results = [
    ...     EvalResult(
    ...         task_type="image-classification",  # Required
    ...         dataset_type="beans",  # Required
    ...         dataset_name="Beans",  # Required
    ...         metric_type="accuracy",  # Required
    ...         metric_value=0.9,  # Required
    ...     )
    ... ]
    >>> eval_results_to_model_index("my-cool-model", eval_results)
    [{'name': 'my-cool-model', 'results': [{'task': {'type': 'image-classification'}, 'dataset': {'name': 'Beans', 'type': 'beans'}, 'metrics': [{'type': 'accuracy', 'value': 0.9}]}]}]

    ```
r   )r   r   )r   r   r   r   r   r   )r   rQ   r   r   r   r   r   )r   r   r   r   r   r   )r   r   )r   r[   r&   r   valuesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   )r   r   task_and_ds_types_mapr   model_index_datar   sample_resultr   datar   r   s              r%   r   r     s   J :ET9J#;;<CCKP $ (//1
 &//%//
 &22%22'66&44)::%22$ & &F #..#00"..$22".. &#)#6#6 &
4 ##/}//F ((4!.!:!:v#N%I 2T '	
K $$=s   1AE2
r   c                 V    U c  U $ / nU  H  nX!;  d  M
  UR                  U5        M     U$ rG   )r   )r   unique_tagstags      r%   r   r     s7    |K!s#  r(   )rM   collectionsr   dataclassesr   typingr   r   r   r   r	   r
   huggingface_hub.utilsr   r   
get_loggerr7   r   r   rC   r<   r   r   r   r   r   r   r   r   r6   r(   r%   <module>r      si    # ! : : 4 
		H	% Tb Tb Tbn P" P" P"f5T*-=!=>? 
*"~CH ~CBMJh MJ`N#H N#beT$sCx.-A eeCQUV`QaLaFb eP	Y%C Y%tJ?O Y%TXY]^acf^fYgTh Y%x(49- (492E r(   