ó
    üÞ j¯7  ã                   óÆ  • S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKrSSKJr  SSKJr  SSKJr  \R*                  " \5      rS	 rS
 r\R4                  R7                  S5      (       a  S rOS r\R<                  " SS9S 5       r\R<                  S 5       r  " S S5      r!S r"S\#S\$S\#4S jr%S\#S\$S\#4S jr&S\'S\'S\(\#   S\'4S jr)S\S\#4S  jr*g)!zLangSmith Pytest hooks.é    N)Údefaultdict)ÚLock)ÚAny)Úutils)Ú_get_test_suite_name)Útestc                 ó˜   •  U R                  SS5      nUR                  SSSSS9  g	! [         a    [        R	                  S5         g	f = f)
zYSet a boolean flag for LangSmith output.

Skip if --langsmith-output is already defined.
Ú	langsmithÚ	LangSmithú--langsmith-outputÚ
store_trueFz'Use LangSmith output (requires 'rich').)ÚactionÚdefaultÚhelpzCLangSmith output flag cannot be added because it's already defined.N)ÚgetgroupÚ	addoptionÚ
ValueErrorÚloggerÚwarning)ÚparserÚgroups     ÚQ/var/www/html/gaurav/venv/lib/python3.13/site-packages/langsmith/pytest_plugin.pyÚpytest_addoptionr      sT   € ð

à—‘ ¨[Ó9ˆØ�‰Ø ØØØ:ð	 	ò 	
øô ó 
ä�‰ØQö	
ð
ús   ‚$' §A	ÁA	c                 óî   ^ • [        U 4S jS 5       5      (       aZ  [        U 4S jS 5       5      (       d  T R                  SS5        [        U 4S jS 5       5      (       d  T R                  SS	5        g
g
g
)zHandle output arguments.c              3   ó*   >#   • U H	  oT;   v •  M     g 7f©N© )Ú.0ÚoptÚargss     €r   Ú	<genexpr>Ú&_handle_output_args.<locals>.<genexpr>,   s   øé € Ð
9Ñ"8˜3�$Ž;Ò"8ùó   ƒ)r   c              3   ó*   >#   • U H	  oT;   v •  M     g 7fr   r   ©r   Úar    s     €r   r!   r"   .   s   øé € Ð.¡g ˜–9¢gùr#   )ú-qqr   r'   c              3   ó*   >#   • U H	  oT;   v •  M     g 7fr   r   r%   s     €r   r!   r"   1   s   øé € Ð=Ñ&< ˜–9Ò&<ùr#   )ú-sz--capture=nor)   N)ÚanyÚinsert©r    s   `r   Ú_handle_output_argsr-   *   s^   ø€ ä
Ô
9Ñ"8Ó
9×9Ñ9äÔ.¡gÓ.×.Ñ.Ø�K‰K˜˜5Ô!äÔ=Ñ&<Ó=×=Ñ=Ø�K‰K˜˜4Õ ð >ð :ó    z7.c                 ó   • [        U5        g)zCCall immediately after command line options are parsed (pytest v7).N©r-   )Úconfigr    s     r   Úpytest_cmdline_preparser2   7   ó
   € ä˜DÕ!r.   c                 ó   • [        U 5        g)zHandle args in pytest v8+.Nr0   r,   s    r   Úpytest_load_initial_conftestsr5   =   r3   r.   T)Úhookwrapperc              #   ó²  #   • U R                  S5      nU(       Ga  U(       a  UR                  O0 n[        U SS5      nSU;  a   Ub   UR                  S5      nUb  0 UESU0EnU R                  n[        S	0 UD6" U5      U l        Ub  SU R                  ;  a  X0R                  S'   UbŽ  SU R                  R                  ;  at  [        U R                  5      " U R                  R                  S-   U R                  R                  U R                  R                  U R                  R                  S9U l	        Sv •  g! [        R
                   a     Nïf = f7f)
