Ë
    ýÿæi}8  ã                   óX  — d dl mZmZ d dlmZ d dlmZmZmZ d dl	m
Z
mZmZmZmZ d dlZd dlZd dlmZ d dlmZmZmZ erŠd dlZd dlZd dlmZ eej:                  eej<                  j>                  ej@                  f   f   Z!ej<                  j>                  Z"eejF                  jH                  e%f   Z&ejN                  jP                  Z)n ee*e*f   Z!e*Z"e*Z&d dl+m,Z, e,d	e
d
e
defd„«       Z)erd dl-Z-ddgZ.ererdgndgZ.d)d„Z/ e)e.«      	 	 	 	 	 	 d*deeee   e0e%ef   ee0e%ef      f   dee"   dee1   dee2   dee2   dee%   dee%   de!fd„«       Z3de4dee4e4f   fd„Z5dee2e2e2e2f   de%fd„Z6dee"ej@                  f   de4deej@                  e"f   fd„Z7 e)e.«      e	 	 	 	 d+d edee"   d!e1d"ee8ee4e%f         d#ee&   de!fd$„«       «       Z9 e)e.«      	 	 	 	 	 	 d*d%eeeeef   eee   ee   ee   f   f   d&ee   dee"   d'eee%e%f      dee%   dee%   d"ee8ee4e%f         de!fd(„«       Z:y),é    )Ú	GeneratorÚSequence)Úproduct)ÚceilÚfloorÚsqrt)ÚAnyÚListÚOptionalÚUnionÚno_type_checkN)ÚTensor)Ú_LATEX_AVAILABLEÚ_MATPLOTLIB_AVAILABLEÚ_SCIENCEPLOT_AVAILABLE)ÚcontextmanagerÚargsÚkwargsÚreturnc               /   ó   K  — d–— y­w)z0No-ops decorator if matplotlib is not installed.N© )r   r   s     úp/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torchmetrics/utilities/plot.pyÚstyle_changer   *   s   è ø€ ô 	ùs   ‚Úsciencezno-latexÚdefaultc                  ó&   — t         st        d«      ‚y)z+Raise error if matplotlib is not installed.z`Plot function expects `matplotlib` to be installed. Please install with `pip install matplotlib`N)r   ÚModuleNotFoundErrorr   ó    r   Ú_error_on_missing_matplotlibr   8   s   € å Ü!Ønó
ð 	
ð !r   ÚvalÚaxÚhigher_is_betterÚlower_boundÚupper_boundÚlegend_nameÚnamec                 óˆ
  — t        «        |€t        j                  «       nd|f\  }}|j                  «       j	                  d«       t        | t        «      rš| j                  «       dk(  r3|j                  | j                  «       j                  «       gdd¬«       �nt        | «      D ]D  \  }}	|r|› d|› �n|› }
|j                  ||	j                  «       j                  «       ddd|
¬	«       ŒF �nÃt        | t        «      rût        | j                  «       «      D ]Ý  \  }\  }}	|	j                  «       dk7  r�|j                  |	j                  «       j                  «       ddd
|¬	«       |j                  «       j	                  d«       |j                  d«       |j                  t!        j"                  t%        |	«      «      «       Œ¬|j                  ||	j                  «       j                  «       dd|¬«       Œß �n¸t        | t&        «      �rœt%        | «      }t        | d   t        «      r�| d   D ��ci c]5  }|t!        j(                  t+        |«      D �cg c]
  }| |   |   ‘Œ c}«      “Œ7 } }}| j                  «       D ]7  \  }}	|j                  |	j                  «       j                  «       ddd
