Ë
    þÍ:j÷P  ã                   ó  — U d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlZd dlmZmZ d dlmZ d dlmZ dd	giZd
dddddddddddœZeee
eef   f   ed<   dZd=d„Zdedee   fd„Zdedededeeef   fd„Z	 d>d ee   d!ee   d"ede
eeee      f   fd#„Zd$eee      d ee   d!ee   dee   fd%„Zd&eee      d!ee   dee   fd'„Z	 	 	 d?d(ed)e	e   d*e	eegef      d+e	eegee   f      dee   f
d,„Z d-ee   d.ee   d/edeeef   fd0„Z!d-ee   d.ee   deeef   fd1„Z"d-eee      d.eee      deeef   fd2„Z#	 	 	 d?d3ee   d.eee      d4e$e
eef      d5ed)e	e   d*e	eegef      d+e	eegee   f      dee
eef   e$eeef      f   fd6„Z%d7eeee   f   deeef   fd8„Z&	 	 	 	 	 d@d3e
eee   f   d.e
eee   eee      f   d5ed   d9ed*e	eegef      d+e	eegee   f      d:e
ee'ed;f   f   deeef   fd<„Z(y)Aé    N)ÚCounter)ÚSequence)ÚAnyÚCallableÚListÚOptionalÚUnion)ÚTensorÚtensor)ÚLiteral)Ú_NLTK_AVAILABLE)Úrouge_scoreÚ_rouge_score_updateÚnltké   é   é   é   é   é   é   é   é	   ÚLÚLsum)Úrouge1Úrouge2Úrouge3Úrouge4Úrouge5Úrouge6Úrouge7Úrouge8Úrouge9ÚrougeLÚ	rougeLsumÚALLOWED_ROUGE_KEYS)ÚavgÚbestÚreturnc                  óÊ   — ddl } 	 | j                  j                  d«       y# t        $ r7 	 | j	                  ddddd¬«       Y y# t
        $ r}t        d«      |‚d}~ww xY ww xY w)	zyCheck whether `nltk` `punkt` is downloaded.

    If not, try to download if a machine is connected to the internet.

    r   Nztokenizers/punkt_tabÚ	punkt_tabTF)ÚquietÚforceÚhalt_on_errorÚraise_on_errorzz`nltk` resource `punkt` is not available on a disk and cannot be downloaded as a machine is not connected to the internet.)r   ÚdataÚfindÚLookupErrorÚdownloadÚ
ValueErrorÚOSError)r   Úerrs     úw/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchmetrics/functional/text/rouge.pyÚ _ensure_nltk_punkt_is_downloadedr9   +   so   € ó ð	Ø�	‰	�‰Ð-Õ.øÜò ð	Ø�M‰M˜+¨T¸ÈeÐdhˆMÖiøÜò 	Üð-óð ðûð	úðús&   †" ¢	A"¬AÁ	AÁAÁAÁA"Úxc                 ó�   — t         st        d«      ‚ddl}t        «        t	        j
                  dd| «       |j                  | «      S )z]Split sentence to get rougeLsum scores matching published rougeL scores for BART and PEGASUS.zQROUGE-Lsum calculation requires that `nltk` is installed. Use `pip install nltk`.r   Nz<n>Ú )r   ÚModuleNotFoundErrorr   r9   ÚreÚsubÚsent_tokenize)r:   r   s     r8   Ú_split_sentencerA   ?   s;   € åÜ!Ð"uÓvÐvÛä$Ô&ä‡F�Fˆ5�"�aÔØ×Ñ˜aÓ Ð ó    Úhits_or_lcsÚpred_lenÚ
