Ë
    ]›¾jÏ  ã                   óR   — d dl mZmZ  edg d¢«      Zd„ Zdd„Zd„ Zd„ Zd	„ Zdd
„Z	y)é    )ÚdefaultdictÚ
namedtupleÚF1Result)Ú	precisionÚrecallÚf1c                 ó²  — t        d„ «      }g }g }|D ]¾  }|j                  d«      dk\  r|j                  dd«      d   }n|}||vr|j                  |«       |D ]v  }|j                  d«      dk\  r|j                  dd«      d   }	n|}	|	|vr|j                  |	«       | j	                  |i «      j	                  |d«      }
||   |	   |
z   ||   |	<   Œx ŒÀ |||fS )Nc                  ó    — t        t        «      S ©N©r   Úint© ó    ú`/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/stanza/utils/confusion.pyú<lambda>z%condense_ner_labels.<locals>.<lambda>   s   € ¬´CÓ(8€ r   ú-r   é   )r   ÚfindÚsplitÚappendÚget)Ú	confusionÚgold_labelsÚpred_labelsÚnew_confusionÚnew_gold_labelsÚnew_pred_labelsÚl1Únew_l1Úl2Únew_l2Ú	old_values              r   Úcondense_ner_labelsr#      s  € ÜÑ 8Ó9€MØ€OØ€OØò VˆØ�7‰7�3‹<˜1ÒØ—X‘X˜c 1Ó% aÑ(‰FàˆFØ˜Ñ(Ø×"Ñ" 6Ô*Øò 		VˆBØ�w‰w�s‹|˜qÒ ØŸ™ # qÓ)¨!Ñ,‘à�Ø˜_Ñ,Ø×&Ñ& vÔ.à!Ÿ™ b¨"Ó-×1Ñ1°"°aÓ8ˆIØ,9¸&Ñ,AÀ&Ñ,IÈIÑ,UˆM˜&Ñ! &Ò)ñ		VðVð" ˜/¨?Ð:Ð:r   Nc           
      ó  ‡ ‡‡— d„ }|rIt        d„ «      }‰ j                  «       D ](  }‰ |   j                  «       D ]  }‰ |   |   ||   |<   Œ Œ* |Š |€Át        ‰ j                  «       «      }	|rt        ˆ fd„|	D «       «      }	t        «       }
‰ j                  «       D ]O  Š|r't        ˆ ˆfd„‰ ‰   j                  «       D «       «      }n‰ ‰   j                  «       }|
j                  |«      }
ŒQ |s|	j                  |
«      }	|	}
 ||	«      }	 ||
«      }
n|}	|}
t	        |
D �cg c]  }t        t        |«      «      ‘Œ c}dgz   «      Šd‰z  }d}t        |	«      D ]P  \  }}t        |
«      D ]9  \  }}t        ‰ j                  |i «      j                  |d«      t        «      rŒ7d	} n |rŒP n |rˆfd
„}nˆfd„}t        |	«      D ]U  \  }}t        |
«      D ]B  \  }}‰ j                  |i «      j                  |d«      }t	        ‰t         ||«      «      «      ŠŒD ŒW ‰t        |
«      z  dkD  rt        ‰ |	|
«      \  Š }	}
|rd}nd}‰dz
  dz  dz  |z   ‰dz
  dz  dz  z   }t        |«      t        |«      k  rdt        |«      t        |«      z
  z  |z   }d|z   dz   }|
D ]"  }|dj                  ‰«      t        |«      z  z   }Œ$ |j                  «       g}t        |	«      D ]Ž  \  }}dj                  ‰«      t        |«      z  }t        |
«      D ]?  \  }}‰ j                  |i «      j                  |d«      } ||«      }|r|r|n|}||z   dz   }ŒA |j                  |j                  «       «       Œ� dj                  |«      S c c}w )zª
    pretty print for confusion matrixes
    adapted from https://gist.github.com/zachguo/10296432

    The matrix should look like this:
      confusion[gold][pred]
    c                 ó¸   — t        | «      } d| v rd}| j                  d«       nd}t        d„ | D «       «      st        | «      } nt        | d„ ¬«      } |rdg| z   } | S )zn
        Sorts the labels in the list, respecting BIES if all labels are BIES, putting O at the front
        ÚOTFc              3   ó€   K  — | ]6  }t        |t        «      xr  t        |«      d kD  xr |d   dv xr |d   dv –— Œ8 y­w)é   r   )ÚBÚIÚEÚSr   )r   Ú_N)Ú
isinstanceÚstrÚlen)Ú.0Úxs     r   ú	<genexpr>z8format_confusion.<locals>.sort_labels.<locals>.<genexpr>1   sI   è ø€ Ò}Ðqr”:˜a¤Ó%Òl¬#¨a«&°1©*Òl¸¸1¹ÐAUÐ9UÒlÐZ[Ð\]ÑZ^ÐblÐZlÓlÑ}ùs   ‚<>c                 ó   — | dd  | d   fS )Nr(   r   r   )r2   s    r   r   z7format_confusion.<locals>.sort_labels.<locals>.<lambda>5   s   € °1°Q°R°5¸!¸A¹$°-€ r   )Úkey)ÚsetÚremoveÚallÚsorted)ÚlabelsÚhad_Os     r   Úsort_labelsz%format_confusion.<locals>.sort_labels&   sd   € ô �V“ˆØ�&‰=ØˆEØ�M‰M˜#ÕàˆEäÑ}Ðv|Ô}Ô}Ü˜F“^‰Fô ˜FÑ(?Ô@ˆFÙØ�U˜V‘^ˆFØˆr   c                  ó    — t        t        «      S r   r   r   r   r   r   z"format_confusion.<locals>.<lambda>;   s   € ¬K¼Ó,<€ r   c              3   ór   •‡K  — | ]-  Št        ˆˆfd „‰‰   j                  «       D «       «      sŒ*‰–— Œ/ y­w)c              3   ó4   •K  — | ]  }‰‰   |   d k7  –— Œ y­w©r   Nr   )r1   r5   r   r2   s     €€r   r3   z-format_confusion.<locals>.<genexpr>.<genexpr>D   s!   øè ø€ Ò;rÐWZ¸IÀa¹LÈÑ<MÐQRÕ<RÑ;rùs   ƒN)ÚanyÚkeys)r1   r2   r   s    @€r   r3   z#format_confusion.<locals>.<genexpr>D   s.   ùè ø€ Òs A¼Ô;rÐ^gÐhiÑ^j×^oÑ^oÓ^qÔ;rÕ8rœaÑsùs   „+7°7c              3   ó:   •K  — | ]  }‰‰   |   d k7  sŒ|–— Œ y­wr@   r   )r1   r2   r   r5   s     €€r   r3   z#format_confusion.<locals>.<genexpr>I   s$   øè ø€ Ò%a¨AÈ)ÐTWÉ.ÐYZÑJ[Ð_`ÓJ`¤aÑ%aùs   ƒ”é   ú Tr   Fc                 ó,   •— dj                  ‰«      | z  S )Nz%{0}d©Úformat©Úconfusion_cellÚcolumnwidths    €r   r   z"format_confusion.<locals>.<lambda>f   s   ø€ ¨W¯^©^¸KÓ-HÈ>Ñ-Y€ r   c                 ó,   •— dj                  ‰«      | z  S )Nz%{0}.1frG   rI   s    €r   r   z"format_confusion.<locals>.<lambda>h   s   ø€ ¨Y×-=Ñ-=¸kÓ-JÈ^Ñ-[€ r   é–   zp\tzt\pé   r(   z    z%{0}s z
    %{0}s ú
)r   rB   r6   ÚunionÚmaxr0   r/   Ú	enumerater.   r   r   r#   rH   Úrstripr   Újoin)r   r:   Úhide_zeroesÚ
hide_blankÚ	transposer<   r   Úlabel1Úlabel2r   r   r   r2   Ú
empty_cellÚall_intsÚiÚjÚformat_cellÚcellÚcorner_labelÚfst_empty_cellÚheaderÚlabelÚtextÚrowrJ   rK   r5   s   `                         @@r   Úformat_confusionrf      sÒ  ú€ òñ( Ü#Ñ$<Ó=ˆØ—n‘nÓ&ò 	JˆFØ# FÑ+×0Ñ0Ó2ò J�Ø09¸&Ñ0AÀ&Ñ0I�˜fÑ% fÒ-ñJð	Jð "ˆ	à€~Ü˜)Ÿ.™.Ó*Ó+ˆÙÜÓs¨ÔsÓsˆKä“eˆØ—>‘>Ó#ò 	=ˆCÙÜ"%Ô%a°¸3±×1DÑ1DÓ1FÔ%aÓ"a‘à"+¨C¡.×"5Ñ"5Ó"7�Ø%×+Ñ+¨OÓ<‰Kð	=ñ Ø%×+Ñ+¨KÓ8ˆKØ%ˆKá! +Ó.ˆÙ! +Ó.‰àˆØˆä¨KÖ8 q”sœ3˜q›6•{Ò8¸A¸3Ñ>Ó?€KØ�{Ñ"€Jð €HÜ˜{Ó+ò ‰	ˆˆ6Ü" ;Ó/ò 	‰IˆAˆvÜ˜iŸm™m¨F°BÓ7×;Ñ;¸FÀAÓFÌÕLØ �Ùð	ò Ùðñ ÛY‰ã[ˆô ˜{Ó+ò C‰	ˆˆ6Ü" ;Ó/ò 	C‰IˆAˆvØ—=‘= ¨Ó,×0Ñ0°¸Ó;ˆDÜ˜k¬3©{¸4Ó/@Ó+AÓB‰Kñ	CðCð ”S˜Ó%Ñ%¨Ò+Ü.AÀ)È[ÐZeÓ.fÑ+ˆ	�; ñ Ø‰àˆØ! !‘m aÑ'¨#Ñ-°Ñ<ÀÈAÁÐPQÑ?QÐTWÑ?WÑW€NÜ
ˆ>ÓœS ›_Ò,Ø¤ J£´#°nÓ2EÑ EÑFÈÑWˆØ�nÑ$ sÑ*€FØò DˆØ˜(Ÿ/™/¨+Ó6¼¸U»ÑCÑC‰ðDà�M‰M‹OÐ€Dô ˜{Ó+ò "‰	ˆˆ6Ø×!Ñ! +Ó.´°V³Ñ<ˆÜ" ;Ó/ò 	#‰IˆAˆvØ&Ÿ]™]¨6°2Ó6×:Ñ:¸6À1ÓEˆNÙ˜~Ó.ˆDÙÙ-‘t°:�Ø˜‘*˜sÑ"‰Cð	#ð 	�‰�C—J‘J“LÕ!ð"ð �9‰9�T‹?Ðùòi 9s   Ä"Nc                 óª   — d}d}| j                  «       D ]6  }| |   j                  «       D ]  }||k(  r|| |   |   z   }Œ|| |   |   z   }Œ  Œ8 |||z   fS )z=
    Given a confusion dictionary, return correct, total
    r   )rB   )Úconfusion_matrixÚcorrectÚtotalr   r    s        r   Úconfusion_to_accuracyrk   �   s…   € ð €GØ€EØ×#Ñ#Ó%ò 9ˆØ" 2Ñ&×+Ñ+Ó-ò 	9ˆBØ�RŠxØ!Ð$4°RÑ$8¸Ñ$<Ñ<‘àÐ 0°Ñ 4°RÑ 8Ñ8‘ñ		9ð9ð �W˜u‘_Ð%Ð%r   c                 ó‚  — i }t        «       }| j                  «       D ]H  }|j                  |«       | j                  |«      j                  «       D ]  }|j                  |«       Œ ŒJ d}|D ]Ð  }d}d}d}|D ]t  }||k(  r#| j                  |i «      j                  |d«      }Œ+|| j                  |i «      j                  |d«      z   }|| j                  |i «      j                  |d«      z   }Œv ||z   dk(  rd}	n|||z   z  }	||z   dk(  rd}
