
    Y jW              	          S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	  \R                  " \5      r\ " S S5      5       r\ " S S	5      5       rS
\\\   -  S-  S\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-  S\\   S-  4S jrg)    N)defaultdict)	dataclass)Any)logging	yaml_dumpc                      \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   Sr\S-  \S	'   Sr	\S-  \S
'   Sr
\S-  \S'   Sr\S-  \S'   Sr\\\4   S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\\\4   S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \S'   Sr\S-  \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    n/root/GenerationalWealth/GenerationalWealth/venv/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   dictr   r   r   r   boolr   r   r   propertytupler!   r+   r/   __static_attributes__r1   r#   r    r	   r	      s4   -f N     !IsTz  "&NC$J% !%M3:$ $(cDj' +/L$sCx.4'. #Kt"
 !%M3:$ *.Kc3h$&- !HdTk   $L#*# #Kt" "Jd
!
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-  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   rA   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.
Nr1   r   rL   s     r    rK   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   rN   strip)r   rV   rS   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      $ rC   )reprr&   r   s    r    __repr__CardData.__repr__   s    DMM""r#   c                 "    U R                  5       $ rC   )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)   re   rM   s       r    rh   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)   re   s      r    rk   CardData.pop   s    }}  ..r#   c                      U R                   U   $ rg   r&   r   r)   s     r    __getitem__CardData.__getitem__   s    }}S!!r#   rM   c                      X R                   U'   g)z#Set value for a given metadata key.Nrn   )r   r)   rM   s      r    __setitem__CardData.__setitem__   s    "cr#   c                     XR                   ;   $ )z%Check if a given metadata key is set.rn   ro   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#   rn   )F)NNrC   )r2   r3   r4   r5   r6   r:   rF   rN   rK   rW   r7   r\   r`   rc   r   rh   rk   rp   rs   rv   intrz   r=   r1   r#   r    r?   r?      s    %t %
UYtCy47G YSV Y$#3s 3S 3C 3
/s /S /C /"s "s "#s #3 #4 #$ $ $" "r#   r?   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rC   )
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	   rW   allr.   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\\\   -  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
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tagsrA   r   r   r}   r   r   r   r   r   r   r~   r   r   rA   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.r1   )r   r   r}   r   r   r   r   r   r   r~   r   _to_unique_listr   rk   model_index_to_eval_resultsKeyError	TypeErrorloggerwarningr.   	__class__superrF   r   	Exception)r   r   r   r}   r   r   r   r   r   r   r~   r   r   rA   rE   model_indexerrorer   s                     r    rF   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~   rQ   s     r    rK   ModelCardData._to_dict  s>    ('B4??TXTeTe'fIm$.)9\+B )r#   )r   r   r}   r   r   r   r   r   r   r~   r   r   )r2   r3   r4   r5   r6   r7   rW   r	   r:   rF   rK   r=   __classcell__r   s   @r    r   r   	  s5   =D .2+/04+/#'"#'#'$(!%#'!%',8U $s)Od*8U S	/D(	8U
 :&-8U S	/D(8U Dj8U t8U Dj8U Dj8U cT!8U $J8U Dj8U 3i$8U !%8U 8UtC Cr#   r   c                   P  ^  \ 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-  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
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_namesrA   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   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-indexr1   )r   r   r   r   r   r   r   r   r   r   r   r   rk   r   r   rF   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   rE   r   s                   r    rF   DatasetCardData.__init__  sv    & %9!!2 .... !2&( !1 XFJJ?QSW4X"6"r#   c                 ,    UR                  S5      US'   g )Nr   r   )rk   rQ   s     r    rK   DatasetCardData._to_dict  s    (16H(I	$%r#   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r2   r3   r4   r5   r6   r7   rW   r9   r:   rF   rK   r=   r   r   s   @r    r   r     sb   %T ,0*.7;482626,026+/(,"&(,/3',!"# S	/D("# tCy4'	"#
 "DIo4"# c?T1"# tCy4/"# tCy4/"# cT)"# tCy4/"# S	/D("# :"# 4Z"# +"# DIo,"#  !%!"# "#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-  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   rA   r   r   r   r   r   r   r   r   r   r   r   rA   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 )Nr1   )r   r   r   r   r   r   r   r   r   r   r   r   r   rF   )r   r   r   r   r   r   r   r   r   r   r   r   rA   rE   r   s                 r    rF   SpaceCardData.__init__  sV    " 
&,  . #D)	"6"r#   )r   r   r   r   r   r   r   r   r   r   r   )r2   r3   r4   r5   r6   r7   r|   rW   r:   rF   r=   r   r   s   @r    r   r     s    /h !"&%)##"&*#'%)!%',# Tz# 4Z	#
 4Z# d
# *# *# t# t# S	D # s)d"# 3i$# !%# #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   rM   r   verifyTokenr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   )rh   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rC   _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rC   r   )r   r[   vs      r    r   r     s+     wWX;ij;,q/<?;s   	111)r   rW   r<   rX   r   r9   r'   )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   rM   r   r   r   r   r   )r   r   r   r   r   r   )r   r   )r   rW   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 $ .0(//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$ rC   )r   )r   unique_tagstags      r    r   r     s7    |K!s#  r#   )rI   collectionsr   dataclassesr   typingr   huggingface_hub.utilsr   r   
get_loggerr2   r   r	   r?   rW   r7   r   r   r   r   r9   r<   r   r   r   r   r1   r#   r    <module>r      sa    # !  4 
		H	% Tb Tb Tbn P" P" P"ftJ//$6d
 
*"~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$s)d* tCy4/? r#   