target_lenc                 óÒ   — | |z  }| |z  }||cxk(  rdk(  r$n n!t        d«      t        d«      t        d«      dœS d|z  |z  ||z   z  }t        |«      t        |«      t        |«      dœS )a�  Compute overall metrics.

    This function computes precision, recall and F1 score based on hits/lcs, the length of lists of tokenizer
    predicted and target sentences.

    Args:
        hits_or_lcs: A number of matches or a length of the longest common subsequence.
        pred_len: A length of a tokenized predicted sentence.
        target_len: A length of a tokenized target sentence.

    ç        ©Ú	precisionÚrecallÚfmeasurer   )r   )rC   rD   rE   rI   rJ   rK   s         r8   Ú_compute_metricsrL   K   st   € ð ˜hÑ&€IØ˜:Ñ%€FØ�FÔ!˜cÕ!Ü# C›[´F¸3³KÌVÐTWË[ÑYÐYà�9‰}˜vÑ%¨°VÑ);Ñ<€HÜ 	Ó*´f¸V³nÔRXÐYaÓRbÑcÐcrB   Úpred_tokensÚtarget_tokensÚreturn_full_tablec                 óš  — t        t        |«      dz   «      D �cg c]  }dgt        | «      dz   z  ‘Œ }}t        dt        |«      dz   «      D ]l  }t        dt        | «      dz   «      D ]O  }||dz
     | |dz
     k(  r||dz
     |dz
     dz   ||   |<   Œ,t        ||dz
     |   ||   |dz
     «      ||   |<   ŒQ Œn |r|S |d   d   S c c}w )a0  DP algorithm to compute the length of the longest common subsequence.

    Args:
        pred_tokens: A tokenized predicted sentence.
        target_tokens: A tokenized target sentence.
        return_full_table: If the full table of logest common subsequence should be returned or just the largest

    r   r   éÿÿÿÿ)ÚrangeÚlenÚmax)rM   rN   rO   Ú_ÚlcsÚiÚjs          r8   Ú_lcsrY   `   sþ   € ô 27´s¸=Ó7IÈAÑ7MÓ1NÖ
O¨AˆAˆ3”#�kÓ" QÑ&Ó'Ð
O€CÐ
OÜ�1”c˜-Ó(¨1Ñ,Ó-ò >ˆÜ�qœ#˜kÓ*¨QÑ.Ó/ò 	>ˆAØ˜Q ™UÑ# {°1°q±5Ñ'9Ò9Ø  A¡™J q¨1¡uÑ-°Ñ1��A‘�q’	ä  A¨¡E¡
¨1¡¨s°1©v°a¸!±e©}Ó=��A‘�q’	ñ		>ð>ñ Øˆ
Øˆr‰7�2‰;Ðùò Ps   šCÚ	lcs_tablec                 ó  — t        |«      }t        |«      }g }|dkD  rc|dkD  r^||dz
     ||dz
     k(  r |j                  d|dz
  «       |dz  }|dz  }n"| |   |dz
     | |dz
     |   kD  r|dz  }n|dz  }|dkD  r|dkD  rŒ^|S )z÷Backtrack LCS table.

    Args:
        lcs_table: A table containing information for the calculation of the longest common subsequence.
        pred_tokens: A tokenized predicted sentence.
        target_tokens: A tokenized target sentence.

    r   r   )rS   Úinsert)rZ   rM   rN   rW   rX   Úbacktracked_lcss         r8   Ú_backtracked_lcsr^   w   s¶   € ô 	ˆKÓ€AÜˆMÓ€AØ!#€OØ
ˆaŠ%�A˜’EØ�q˜1‘uÑ ¨q°1©uÑ!5Ò5Ø×"Ñ" 1 a¨!¡eÔ,Ø�‰FˆAØ�‰F‰AØ�q‰\˜!˜a™%Ñ  9¨Q°©UÑ#3°AÑ#6Ò6Ø�‰F‰Aà�‰FˆAð ˆaŠ%�A˜“Eð ÐrB   Úpred_tokens_listc                 ó  — dt         t           dt         t           dt         t           fd„}dt         t         t              dt         t           fd„}| D �cg c]  } |||«      ‘Œ }} ||«      D �cg c]  }||   ‘Œ	 c}S c c}w c c}w )züFind union LCS between a target sentence and iterable of predicted tokens.

    Args:
        pred_tokens_list: A tokenized predicted sentence split by ``'\n'``.
        target_tokens: A tokenized single part of target sentence split by ``'\n'``.

    rM   rN   r*   c                 ó8   — t        | |d¬«      }t        || |«      S )zRReturn one of the longest of longest common subsequence via backtracked lcs table.T)rO   )rY   r^   )rM   rN   rZ   s      r8   Úlcs_indz_union_lcs.<locals>.lcs_indš   s    € ä-1°+¸}Ð`dÔ-eˆ	Ü 	¨;¸ÓFÐFrB   Ú