zEApply LangSmith tracking to tests marked with @pytest.mark.langsmith.r
   Ú_requestNÚexperiment_metadataÚlangsmith_experiment_metadataÚrequest)r;   )ÚargnamesÚinitialnamesÚnames_closureÚname2fixturedefsr   )Úget_closest_markerÚkwargsÚgetattrÚgetfixturevalueÚpytestÚFixtureLookupErrorÚobjÚls_testÚfuncargsÚ_fixtureinfor<   Útyper=   r>   r?   )ÚitemÚmarkerrA   Úrequest_objr9   Úoriginal_funcs         r   Úpytest_runtest_callrO   B   sF  é € ð ×$Ñ$ [Ó1€Fßö #)�—’¨bˆô ˜d J°Ó5ˆØ ¨Ó.°;Ñ3JðØ&1×&AÑ&AØ3ó'Ð#ð 'Ñ2ØS ÐSÐ(=Ð?RÑS�Fð Ÿ™ˆÜÑ$˜VÒ$ ]Ó3ˆŒØÑ" y¸¿¹Ó'EØ'2�M‰M˜)Ñ$ØÑ" y¸×8IÑ8I×8RÑ8RÓ'Rä $ T×%6Ñ%6Ô 7Ø×*Ñ*×3Ñ3°lÑBØ!×.Ñ.×;Ñ;Ø"×/Ñ/×=Ñ=Ø!%×!2Ñ!2×!CÑ!Cñ	!ˆDÔô 
øô ×,Ñ,ó Ùðüs+   ‚AEÁD= Á$CEÄ=EÅEÅEÅEc                 ó2   • UR                  S5      (       a  gg)z7Remove the short test-status character outputs ("./F").r   )Ú rQ   rQ   N)Ú	getoption)Úreportr1   s     r   Úpytest_report_teststatusrT   f   s   € ð
 ×ÑÐ,×-Ñ-Øð .r.   c                   ó\   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