|¬	«       Œ9 n™t!        j(                  | d«      } | j,                  dk7  }|r| j.                  n| j1                  d«      } t        | «      D ]G  \  }}	|r|r|› d|› �n|› nd}
|j                  |	j                  «       j                  «       ddd
|
¬	«       ŒI |j                  «       j	                  d«       |j                  d«       |j                  t!        j"                  |«      «       nt3        d«      ‚|j5                  «       \  }}|r|r|j7                  ||ddddd¬«       |j9                  «       }|�|�	d||z
  z  }nd|d   |d   z
  z  }|j;                  |�||z
  n|d   |z
  |�||z   n|d   |z   ¬«       |j=                  d«       |j?                  |�|nd«       |jA                  «       }d|d   |d   z
  z  }g }|�|jC                  |«       |�|jC                  |«       |jE                  ||d   |d   dd¬«       |�p|�6|s4|jG                  |d   |z
  |d   «       |jI                  |d   |ddd¬«       |�6|r4|jG                  |d   |z
  |d   «       |jI                  |d   |ddd¬«       ||fS c c}w c c}}w )aÊ  Plot a single metric value or multiple, including bounds of value if existing.

    Args:
        val: A single tensor with one or multiple values (multiclass/label/output format) or a list of such tensors.
            If a list is provided the values are interpreted as a time series of evolving values.
        ax: Axis from a figure.
        higher_is_better: Indicates if a label indicating where the optimal value it should be added to the figure
        lower_bound: lower value that the metric can take
        upper_bound: upper value that the metric can take
        legend_name: for class based metrics specify the legend prefix e.g. Class or Label to use when multiple values
            are provided
        name: Name of the metric to use for the y-axis label

    Returns:
        A tuple consisting of the figure and respective ax objects of the generated figure

    Raises:
        ModuleNotFoundError:
            If `matplotlib` is not installed

    NFé   Úoé
   )ÚmarkerÚ
markersizeÚ ÚNone)r+   r,   Ú	linestyleÚlabelÚ-TÚStep)r+   r,   r0   r   Ú z&Got unknown format for argument `val`.zupper center)g      à?gffffffò?é   )ÚlocÚbbox_to_anchorÚncolÚfancyboxÚshadowgš™™™™™¹?)ÚbottomÚtopÚdashedÚk)Ú
linestylesÚcolorszOptimal 
 valueÚcenter)ÚsÚhorizontalalignmentÚverticalalignment)%r   ÚpltÚsubplotsÚ	get_xaxisÚset_visibleÚ