lcs_tablesc                 óB   — t         t        «       j                  | Ž «      S )z#Find union LCS given a list of LCS.)ÚsortedÚsetÚunion)rc   s    r8   Ú
find_unionz_union_lcs.<locals>.find_unionŸ   s   € ä�k”c“e—k‘k :Ð.Ó/Ð/rB   )r   ÚstrÚint)r_   rN   rb   rh   rM   rc   rW   s          r8   Ú
_union_lcsrk   ‘   s�   € ðGœX¤c™]ð G¼8ÄC¹=ð GÌXÔVYÉ]ó Gð
0œx¬´©Ñ6ð 0¼8ÄC¹=ó 0ð JZÖZ¸+‘'˜+ }Õ5ÐZ€JÐZÙ&0°Ó&<Ö= ˆM˜!ÓÒ=Ð=ùò [ùÚ=s   ÁB Á1BÚtextÚstemmerÚ
normalizerÚ	tokenizerc                 ó˜  — t        |«      r || «      n$t        j                  dd| j                  «       «      } t        |«      r || «      nt        j                  d| «      }|r.|D �cg c]#  }t        |«      dkD  r|j                  |«      n|‘Œ% }}|D �cg c]$  }t        |t        «      sŒt        |«      dkD  sŒ#|‘Œ& c}S c c}w c c}w )a  Rouge score should be calculated only over lowercased words and digits.

    Optionally, Porter stemmer can be used to strip word suffixes to improve matching. The text normalization follows
    the implemantion from `Rouge score_Text Normalizition`_.

    Args:
        text: An input sentence.
        stemmer: Porter stemmer instance to strip word suffixes to improve matching.
        normalizer: A user's own normalizer function.
            If this is ``None``, replacing any non-alpha-numeric characters with spaces is default.
            This function must take a ``str`` and return a ``str``.
        tokenizer:
            A user's own tokenizer function. If this is ``None``, splitting by spaces is default
            This function must take a ``str`` and return ``Sequence[str]``

    z