n|||z   z  }
|	|
z   dk(  rd}nd|	|
z  z  |	|
z   z  }t	        |	|
|«      ||<   ŒÒ |S )Nr   ç        r(   )r6   rB   Úaddr   r   )rh   ÚresultsrB   ÚkÚk2Úsum_f1ÚtpÚfnÚfpr   r   r   s               r   Úconfusion_to_f1rv   �   s…  € Ø€Gä‹5€DØ×"Ñ"Ó$ò ˆØ�‰�ŒØ"×&Ñ& qÓ)×.Ñ.Ó0ò 	ˆBØ�H‰H�R�Lñ	ðð
 €FØò 5ˆØˆØˆØˆØò 	AˆBØ�BŠwØ%×)Ñ)¨!¨RÓ0×4Ñ4°Q¸Ó:‘àÐ*×.Ñ.¨q°"Ó5×9Ñ9¸"¸aÓ@Ñ@�ØÐ*×.Ñ.¨r°2Ó6×:Ñ:¸1¸aÓ@Ñ@‘ð	Að �‰7�aŠ<Ø‰Ià˜b 2™g™ˆIØ�‰7�aŠ<Ø‰Fà˜2 ™7‘^ˆFØ�vÑ Ò$Ø‰Bà�i &Ñ(Ñ)¨Y¸Ñ-?Ñ@ˆBä˜i¨°Ó4ˆ�Š