isinstancer   ÚnumelÚplotÚdetachÚcpuÚ	enumerateÚdictÚitemsÚ
set_xlabelÚ
set_xticksÚtorchÚarangeÚlenr   ÚstackÚrangeÚndimÚTÚ	unsqueezeÚ
ValueErrorÚget_legend_handles_labelsÚlegendÚget_ylimÚset_ylimÚgridÚ
set_ylabelÚget_xlimÚappendÚhlinesÚset_xlimÚtext)r    r!   r"   r#   r$   r%   r&   ÚfigÚiÚvr0   r=   Ún_stepsÚmulti_seriesÚhandlesÚlabelsÚylimÚfactorÚxlimÚy_liness                       r   Úplot_single_or_multi_valrq   @   sÆ  € ô> !Ô"Ø " 
Œc�l‰lŒn°°r°
�G€CˆØ‡L�LƒN×Ñ˜uÔ%ä�#”vÔØ�9‰9‹;˜!ÒØ�G‰G�S—Z‘Z“\×%Ñ%Ó'Ð(°ÀˆGÖDä! #ž‘��1Ù0;˜;˜- q¨¨Ñ,ÀAÀ3�Ø—‘˜˜1Ÿ8™8›:Ÿ>™>Ó+°CÀBÐRXÐ`e�Õfò 'ô 
�CœÔ	Ü" 3§9¡9£;Ö/‰IˆA‰v��1Ø�w‰w‹y˜AŠ~Ø—‘˜Ÿ™›
Ÿ™Ó(°ÀÈsÐZ[�Ô\Ø—‘“×*Ñ*¨4Ô0Ø—‘˜fÔ%Ø—‘œeŸl™l¬3¨q«6Ó2Õ3à—‘˜˜1Ÿ8™8›:Ÿ>™>Ó+°CÀBÈa�ÕPò 0ô 
�CœÕ	"Ü�c“(ˆÜ�c˜!‘fœdÔ#ØPSÐTUÒPVÔWÑPVÈ1�1”e—k‘k´e¸G´nÓ"E±n° 3 q¡6¨!£9°nÑ"EÓFÑFÐPVˆCÑWØŸ	™	ž‘��1Ø—‘˜Ÿ™›
Ÿ™Ó(°ÀÈsÐZ[�Õ\ñ $ô —+‘+˜c 1Ó%ˆCØŸ8™8 q™=ˆLÙ'�#—%’%¨S¯]©]¸1Ó-=ˆCÜ! #ž‘��1ÙMY±˜K˜=¨¨!¨Ñ-ÀQÁCÐ_a�Ø—‘˜Ÿ™›
Ÿ™Ó(°ÀÈsÐZ_�Õ`ð 'ð 	�‰‹×"Ñ" 4Ô(Ø
�‰�fÔØ
�‰”e—l‘l 7Ó+Õ,äÐAÓBÐBà×2Ñ2Ó4�O€GˆVÙ‘6Ø
�	‰	�'˜6 ~ÀkÐXYÐdhÐquˆ	Ôvà�;‰;‹=€DØÐ ;Ð#:Ø˜ kÑ1Ñ2‰à˜˜Q™ $ q¡'Ñ)Ñ*ˆà‡K�KØ'2Ð'>ˆ{˜VÒ#ÀDÈÁGÈfÑDTØ$/Ð$;ˆK˜&Ò ÀÀaÁÈ6ÑAQð ô ð
 ‡G�GˆD„MØ‡M�M˜$Ð*‘$°Ô5à�;‰;‹=€DØ�D˜‘G˜d 1™gÑ%Ñ&€Fà€GØÐØ�‰�{Ô#ØÐØ�‰�{Ô#Ø‡I�Iˆg�t˜A‘w  Q¡°HÀS€IÔIØÐ#ØÐ"Ñ+;Ø�K‰K˜˜Q™ &Ñ(¨$¨q©'Ô2Ø�G‰GØ�Q‘˜Ð(:ÐPXÐltð ô ð Ð"Ñ'7Ø�K‰K˜˜Q™ &Ñ(¨$¨q©'Ô2Ø�G‰GØ�Q‘˜Ð(:ÐPXÐltð ô ð �ˆ7€Nùòm #FùÓWs   È3"T>ÉT9É$	T>Ô9T>Únc                 óì   — t        | «      }t        |«      |k(  rt        |«      t        |«      fS t        |«      t        |«      z  | k\  rt        |«      t        |«      fS t        |«      t        |«      fS )z/Split `n` figures into `rows` x `cols` figures.)r   Úintr   r   )rr   Únsqs     r   Ú_get_col_row_splitrv   ¯   sd   € ä
ˆq‹'€CÜ
ˆ3ƒx�3‚Ü�3‹xœ˜S›Ð!Ð!ÜˆSƒz”D˜“IÑ Ò"Ü�S‹zœ4 ›9Ð$Ð$Ü�‹9”d˜3“iÐÐr   Úpatch_colorc                 ód   — | \  }}}}d„ |||fD «       \  }}}d|z  d|z  z   d|z  z   }|dkD  rdS dS )zÇGet the text color for a given value and colormap.

    Following Wikipedia's recommendations: https://en.wikipedia.org/wiki/Relative_luminance.

    Args:
        patch_color: RGBA color tuple

    c              3   óF   K  — | ]  }|d k  r|dz  n
|dz   dz  dz  –— Œ y­w)g?ÆÜµ¤?g×£p=
×)@g)\�Âõ(¬?gáz®Gáð?g333333@Nr   )Ú.0Úcs     r   Ú	<genexpr>z"_get_text_color.<locals>.<genexpr>Ä   s0   è ø€ Ð^ÑT]Èq˜A šLˆq�5Šy°°E±	¸UÑ/BÀsÑ.JÓJÑT]ùs   ‚!g¼–�z6Ë?g¥,Cëâæ?g]mÅþ²{²?gš™™™™™Ù?z.1Úwhiter   )rw   ÚrÚgÚbÚaÚys         r   Ú_get_text_colorrƒ   ¹   sY   € ð �J€A€qˆ!ˆQÙ^ÐUVÐXYÐ[\ÑT]Ó^�G€A€qˆ!ð 	�‰
�V˜a‘ZÑ &¨1¡*Ñ,€Aà�s’7ˆ4Ð' Ð'r   ÚaxsÚnbc                 ó|   — t        | t        «      r| S | j                  } | |d D ]  }|j                  «        Œ | d| S )zSReduce `axs` to `nb` Axes.

    All further Axes are removed from the figure.

    N)rH   Ú_AX_TYPEÚflatÚremove)r„   r…   r!   s      r   Útrim_axsrŠ   Ì   s@   € ô �#”xÔ Øˆ
à
�(‰(€CØ�"�#‹hˆØ
�	‰	�ð àˆs�ˆ8€Or   ÚconfmatÚadd_textrl   Úcmapc                 óx  — t        «        | j                  dk(  r | j                  d   d}}t        |«      \  }}nd| j                  d   ddf\  }}}}|�7| j                  dk7  r(t	        |«      |k7  rt        dt	        |«      › d|› �«      ‚| j                  dk(  r<|xs t        j                  |«      }	t        t        t        t        |«      «      «      }n)d}	|xs# t        j                  |«      j                  «       }|€t        j                  ||d¬	«      n|j                  «       |f\  }
}t!        ||«      }t        |«      D �]ï  }|dk7  s|dk7  r||   n|}|	�|j#                  d
|	|   › �d¬«       |j%                  | j                  dk(  r!| |   j'                  «       j)                  «       n| j'                  «       j)                  «       |¬«      }||z  |dz
  k(  r|j+                  dd¬«       ||z  dk(  r|j-                  dd¬«       |j/                  t        t        |«      «      «       |j1                  t        t        |«      «      «       |j3                  |dd¬«       |j5                  |dd¬«       |s�Œ:t7        t        |«      t        |«      «      D ]•  \  }}| j                  dk(  r| |||f   n| ||f   }|j9                  |j;                  |j=                  «       «      «      }t?        |«      }|jA                  ||t        tC        |j=                  «       d«      «      ddd|¬«       Œ— �Œò |
|fS )aÏ  Plot an confusion matrix.

    Inspired by: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/metrics/_plot/confusion_matrix.py.
    Works for both binary, multiclass and multilabel confusion matrices.

    Args:
        confmat: the confusion matrix. Either should be an [N,N] matrix in the binary and multiclass cases or an
            [N, 2, 2] matrix for multilabel classification
        ax: Axis from a figure. If not provided, a new figure and axis will be created
        add_text: if text should be added to each cell with the given value
        labels: labels to add the x- and y-axis
        cmap: matplotlib colormap to use for the confusion matrix
            https://matplotlib.org/stable/users/explain/colors/colormaps.html

    Returns:
        A tuple consisting of the figure and respective ax objects (or array of ax objects) of the generated figure

    Raises:
        ModuleNotFoundError:
            If `matplotlib` is not installed

    r4   r   é   r(   NzYExpected number of elements in arg `labels` to match number of labels in confmat but got ú and T)ÚnrowsÚncolsÚconstrained_layoutzLabel é   )Úfontsize)r�   zPredicted classz
True classé-   r*   )Úrotationr•   é   r@   )ÚhaÚvar•   Úcolor)"r   rW   Úshaperv   rT   rZ   ÚnprS   ÚlistÚmapÚstrrV   ÚtolistrD   rE   Ú
get_figurerŠ   Ú	set_titleÚimshowrL   rK   rP   r`   rQ   Ú
set_yticksÚset_xticklabelsÚset_yticklabelsr   r�   ÚnormÚitemrƒ   re   Úround)r‹   r!   rŒ   rl   r�   r…   Ú	n_classesÚrowsÚcolsÚ	fig_labelrf   r„   rg   ÚimÚiiÚjjr    rw   r{   s                      r   Úplot_confusion_matrixr²   Û   së  € ô> !Ô"à‡|�|�qÒØŸ™ aÑ(¨!ˆIˆÜ'¨Ó+‰
ˆ‰dà$% w§}¡}°QÑ'7¸¸AÐ$=Ñ!ˆˆI�t˜TàÐ˜gŸl™l¨aÒ/´C¸³KÀ9Ò4LÜðÜ�v“;�-˜u Y Kð1ó
ð 	
ð ‡|�|�qÒØÒ+œbŸi™i¨›mˆ	Ü”cœ#œu YÓ/Ó0Ó1‰àˆ	ØÒ8œ2Ÿ9™9 YÓ/×6Ñ6Ó8ˆàPRÐPZŒs�|‰| $¨dÀtÕLÐac×anÑanÓapÐrtÐ`u�H€CˆÜ
�3˜Ó
€CÜ�2�YˆØ š	 T¨Q¢YˆS�ŠV°SˆØÐ Ø�L‰L˜6 )¨A¡, Ð0¸2ˆLÔ>Ø�Y‰Y°G·L±LÀAÒ4E�w˜q‘z—~‘~Ó'×.Ñ.Ô0È7Ï;É;Ë=×K_ÑK_ÓKaÐhlˆYÓmˆØ�‰9˜˜q™Ò Ø�M‰MÐ+°bˆMÔ9Øˆt‰8�qŠ=Ø�M‰M˜,°ˆMÔ4Ø
�‰”dœ5 Ó+Ó,Ô-Ø
�‰”dœ5 Ó+Ó,Ô-Ø
×Ñ˜6¨B¸ÐÔ<Ø
×Ñ˜6¨B¸ÐÔ<ãÜ!¤%¨	Ó"2´E¸)Ó4DÖE‘��BØ,3¯L©L¸AÒ,=�g˜a  R˜iÒ(À7È2ÈrÈ6Á?�Ø Ÿg™g b§g¡g¨c¯h©h«jÓ&9Ó:�Ü# KÓ0�Ø—‘˜˜B¤¤E¨#¯(©(«*°aÓ$8Ó 9¸hÈ8Ð^`Ðhi�Õjò	 Fð ð* �ˆ8€Or   ÚcurveÚscoreÚlabel_namesc                 ó²  — t        | «      dk  rt        dt        | «      › �«      ‚| dd \  }}t        «        |€t        j                  «       nd|f\  }	}t        |t        «      r©t        |t        «      r™|j                  dk(  rŠ|j                  dk(  r{|�d|j                  «       d›�nd}
|j                  |j                  «       j                  «       |j                  «       j                  «       dd|
¬«       |
���|j                  «        �n{t        |t        «      rt        |t        «      sAt        |t        «      �r&t        |t        «      �r|j                  dk(  �r|j                  dk(  röt        |«      }|�(t        |«      |k7  rt        d	t        |«      › d
|› �«      ‚t        t        ||«      «      D ]¨  \  }\  }}|�|› d|› �n|€t!        |«      nt!        ||   «      }
|
|�d||   j                  «       d›�ndz  }
|j                  |j                  «       j                  «       |j                  «       j                  «       dd|
¬«       |j                  «        Œª n$t        dt#        |«      › d
t#        |«      › d�«      ‚|�(|j%                  |d   «       |j'                  |d   «       |j)                  d«       |j+                  |«       |	|fS )aÏ  Inspired by: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/metrics/_plot/roc_curve.py.

    Plots a curve object

    Args:
        curve: a tuple of (x, y, t) where x and y are the coordinates of the curve and t are the thresholds used
            to compute the curve
        score: optional area under the curve added as label to the plot
        ax: Axis from a figure
        label_names: Tuple containing the names of the x and y axis
        legend_name: Name of the curve to be used in the legend
        name: Custom name to describe the metric
        labels: Optional labels for the different curves that will be added to the plot

    Returns:
        A tuple consisting of the figure and respective ax objects (or array of ax objects) of the generated figure

    Raises:
        ModuleNotFoundError:
            If `matplotlib` is not installed
        ValueError:
            If `curve` does not have 3 elements, being in the wrong format
    r�   z*Expected 2 or 3 elements in curve but got Nr(   zAUC=z0.3fr1   )r/   Ú	linewidthr0   z\Expected number of elements in arg `labels` to match number of labels in roc curves but got r�   Ú_z AUC=r3   zQUnknown format for argument `x` and `y`. Expected either list or tensors but got Ú.r   T)rT   rZ   r   rD   rE   rH   r   rW   r©   rJ   rK   rL   r\   rž   rM   Úzipr    ÚtyperP   r`   r_   r£   )r³   r´   r!   rµ   r%   r&   rl   Úxr‚   rf   r0   r«   rg   Úx_Úy_s                  r   Ú
plot_curver¿   (  s~  € ôB ˆ5ƒz�A‚~ÜÐEÄcÈ%ÃjÀ\ÐRÓSÐSØ��!ˆ9�D€A€qä Ô"Ø " 
Œc�l‰lŒn°°r°
�G€Cˆä�!”VÔ¤¨A¬vÔ!6¸1¿6¹6ÀQº;È1Ï6É6ÐUVÊ;Ø.3Ð.?�$�u—z‘z“| DÐ)Ñ*ÀTˆØ
�‰�—‘“
—‘Ó  !§(¡(£*§.¡.Ó"2¸cÈQÐV[ˆÔ\ØÑØ�I‰IŽKÜ
�QœÔ
¤*¨Q´Ô"5Ü�1”fÕ¤*¨Q´Õ"7¸A¿F¹FÀa»KÈAÏFÉFÐVWÊKä˜“Fˆ	ØÐ¤# f£+°Ò":ÜðÜ˜6“{�m 5¨¨ð5óð ô
 %¤S¨¨A£YÖ/‰KˆA‰x��BØ,7Ð,C�{�m 1 Q CÑ(ÐSYÐSaÌÈQÌÔgjÐkqÐrsÑktÓguˆEØ°uÐ7H�u˜U 1™XŸ]™]›_¨TÐ2Ñ3ÈbÑPˆEØ�G‰G�B—I‘I“K—O‘OÓ% r§y¡y£{§¡Ó'8ÀCÐSTÐ\aˆGÔbØ�I‰I�Kñ	 0ô Ø_Ô`dÐefÓ`gÐ_hÐhmÔnrÐstÓnuÐmvÐvwÐxó
ð 	
ð ÐØ
�‰�k !‘nÔ%Ø
�‰�k !‘nÔ%Ø‡G�GˆD„MØ‡L�L�Ôà�ˆ7€Nr   )r   N)NNNNNN)NTNN);Úcollections.abcr   r   Ú	itertoolsr   Úmathr   r   r   Útypingr	   r
   r   r   r   Únumpyr�   rR   r   Útorchmetrics.utilities.importsr   r   r   Ú
matplotlibÚmatplotlib.axesÚmatplotlib.pyplotÚpyplotrD   ÚtupleÚFigureÚaxesÚAxesÚndarrayÚ_PLOT_OUT_TYPEr‡   r?   ÚColormapr    Ú
_CMAP_TYPEÚstyleÚcontextr   ÚobjectÚ
contextlibr   ÚscienceplotsÚ_styler   rN   ÚboolÚfloatrq   rt   rv   rƒ   rŠ   rž   r²   r¿   r   r   r   Ú<module>rÚ      s«  ð÷ 0Ý ß "Ñ "ß <Õ <ã Û Ý ç jÑ jáÛÛÝ#à˜3Ÿ:™: u¨Z¯_©_×-AÑ-AÀ2Ç:Á:Ð-MÑ'NÐNÑO€NØ�‰×#Ñ#€HØ�z×(Ñ(×1Ñ1°3Ð6Ñ7€Jà—9‘9×$Ñ$�Là˜6 6˜>Ñ*€NØ€HØ€Jå)àð˜Cð ¨3ð °9ò ó ðñ
 Ûà˜Ð$€Fá.Ñ3Cˆ)‰È)È€ó
ñ ˆfÓð "Ø'+Ø#'Ø#'Ø!%ØñkØ	ˆv�x Ñ'¨¨c°6¨kÑ):¸HÀTÈ#ÈvÈ+ÑEVÑ<WÐWÑ	Xðkà�Ñðkð ˜t‘nðkð ˜%‘ð	kð
 ˜%‘ðkð ˜#‘ðkð �3‰-ðkð òkó ðkð\ ˜#ð   %¨¨S¨¡/ó  ð(  u¨e°U¸EÐ'AÑ!Bð (Àsó (ð&�%˜ "§*¡*Ð,Ñ-ð °3ð ¸5ÀÇÁÈXÐAUÑ;Vó ñ ˆfÓØð "ØØ.2Ø!%ñHØðHà�ÑðHð ðHð �T˜%  S ™/Ñ*Ñ+ð	Hð
 �:Ñ
ðHð òHó ó ðHñV ˆfÓð #Ø!Ø-1Ø!%ØØ.2ñEØ��v˜v vÐ-Ñ.°°d¸6±lÀDÈÁLÐRVÐW]ÑR^Ð6^Ñ0_Ð_Ñ`ðEà�FÑðEð 	�ÑðEð ˜%  S ™/Ñ*ð	Eð
 ˜#‘ðEð �3‰-ðEð �T˜%  S ™/Ñ*Ñ+ðEð òEó ñEr   