[^a-z0-9]+ú z\s+r   r   )	Úcallabler>   r?   ÚlowerÚsplitrS   ÚstemÚ
isinstanceri   )rl   rm   rn   ro   Útokensr:   s         r8   Ú_normalize_and_tokenize_textrx   §   s¬   € ô.  (¨
Ô3‰:�dÔ¼¿¹ÀÈsÐTX×T^ÑT^ÓT`Ó9a€Dô !)¨Ô 3‰Y�tŒ_¼¿¹À&È$Ó9O€Fáà@FÖG¸1¤S¨£V¨a¢Z�'—,‘,˜q”/°QÑ6ÐGˆÐGð ÖE�!¤*¨Q´Õ"4¼¸Q»À!»ŠAÒEÐEùò Hùò Fs   Á((CÂCÂ,CÂ;CÚpredÚtargetÚn_gramc                 ó–  ‡‡— dt         t           dt        dt        fd„} || |«       |||«      cŠŠt	        ‰j                  «       «      t	        ‰j                  «       «      }}d||fv r!t        d«      t        d«      t        d«      dœS t	        ˆˆfd„t        ‰«      D «       «      }t        |t        |d	«      t        |d	«      «      S )
z¶Compute precision, recall and F1 score for the Rouge-N metric.

    Args:
        pred: A predicted sentence.
        target: A target sentence.
        n_gram: N-gram overlap.

    rw   Únr*   c                 óŠ   ‡ ‡— t        «       }ˆˆ fd„t        t        ‰ «      ‰z
  dz   «      D «       D ]  }||xx   dz  cc<   Œ |S )Nc              3   ó@   •K  — | ]  }t        ‰||‰z    «      –— Œ y ­w©N)Útuple)Ú.0rW   r}   rw   s     €€r8   ú	<genexpr>z9_rouge_n_score.<locals>._create_ngrams.<locals>.<genexpr>×   s!   øè ø€ ÒS°1”e˜F 1 q¨1¡uÐ-×.ÑSùs   ƒr   )r   rR   rS   )rw   r}   ÚngramsÚngrams   ``  r8   Ú_create_ngramsz&_rouge_n_score.<locals>._create_ngramsÕ   sD   ù€ Ü!›)ˆÜS¼¼cÀ&»kÈA¹oÐPQÑ>QÓ8RÔSò 	ˆEØ�5‹M˜QÑŒMð	àˆrB   r   rG   rH   c              3   óB   •K  — | ]  }t        ‰|   ‰|   «      –— Œ y ­wr€   )Úmin)r‚   ÚwÚpred_ngramsÚtarget_ngramss     €€r8   rƒ   z!_rouge_n_score.<locals>.<genexpr>á   s!   øè ø€ ÒO¸Œs�;˜q‘> =°Ñ#3×4ÑOùs   ƒr   )
r   ri   rj   r   ÚsumÚvaluesr   rf   rL   rT   )	ry   rz   r{   r†   rD   rE   ÚhitsrŠ   r‹   s	          @@r8   Ú_rouge_n_scorer�   Ë   s¾   ù€ ðœx¬™}ð ´ð ¼ó ñ "0°°fÓ!=¹~ÈfÐV\Ó?]Ð€K�Ü˜{×1Ñ1Ó3Ó4´c¸-×:NÑ:NÓ:PÓ6Qˆj€HØˆX�zÐ"Ñ"Ü# C›[´F¸3³KÌVÐTWË[ÑYÐYô ÔO¼cÀ+Ó>NÔOÓO€DÜ˜D¤# h°Ó"2´C¸
ÀAÓ4FÓGÐGrB   c                 ó®   — t        | «      t        |«      }}d||fv r!t        d«      t        d«      t        d«      dœS t        | |«      }t        |||«      S )z–Compute precision, recall and F1 score for the Rouge-L metric.

    Args:
        pred: A predicted sentence.
        target: A target sentence.

    r   rG   rH   )rS   r   rY   rL   )ry   rz   rD   rE   rV   s        r8   Ú_rouge_l_scorer‘   å   sW   € ô ˜t›9¤c¨&£kˆj€HØˆX�zÐ"Ñ"Ü# C›[´F¸3³KÌVÐTWË[ÑYÐYä�D˜&Ó!€CÜ˜C ¨:Ó6Ð6rB   c                 óÄ  — t        t        t        | «      «      }t        t        t        |«      «      }d||fv r!t        d«      t        d«      t        d«      dœS dt        t        t
              dt        fd„} || «      } ||«      }d}|D ]F  }t        | |«      }	|	D ]3  }
||
   dkD  sŒ||
   dkD  sŒ|dz  }||
xx   dz  cc<   ||
xx   dz  cc<   Œ5 ŒH t        |||«      S )a>  Compute precision, recall and F1 score for the Rouge-LSum metric.

    More information can be found in Section 3.2 of the referenced paper [1]. This implementation follow the official
    implementation from:
    https://github.com/google-research/google-research/blob/master/rouge/rouge_scorer.py.

    Args:
        pred: An iterable of predicted sentence split by '\n'.
        target: An iterable target sentence split by '\n'.

    References:
        [1] ROUGE: A Package for Automatic Evaluation of Summaries by Chin-Yew Lin. https://aclanthology.org/W04-1013/

    r   rG   rH   Ú	sentencesr*   c                 óJ   — t        «       }| D ]  }|j                  |«       Œ |S r€   )r   Úupdate)r“   r„   Úsentences      r8   Ú_get_token_countsz,_rouge_lsum_score.<locals>._get_token_counts
  s)   € Ü!›)ˆØ!ò 	$ˆHØ�M‰M˜(Õ#ð	$àˆrB   r   )	rŒ   ÚmaprS   r   r   ri   r   rk   rL   )ry   rz   rD   rE   r—   Úpred_tokens_countÚtarget_tokens_countrŽ   ÚtgtrV   Útokens              r8   Ú_rouge_lsum_scorer�   õ   s  € ô ”3”s˜D“>Ó"€HÜ”Sœ˜fÓ%Ó&€JØˆX�zÐ"Ñ"Ü# C›[´F¸3³KÌVÐTWË[ÑYÐYð¤X¬h´s©mÑ%<ð Äó ñ *¨$Ó/ÐÙ+¨FÓ3Ðð €DØò 0ˆÜ˜˜sÓ#ˆØò 	0ˆEØ  Ñ'¨!Ó+Ð0CÀEÑ0JÈQÓ0NØ˜‘	�Ø! %Ó(¨AÑ-Ó(Ø# EÓ*¨aÑ/Ô*ñ		0ð0ô ˜D (¨JÓ7Ð7rB   ÚpredsÚrouge_keys_valuesÚ
accumulatec                 ó  — |D �ci c]  }|g “Œ }}t        | |«      D �]B  \  }	}
|D �ci c]  }|i “Œ }}|D �ci c]  }|g “Œ }}g }t        |	|||«      }d|v r$t        |	«      D �cg c]  }t        ||||«      ‘Œ }}|
D ]¸  }t        ||||«      }d|v r$t        |«      D �cg c]  }t        ||||«      ‘Œ }}|D ]\  }t        |t        «      rt        |||«      }n#|dk(  rt        ||«      }n|dk(  rt        «      }||<   ||   j                  |«       Œ^ |j                  |j                  «       «       Œº |dk(  r_|D ]X  }t        j                  t        j                  |D �cg c]
  }||   d   ‘Œ c}«      «      }||   j                  ||   |   «       ŒZ �Œ€|dk(  s�Œ‡|D �ci c]  }|i “Œ }}|j                  «       D ]{  \  }}i }|D ]7  }|j                  «       D ]"  \  }}||vrg ||<   ||   j                  |«       Œ$ Œ9 |D �ci c])  }|t        j                  ||   «      j                  «       “Œ+ c}||<   Œ} |D ]  }||   j                  ||   «       Œ �ŒE |S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )a«  Update the rouge score with the current set of predicted and target sentences.

    Args:
        preds: An iterable of predicted sentences.
        target: An iterable of iterable of target sentences.
        rouge_keys_values: List of N-grams/'L'/'Lsum' arguments.
        accumulate: Useful in case of multi-reference rouge score.
            ``avg`` takes the avg of all references with respect to predictions
            ``best`` takes the best fmeasure score obtained between prediction and multiple corresponding references.
            Allowed values are ``avg`` and ``best``.
        stemmer: Porter stemmer instance to strip word suffixes to improve matching.
        normalizer:
            A user's own normalizer function.
            If this is ``None``, replacing any non-alpha-numeric characters with spaces is default.
            This function must take a `str` and return a `str`.
        tokenizer:
            A user's own tokenizer function. If this is ``None``, splitting by spaces is default
            This function must take a `str` and return `Sequence[str]`

    Example:
        >>> preds = ["My name is John"]
        >>> target = [["Is your name John"]]
        >>> from pprint import pprint
        >>> score = _rouge_score_update(preds, target, rouge_keys_values=[1, 2, 'L'], accumulate='best')
        >>> pprint(score)
        {1: [{'fmeasure': tensor(0.7500),
              'precision': tensor(0.7500),
              'recall': tensor(0.7500)}],
         2: [{'fmeasure': tensor(0.), 'precision': tensor(0.), 'recall': tensor(0.)}],
         'L': [{'fmeasure': tensor(0.5000),
                'precision': tensor(0.5000),
                'recall': tensor(0.5000)}]}

    r   r   r)   rK   r(   )Úziprx   rA   rv   rj   r�   r‘   r�   ÚappendÚcopyÚtorchÚargmaxr   ÚitemsÚmean)rž   rz   rŸ   r    rm   rn   ro   Ú	rouge_keyÚresultsÚpred_rawÚ
target_rawÚresult_innerÚ
result_avgÚlist_resultsry   Úpred_sentenceÚ	pred_lsumÚtarget_raw_innerr›   Útgt_sentenceÚtarget_lsumÚscoreÚkÚsÚindexÚnew_result_avgÚmetricsÚ_dict_metric_score_batchÚmetricÚ_typeÚvalues                                  r8   r   r      s>  € ðV _pÖ>pÐQZ¸yÈ"¹}Ð>p€GÐ>pä # E¨6Ó 2ó 5EÑˆ�*ØarÖAsÐT]À)ÈRÁ-ÐAsˆÐAsØevÖEwÐXaÀiÐQSÁmÐEwˆ
ÐEwØˆÜ+¨H°g¸zÈ9ÓUˆØÐ&Ñ&ô &5°XÓ%>öà!ô -¨]¸GÀZÐQZÕ[ðˆIð ð
 !+ò 	5ÐÜ.Ð/?ÀÈ*ÐV_Ó`ˆCàÐ*Ñ*ô )8Ð8HÓ(Iöà$ô 1°¸wÈ
ÐT]Õ^ð�ð ð
 /ò 4�	Ü˜i¬Ô-Ü*¨4°°iÓ@‘EØ #Ò%Ü*¨4°Ó5‘EØ &Ò(Ü-¨i¸ÓE�EØ*/�˜YÑ'Ø˜9Ñ%×,Ñ,¨UÕ3ð4ð ×Ñ × 1Ñ 1Ó 3Õ4ð%	5ð( ˜ÒØ&ò :�ÜŸ™¤U§\¡\È\Ö2ZÈ°1°Q±4¸