\4S jrS rS rSrg)ÚLangSmithPluginéo   z'Plugin for rendering LangSmith results.c                 ó|  • SSK Jn  SSKJn  [	        [
        5      U l        0 U l        [        5       U l	        0 U l
        [        5       U l        U" 5       U l        U" U R                  5       U R                  SS9U l        U R                  R!                  5         U R                  R                  R#                  S5        g)zInitialize.r   )ÚConsole)ÚLiveé
   )ÚconsoleÚrefresh_per_secondzCollecting tests...N)Úrich.consolerY   Ú	rich.liverZ   r   ÚlistÚtest_suitesÚtest_suite_urlsÚsetÚlangsmith_nodeidsÚprocess_statusr   Ústatus_lockr\   Úgenerate_tablesÚliveÚstartÚprint)ÚselfrY   rZ   s      r   Ú__init__ÚLangSmithPlugin.__init__r   s‹   € å(Ý"ä&¤tÓ,ˆÔØ!ˆÔÜ!$£ˆÔà ˆÔÜ›6ˆÔÙ“yˆŒáØ× Ñ Ó"¨D¯L©LÈRñ
ˆŒ	ð 	�	‰	�‰ÔØ�	‰	×Ñ×ÑÐ 5Õ6r.   c                 óÒ  • [        5       U l        [        5       U l        UR                   H¹  nU R                  R	                  UR
                  5        UR                  S5      nU(       d  MB  U R                  R	                  UR
                  5        UR                  R                  S5      =(       d    [        UR                  5      nU R                  XBR
                  5        M»     g)z)Group collected LangSmith tests by suite.r
   Útest_suite_nameN)rc   Úcollected_nodeidsrd   ÚitemsÚaddÚnodeidr@   rA   Úgetr   rF   Úadd_process_to_test_suite)rk   ÚsessionrK   rL   Ú
test_suites        r   Úpytest_collection_finishÚ(LangSmithPlugin.pytest_collection_finish…   s¦   € ä!$£ˆÔÜ!$£ˆÔØ—M”MˆDØ×"Ñ"×&Ñ& t§{¡{Ô3Ø×,Ñ,¨[Ó9ˆFßˆvØ×&Ñ&×*Ñ*¨4¯;©;Ô7Ø#Ÿ]™]×.Ñ.Ð/@ÓA÷ Ü(¨¯©Ó2ð ð ×.Ñ.¨z¿;¹;ÖGò "r.   c                 óf   • X R                   U   ;  a  U R                   U   R                  U5        gg)z&Group a test case with its test suite.N)ra   Úappend)rk   rw   Ú
process_ids      r   ru   Ú)LangSmithPlugin.add_process_to_test_suite“   s1   € à×-Ñ-¨jÑ9Ó9Ø×Ñ˜ZÑ(×/Ñ/°
Õ;ð :r.   c                 óz  • U R                   (       d%  U R                  R                  R                  S5        U R                     U R                   R                  U0 5      n[        UU/ SQS9U R                   U'   SSS5        U R                  R                  U R                  5       5        g! , (       d  f       N8= f)zUpdate test results.zRunning tests...)ÚfeedbackÚinputsÚreference_outputsÚoutputs)ÚunpackN)	re   rh   r\   rj   rf   rt   Ú_merge_statusesÚupdaterg   )rk   r|   ÚstatusÚcurrent_statuss       r   Úupdate_process_statusÚ%LangSmithPlugin.update_process_status˜   s�   € ð ×"×"Ø�I‰I×Ñ×#Ñ#Ð$6Ô7à×ÓØ!×0Ñ0×4Ñ4°ZÀÓDˆNÜ.=ØØÚMñ/ˆD×Ñ 
Ñ+÷ ð 	�	‰	×Ñ˜×-Ñ-Ó/Õ0÷ Õús   Á7B,Â,
B:c                 ó,   • U R                  USS05        g)z/Initialize live display when first test starts.r†   ÚrunningN)rˆ   )rk   rs   s     r   Úpytest_runtest_logstartÚ'LangSmithPlugin.pytest_runtest_logstart§   s   € à×"Ñ" 6¨H°iÐ+@ÕAr.   c                 ó  • UR                   U R                  ;   ah  UR                  S:X  aW  UR                  (       d  UR                  (       a4  UR                  (       a  SOSnU R                  UR                   SU05        gggg)z3Track setup failures and skips for LangSmith tests.ÚsetupÚfailedÚskippedr†   N)rs   rd   Úwhenr�   r‘   rˆ   )rk   rS   r†   s      r   Úpytest_runtest_logreportÚ(LangSmithPlugin.pytest_runtest_logreport«   sd   € ð �M‰M˜T×3Ñ3Ó3Ø—‘˜wÓ&Ø—— &§.§.à!'§§‘X°IˆFØ×&Ñ& v§}¡}°xÀÐ6HÕIð #1ð 'ð 4r.   c                 óŠ   • SSK Jn  / nU R                   H%  nU R                  U5      nUR	                  U5        M'     U" U6 nU$ )u~   Generate a collection of tablesâ€”one per suite.

Returns a 'Group' object so it can be rendered simultaneously by Rich Live.
r   )ÚGroup)r^   r–   ra   Ú_generate_tabler{   )rk   r–   ÚtablesÚ
suite_nameÚtabler   s         r   rg   ÚLangSmithPlugin.generate_tablesµ   sH   € õ
 	'àˆØ×*Ô*ˆJØ×(Ñ(¨Ó4ˆEØ�M‰M˜%Ö ñ +ñ �v�ˆØˆr.   r™   c                 óì  ^• SSK Jn  U R                  U   nSU SU R                  R	                  US5       S3nU" USS9nUR                  S	5        UR                  S
5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        [        S5      n[        S5      n[        R                  " 5       n/ n	[        [        5      n
U Vs0 sH  o»U R                  R	                  U0 5      _M!     nnUR                  5        HØ  u  p½UR	                  SU5      UR	                  SU5      -
  nU	R                  U5        UR	                  S0 5      R                  5        H;  u  nn[        U[        [        [         45      (       d  M(  X¯   R                  U5        M=     [#        [        US S35      U5      n[#        [        UR	                  SS5      5      U5      nMÚ     [%        S UR'                  5        5       5      nU(       a&  U[        U5      -  nUS:X  a  SOSnSU SUS SU S3nOS nU	(       a  [%        U	5      [        U	5      -  S S3nOS!nU
(       a'  S"R)                  S# U
R                  5        5       5      nOSn[#        U[        U5      5      nU R*                  R,                  Xg-   -
  S$-  m[#        TS%5      mUR                  5        GH>  u  p½S&SSS'S(.R	                  UR	                  SS5      S)5      nUR	                  SU5      UR	                  SU5      -
  nS"R)                  U4S* jUR	                  S0 5      R                  5        5       5      n[/        UR	                  S+0 5      5      n[/        UR	                  S,0 5      5      n[/        UR	                  S-0 5      5      nUR1                  [3        [5        U5      TS.9[7        UTS.9[7        UTS.9[7        UTS.9T* S/ SU SUR	                  SS5       SU S3UUS S35        GMA     UR1                  S0S0S0S0S0S0S05        UR1                  S1S0S0S0UUU5        U$ s  snf )2zGenerate results table.r   )ÚTablezTest Suite: [bold]z$[/bold]
LangSmith URL: [bright_cyan]z--z[/bright_cyan]Úleft)ÚtitleÚtitle_justifyÚTestÚInputszRef outputsÚOutputsÚStatusÚFeedbackÚDurationr†   ÚdurationÚend_timeÚ
start_timer   z.2fÚsÚqueuedc              3   óF   #   • U H  oR                  S 5      S:H  v •  M     g7f)r†   ÚpassedN)rt   )r   rª   s     r   r!   Ú2LangSmithPlugin._generate_table.<locals>.<genexpr>å   s   é € ÐXÑ@W¸1Ÿ5™5 ›?¨hÖ6Ò@Wùs   ‚!é   ÚgreenÚredÚ[Ú]z.0%z[/z
Passed: --z--sÚ
c              3   ó\   #   • U H#  u  pU S [        U5      [        U5      -   3v •  M%     g7f)ú: N)ÚsumÚlen)r   ÚkÚvs      r   r!   r®   ñ   s.   é € ð +Ù6O©d¨a�1�#�Rœ˜A›¤ Q£™Ð(Õ)Ò6Oùs   ‚*,é   é   ÚyellowÚcyan)r‹   r­   r�   r‘   Úwhitec              3   ó„   >#   • U H6  u  p[        UTS 9 S[        U[        5      (       a  [        U5      OU 3v •  M8     g7f)©Úmax_lenr¶   N)Ú_abbreviateÚ
isinstanceÚboolÚint)r   r¹   rº   Úmax_dynamic_col_widths      €r   r!   r®     sD   øé € ð !á>‘D�Aô ˜qÐ*?Ñ@ÐAÀÌjÐYZÔ\`×NaÑNaÄCÈÄFÐghÐCiÕjÚ>ùs   ƒ=A r€   r�   r‚   rÁ   NrQ   z[bold]Averages[/bold])Ú
rich.tabler�   ra   rb   rt   Ú
add_columnr¸   Útimer   r`   re   rq   r{   rÄ   ÚfloatrÆ   rÅ   Úmaxr·   ÚvaluesÚjoinr\   ÚwidthÚ_dumps_with_fallbackÚadd_rowÚ_abbreviate_test_nameÚstrrÃ   )rk   r™   r�   Úprocess_idsrŸ   rš   Ú
max_statusÚmax_durationÚnowÚ	durationsÚnumeric_feedbacksÚpidÚsuite_statusesr†   r§   r¹   rº   Úpassed_countÚrateÚcolorÚaggregate_statusÚaggregate_durationÚaggregate_feedbackÚstatus_colorr   r€   r�   r‚   rÇ   s                               @r   r—   ÚLangSmithPlugin._generate_tableÃ   sf  ø€ å$à×&Ñ& zÑ2ˆà& z lð 3Ø!×1Ñ1×5Ñ5°jÀ$ÓGÐHÈðZˆá˜E°Ñ8ˆØ×Ñ˜Ô Ø×Ñ˜Ô"Ø×Ñ˜Ô'Ø×Ñ˜Ô#Ø×Ñ˜Ô"Ø×Ñ˜Ô$Ø×Ñ˜Ô$ô ˜“]ˆ
Ü˜:“ˆÜ�iŠi‹kˆØˆ	Ü'¬Ó-ÐáKVÓWÉ;ÀC˜t×2Ñ2×6Ñ6°s¸BÓ?Ò?É;ˆÐWØ)×/Ñ/Ö1‰KˆCØ—z‘z *¨cÓ2°V·Z±ZÀÈcÓ5RÑRˆHØ×Ñ˜XÔ&ØŸ
™
 :¨rÓ2×8Ñ8Ö:‘��1Ü˜a¤%¬¬dÐ!3×4Ó4Ø%Ñ(×/Ñ/°Ö2ñ ;ô œs h¨s ^°1Ð#5Ó6¸ÓEˆLÜœS §¡¨H°hÓ!?Ó@À*ÓMŠJñ 2ô ÑXÀ×@UÑ@UÔ@WÓXÓXˆÞØ¤# nÓ"5Ñ5ˆDØ# q›y‘G¨eˆEØ!" 5 '¨¨4°¨*°B°u°g¸QÐ?Ñà+ÐÞÜ$'¨	£N´S¸³^Ñ$CÀCÐ#HÈÐ!JÑà!&ÐÞØ!%§¡ñ +Ø6G×6MÑ6MÔ6Oó+ó "Ñð "&Ðä˜<¬Ð-?Ó)@ÓAˆØ!%§¡×!3Ñ!3°zÑ7PÑ!QÐVWÑ WÐÜ #Ð$9¸1Ó =Ðà)×/Ñ/×1‰KˆCà#Ø!ØØ!ñ	÷
 ‰c�&—*‘*˜X xÓ0°'Ó:ð ð —z‘z *¨cÓ2°V·Z±ZÀÈcÓ5RÑRˆHØ—y‘yô !à"ŸJ™J z°2Ó6×<Ñ<Ô>ó!ó ˆHô *¨&¯*©*°X¸rÓ*BÓCˆFÜ 4Ø—
‘
Ð.°Ó3ó!Ðô +¨6¯:©:°iÀÓ+DÓEˆGØ�M‰MÜ%¤c¨#£hÐ8MÑNÜ˜FÐ,AÑBÜÐ-Ð7LÑMÜ˜GÐ-BÑCØ*Ð*Ð+ðð �L�>  6§:¡:¨h¸Ó#AÐ"BÀ"À\ÀNÐRSÐTØØ˜C�. Ð"÷
ñ% 2ð> 	�‰�b˜"˜b " b¨"¨bÔ1à�‰Ø#ØØØØØØô	
ð ˆùòW Xs   Ã8%Q1c                 ó|   • SUR                   l        UR                  R                  S5      nU(       a	  S Ul        gg)z9Disable warning reporting and show no warnings in output.Fzwarnings-pluginc                  ó   • g r   r   )r    rA   s     r   Ú<lambda>Ú2LangSmithPlugin.pytest_configure.<locals>.<lambda>0  s   € ¸tr.   N)ÚoptionÚshowwarningsÚpluginmanagerÚ
get_pluginÚwarning_summary)rk   r1   Úreporters      r   Úpytest_configureÚ LangSmithPlugin.pytest_configure(  s9   € ð &+ˆ�‰Ô"ð ×'Ñ'×2Ñ2Ð3DÓEˆÞÙ'CˆHÕ$ð r.   c                 ó‚   • U R                   R                  5         U R                   R                  R                  S5        g)z3Stop Rich Live rendering at the end of the session.z
Finishing up...N)rh   Ústopr\   rj   )rk   rv   s     r   Úpytest_sessionfinishÚ$LangSmithPlugin.pytest_sessionfinish2  s)   € à�	‰	�‰ÔØ�	‰	×Ñ×ÑÐ 3Õ4r.   )rp   r\   rd   rh   re   rf   rb   ra   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rl   rx   ru   rˆ   rŒ   r“   rg   rÓ   r—   rî   rò   Ú__static_attributes__r   r.   r   rV   rV   o   sE   † Ù1ò7ò&Hò<ò
1òBòJòðc¨#ô còJDõ5r.   rV   c                 óÒ  • U R                  SS5        U R                  S5      (       a¿  [        R                  R	                  S5      (       d  Sn[        U5      e[        R                  R                  S5      (       a  Sn[        U5      e[        R                  " 5       (       a  Sn[        U5      eU R                  R                  [        5       S	5        S
U R                  l        gg)z Register the 'langsmith' marker.Úmarkersz/langsmith: mark test to be tracked in LangSmithr   ÚrichzoMust have 'rich' installed to use --langsmith-output. Please install with: `pip install -U 'langsmith[pytest]'`ÚPYTEST_XDIST_TESTRUNUIDzq--langsmith-output not supported with pytest-xdist. Please remove the '--langsmith-output' option or '-n' option.z“--langsmith-output not supported when env varLANGSMITH_TEST_TRACKING='false'. Please remove the'--langsmith-output' option or enable test tracking.Úlangsmith_output_pluginFN)Úaddinivalue_linerR   Ú	importlibÚutilÚ	find_specr   ÚosÚenvironrt   Úls_utilsÚtest_tracking_is_disabledrê   ÚregisterrV   rè   ré   )r1   Úmsgs     r   rî   rî   8  sÑ   € à
×ÑØÐDôð ×ÑÐ,×-Ñ-Ü�~‰~×'Ñ'¨×/Ñ/ðLð ô ˜S“/Ð!Ü�:‰:�>‰>Ð3×4Ñ4ðPð ô ˜S“/Ð!Ü×-Ò-×/Ñ/ð+ð ô ˜S“/Ð!Ø×Ñ×%Ñ%¤oÓ&7Ð9RÔSà%*ˆ�‰Õ"ð/ .r.   ÚxrÂ   Úreturnc                 ó:   • [        U 5      U:”  a  U S US-
   S-   $ U $ )Né   ú...)r¸   )r	  rÂ   s     r   rÃ   rÃ   W  s)   € Ü