ð/5ð2 €Nr   c                 ó†   — d}t        | «      }|j                  «       D ]  }|||   j                  z   }Œ |t        |«      z  S )z5
    Return the macro f1 for a confusion matrix.
    rm   )rv   rB   r   r0   )rh   rr   ro   rp   s       r   Úconfusion_to_macro_f1rx   Â   sL   € ð €FÜÐ.Ó/€GØ�\‰\‹^ò (ˆØ˜' !™*Ÿ-™-Ñ'‰ð(ð ”C˜“LÑ Ð r   c                 óè   — t        | «      }d}d}|j                  «       D ]L  }|�||v rŒ
t        | j                  |i «      j	                  «       «      }||z  }|||   j
                  |z  z  }ŒN ||z  S )Nrm   r   )rv   rB   Úsumr   Úvaluesr   )rh   Úexcludero   rr   Útotal_itemsrp   Úk_itemss          r   Úconfusion_to_weighted_f1r   Í   sŠ   € ÜÐ.Ó/€Gà€FØ€KØ�\‰\‹^ò *ˆØÐ 1¨¡<ØÜÐ&×*Ñ*¨1¨bÓ1×8Ñ8Ó:Ó;ˆØ�wÑˆØ�'˜!‘*—-‘- 'Ñ)Ñ)‰ð*ð �KÑÐr   )NFFFr   )
Úcollectionsr   r   r   r#   rf   rk   rv   rx   r   r   r   r   ú<module>r�      s6   ðç /á�jÒ"?Ó@€ò;ó0nòb&ò#òJ	!ô r   