Ó3CÒ2ZÓ%[Ó\�Ø˜‘
×!Ñ! ,¨uÑ"5°aÑ"8Õ9ò:ð ˜5Ô à/@öHØ"+�	˜2‘ðHˆNð Hð '1×&6Ñ&6Ó&8ò 
Ñ"�	˜7ØDFÐ(Ø%ò F�FØ(.¯©«ò F™˜˜uØ Ð(@Ñ@Ø>@Ð4°UÑ;Ø0°Ñ7×>Ñ>¸uÕEñFðFð ^vö-ØTY�Eœ5Ÿ<™<Ð(@ÀÑ(GÓH×MÑMÓOÑOò-�˜yÒ)ð
ð /ò E�	Ø˜	Ñ"×)Ñ)¨.¸Ñ*CÕDòEði5Eðn €Nùòs ?qùò BtùÚEwùòùòùò$ 3[ùòHùò-s-   …
I%¨
I*¸
I/Á%I4Â I9Å%I>Æ(
JÈ.JÚsentence_resultsc                 ó”   — i }| i k(  r|S | j                  «       D ]+  \  }}t        j                  |«      j                  «       ||<   Œ- |S )zÈCompute the combined ROUGE metric for all the input set of predicted and target sentences.

    Args:
        sentence_results: Rouge-N/Rouge-L/Rouge-LSum metrics calculated for single sentence.

    )r§   r¥   r   r¨   )r¿   rª   r©   Úscoress       r8   Ú_rouge_score_computerÂ   ‡  sV   € ð "$€Gà˜2ÒØˆà-×3Ñ3Ó5ò 9Ñˆ	�6Ü"Ÿ\™\¨&Ó1×6Ñ6Ó8ˆ�	Òð9ð €NrB   Úuse_stemmerÚ