ˆ1ƒv�ÓØ��7˜Q‘;Ð %Ñ'Ð'àˆr.   Ú	test_namec                 óÂ   • [        U 5      U:”  aO  U R                  S5      u  p#[        SU-   5      U:”  a  SX1S-
  * S  -   $ U[        SU-   5      -
  nSX$* S  -   S-   U-   $ U $ )Nz::z.py::r  r  z...::)r¸   Úsplit)r  rÂ   Úfiler   Úfile_lens        r   rÒ   rÒ   ^  s{   € Ü
ˆ9ƒ~˜ÓØ—_‘_ TÓ*‰
ˆÜˆw˜‰~Ó Ó(Ø˜4¨A¡+ Ð 0Ð1Ñ1Ð1ØœS ¨4¡Ó0Ñ0ˆØ�t˜I˜JÐ'Ñ'¨$Ñ.°Ñ5Ð5àÐr.   r…   Úcurrentrƒ   c                óê   • U Hh  nU R                  US 5      =n(       d  M  UR                  U0 5      n[        U[        5      (       a  [        U[        5      (       a
  0 UEUEX'   Md  XAU'   Mj     0 UEU E$ r   )Úpoprt   rÄ   Údict)r…   r  rƒ   ÚpathÚpath_updateÚpath_currents         r   r„   r„   i  su   € ÛˆØ Ÿ*™* T¨4Ó0Ð0ˆ;×0Ø"Ÿ;™; t¨RÓ0ˆLÜ˜+¤t×,Ñ,´¸LÌ$×1OÑ1OØ ? <Ð ?°;Ð ?�“à +˜“ñ ð !ˆgÐ ˜Ð Ð r.   rF   c                 óP   •  [         R                  " U 5      $ ! [         a     gf = f)NÚunserializable)ÚjsonÚdumpsÚ	Exception)rF   s    r   rÐ   rÐ   t  s'   € ð Ü�zŠz˜#‹ÐøÜó  Ùð ús   ‚ ˜
%¤%)+rø   Úimportlib.utilr   r  Úloggingr  rÊ   Úcollectionsr   Ú	threadingr   Útypingr   rD   r
   r   r  Úlangsmith.testing._internalr   r   rG   Ú	getLoggerrô   r   r   r-   Ú__version__Ú
startswithr2   r5   ÚhookimplrO   rT   rV   rî   rÓ   rÆ   rÃ   rÒ   r  r`   r„   rÐ   r   r.   r   Ú<module>r)     s  ðÙ ã Û Û Û 	Û Ý #Ý Ý ã å 'Ý <Ý 7à	×	Ò	˜8Ó	$€ò
ò*!ð 
×Ñ× Ñ  ×&Ñ&ó"ò"ð
 ‡‚˜TÑ"ñ 
ó #ð 
ðF ‡�ñó ð÷F5ñ F5òR+ð>�3ð  ð ¨ô ð Sð °3ð ¸3ô ð!˜Dð !¨4ð !¸DÀ¹Ið !È$ô !ð ˜cð   cõ  r.   