rouge_keys.c           
      ó\  — |rt         st        d«      ‚ddl}|r$j                  j                  j                  «       nd}t        |t        «      s|f}|D ]6  }	|	t        vsŒt        d|	› dt        t        j                  «       «      › �«      ‚ |D �	cg c]  }	t        |	   ‘Œ }
}	t        |t        «      r6t        d„ |D «       «      r$t        | t        «      r|gn|D �cg c]  }|g‘Œ c}}t        | t        «      r| g} t        |t        «      r|gg}t        | ||
||||¬«      }|
D ��ci c]  }dD ]  }d	|› d
|› �g “Œ Œ }}}|j                  «       D ]>  \  }}|D ]4  }|j                  «       D ]  \  }}|d	|› d
|› �   j!                  |«       Œ! Œ6 Œ@ t#        |«      S c c}	w c c}w c c}}w )az	  Calculate `Calculate Rouge Score`_ , used for automatic summarization.

    Args:
        preds: An iterable of predicted sentences or a single predicted sentence.
        target:
            An iterable of iterables of target sentences or an iterable of target sentences or a single target sentence.
        accumulate:
            Useful in case of multi-reference rouge score.

            - ``avg`` takes the avg of all references with respect to predictions
            - ``best`` takes the best fmeasure score obtained between prediction and multiple corresponding references.

        use_stemmer: Use Porter stemmer to strip word suffixes to improve matching.
        normalizer: A user's own normalizer function.
            If this is ``None``, replacing any non-alpha-numeric characters with spaces is default.
            This function must take a ``str`` and return a ``str``.
        tokenizer: A user's own tokenizer function. If this is ``None``, splitting by spaces is default
            This function must take a ``str`` and return ``Sequence[str]``
        rouge_keys: A list of rouge types to calculate.
            Keys that are allowed are ``rougeL``, ``rougeLsum``, and ``rouge1`` through ``rouge9``.

    Return:
        Python dictionary of rouge scores for each input rouge key.

    Example:
        >>> from torchmetrics.functional.text.rouge import rouge_score
        >>> preds = "My name is John"
        >>> target = "Is your name John"
        >>> from pprint import pprint
        >>> pprint(rouge_score(preds, target))
        {'rouge1_fmeasure': tensor(0.7500),
         'rouge1_precision': tensor(0.7500),
         'rouge1_recall': tensor(0.7500),
         'rouge2_fmeasure': tensor(0.),
         'rouge2_precision': tensor(0.),
         'rouge2_recall': tensor(0.),
         'rougeL_fmeasure': tensor(0.5000),
         'rougeL_precision': tensor(0.5000),
         'rougeL_recall': tensor(0.5000),
         'rougeLsum_fmeasure': tensor(0.5000),
         'rougeLsum_precision': tensor(0.5000),
         'rougeLsum_recall': tensor(0.5000)}


    Raises:
        ModuleNotFoundError:
            If the python package ``nltk`` is not installed.
        ValueError:
            If any of the ``rouge_keys`` does not belong to the allowed set of keys.

    References:
        [1] ROUGE: A Package for Automatic Evaluation of Summaries by Chin-Yew Lin. https://aclanthology.org/W04-1013/

    zBStemmer requires that `nltk` is installed. Use `pip install nltk`.r   NzGot unknown rouge key z. Expected to be one of c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr€   )rv   ri   )r‚   r›   s     r8   rƒ   zrouge_score.<locals>.<genexpr>æ  s   è ø€ Ò'OÀ¬
°3¼×(<Ñ'Oùs   ‚)rm   rn   ro   r    )rK   rI   rJ   ÚrougerU   )r   r=   r   ru   ÚporterÚPorterStemmerrv   r�   r'   r5   ÚlistÚkeysÚallri   r   r§   r£   rÂ   )rž   rz   r    rÃ   rn   ro   rÄ   r   rm   ÚkeyrŸ   r›   r¿   r©   ÚtpÚoutputrº   r¼   r¾   s                      r8   r   r   ™  së  € ñ~ ÝÜ%Ð&jÓkÐkÛá2=ˆd�i‰i×Ñ×,Ñ,Ô.À4€Gä�j¤%Ô(Ø �]ˆ
Øò vˆØÔ(Ò(ÜÐ5°c°UÐ:RÔSWÔXj×XoÑXoÓXqÓSrÐRsÐtÓuÐuðvð =GÖG°SÔ+¨CÓ0ÐGÐÐGä�&œ$Ô¤CÑ'OÈÔ'OÔ$OÜ'¨¬sÔ3�&‘È6Ö9RÀC¸3º%Ò9Rˆä�%œÔØ�ˆä�&œ#ÔØ�(�ˆäGZØØØØØØØôHÐð 7H÷'Ø)2ÐRuò'ØLNˆ%�	ˆ{˜!˜B˜4Ð  "Ñ$ð'Ø ð'€Fñ 'ð /×4Ñ4Ó6ò ?Ñˆ	�7Øò 	?ˆFØ#Ÿ\™\›^ò ?‘	��EØ˜˜y˜k¨¨2¨$Ð/Ñ0×7Ñ7¸Õ>ñ?ñ	?ð?ô
   Ó'Ð'ùò; Hùò :Sùó$'s   ÂFÃ
F#Ä(F()r*   N)F)NNN)r)   FNN)r   r   r%   r&   ))r>   Úcollectionsr   Úcollections.abcr   Útypingr   r   r   r   r	   r¥   r
   r   Útyping_extensionsr   Útorchmetrics.utilities.importsr   Ú__doctest_requires__r'   Údictri   rj   Ú__annotations__ÚALLOWED_ACCUMULATE_VALUESr9   rA   rL   ÚboolrY   r^   rk   rx   r�   r‘   r�   rÊ   r   rÂ   r�   r   © rB   r8   ú<module>rÛ      sU  ðô 
Ý Ý $ß 7Õ 7ã ß  Ý %å :à>ÀÀÐIÐ ð ØØØØØØØØØØñ2Ð �D˜˜e C¨ H™oÐ-Ñ.ó ð ,Ð óð(	!�sð 	!˜x¨™}ó 	!ðd #ð d°ð dÀ#ð dÈ$ÈsÐTZÈ{ÑJ[ó dð, Y^ñØ˜#‘ðØ/7¸©}ðØQUðà
ˆ3�˜ #™Ñ'Ð'Ñ(óð.Ø˜ ™Ñ&ðØ5=¸c±]ðØS[Ð\_ÑS`ðàˆc�]óð4> ¨(°3©-Ñ!8ð >ÈÐRUÉð >Ð[cÐdgÑ[hó >ð0 "Ø15Ø:>ñ	!FØ
ð!Fà�c‰]ð!Fð ˜ 3 %¨ *Ñ-Ñ.ð!Fð ˜ # ¨°©Ð!5Ñ6Ñ7ð	!Fð
 ˆc�]ó!FðHH˜ #™ð H°¸±ð HÀsð HÈtÐTWÐY_ÐT_ÑO`ó Hð47˜ #™ð 7°¸±ð 7À$ÀsÈFÀ{ÑBSó 7ð (8˜H X¨c¡]Ñ3ð (8¸XÀhÈsÁmÑ=Tð (8ÐY]Ð^aÐciÐ^iÑYjó (8ð` "Ø15Ø:>ñdØ�C‰=ðdà�X˜c‘]Ñ#ðdð ˜E # s (™OÑ,ðdð ð	dð
 �c‰]ðdð ˜ 3 %¨ *Ñ-Ñ.ðdð ˜ # ¨°©Ð!5Ñ6Ñ7ðdð 
ˆ%��S�‰/˜4  S¨& [Ñ 1Ñ2Ð
2Ñ3ódðN¨4°°T¸&±\Ð0AÑ+Bð ÀtÈCÐQWÈKÑGXó ð* *0ØØ15Ø:>Ø.Yñh(Ø��h˜s‘mÐ#Ñ$ðh(à�#�x ‘} h¨x¸©}Ñ&=Ð=Ñ>ðh(ð ˜Ñ&ðh(ð ð	h(ð
 ˜ 3 %¨ *Ñ-Ñ.ðh(ð ˜ # ¨°©Ð!5Ñ6Ñ7ðh(ð �c˜5  c ™?Ð*Ñ+ðh(ð 
ˆ#ˆvˆ+Ñôh(rB   