§
    ¥˜ºhs.  ã            
       ó  — d dl Z d dlmZ d dlZd dlZd dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ g d¢Zg d	¢Zd*d„Zej                             dddej        fg¦  «        ej                             de¦  «        ej                             de¦  «        d„ ¦   «         ¦   «         ¦   «         Zej                             dddej        fg¦  «        ej                             de¦  «        ej                             de¦  «        d„ ¦   «         ¦   «         ¦   «         Zej                             dddg¦  «        d„ ¦   «         Z ej                             dddg¦  «        d„ ¦   «         Z!d„ Z"ej                             dddddd„ ddfg¦  «        d „ ¦   «         Z#d!„ Z$ej                             de¦  «        ej                             de¦  «        d"„ ¦   «         ¦   «         Z%d#„ Z&d$„ Z'd%„ Z(d&„ Z)d'„ Z*d(„ Z+d)„ Z,dS )+é    N)Úproduct)Úrand)ÚcloneÚdatasetsÚmanifoldÚ	neighborsÚpipelineÚpreprocessing)Ú
make_blobs)Úpairwise_distances)Úassert_allcloseÚassert_allclose_dense_sparseÚassert_array_equal)ÚautoÚdenseÚarpack)r   ÚFWÚDé   Fc           	      ó¸  — t          t          j        |¦  «        ¦  «        }t          j        t          t          t          |¦  «        d¬¦  «        ¦  «        ¦  «                             | d¬¦  «        }|rdt          j	         
                    d¦  «        }d|                     |d¦  «                             | d¬¦  «        z  }t          j        ||fd¦  «        }|S )Né   )ÚrepeatF©Úcopyr   çš™™™™™¹?é   )ÚintÚmathÚsqrtÚnpÚarrayÚlistr   ÚrangeÚastypeÚrandomÚRandomStateÚrandnÚconcatenate)ÚdtypeÚn_ptsÚ	add_noiseÚ
n_per_sideÚXÚrngÚnoises          új/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/sklearn/manifold/tests/test_isomap.pyÚcreate_sample_datar1      s»   € å•T”Y˜uÑ%Ô%Ñ&Ô&€JÝ
Œ••g�e JÑ/Ô/¸Ð:Ñ:Ô:Ñ;Ô;Ñ<Ô<×CÒCÀEÐPUÐCÑVÔV€AØð *åŒi×#Ò# AÑ&Ô&ˆØ�c—i’i  qÑ)Ô)×0Ò0°¸UÐ0ÑCÔCÑCˆÝŒN˜A˜u˜: qÑ)Ô)ˆØ€Hó    zn_neighbors, radius)é   NÚeigen_solverÚpath_methodc                 ó®  — d}t          | |d¬¦  «        }|�t          j        ||d¬¦  «        }nt          j        ||d¬¦  «        }t	          j        ||d||¬¦  «        }|                     |¦  «         |�t          j        |j        |d¬¦  «        }	nt          j        |j        |d¬¦  «        }	| t          j	        k    rdnd	}
t          ||	|
¬
¦  «         d S )Nr   F©r*   r+   Údistance©Úmoder   ©Ún_neighborsÚradiusÚn_componentsr4   r5   çñhãˆµøä>r   ©Úatol)r1   r   Úkneighbors_graphÚradius_neighbors_graphr   ÚIsomapÚfitÚ
embedding_r    Úfloat32r   )Úglobal_dtyper<   r=   r4   r5   r*   r-   ÚGÚclfÚG_isorA   s              r0   Útest_isomap_simple_gridrL   !   sþ   € ð €EÝ˜<¨uÀÐFÑFÔF€Að ÐÝÔ& q¨+¸JÐGÑGÔGˆˆåÔ,¨Q°¸ZÐHÑHÔHˆå
Œ/ØØØØ!Øðñ ô €Cð ‡G‚GˆA�J„J€JàÐÝÔ*¨3¬>¸;ÈZÐXÑXÔXˆˆåÔ0ØŒN˜F¨ð
ñ 
ô 
ˆð  ¥2¤:Ò-Ð-ˆ4ˆ4°1€DÝ   E°Ð5Ñ5Ô5Ð5Ð5Ð5r2   c                 ób  — | t           j        u rt          j        d¦  «         d}t	          | |d¬¦  «        }|�*t          j        ||d¬¦  «                             ¦   «         }n)t          j        ||d¬¦  «                             ¦   «         }t          j
        ¦   «         }|                     d|dz  z  ¦  «        }	t          j        ||d||¬	¦  «        }
|
                     |¦  «         |�t          j        |
j        |d¬¦  «        }nt          j        |
j        |d¬¦  «        }|                     ¦   «         }|                     d|dz  z  ¦  «        }t           j                             |	|z
  ¦  «        |z  }| t           j        k    rd
nd}t%          ||
                     ¦   «         |¬¦  «         d S )NzwSkipping test due to numerical instabilities on float32 datafrom KernelCenterer used in the reconstruction_error methodr   Tr7   r8   r9   g      à¿r   r;   r?   r   r@   )r    rG   ÚpytestÚskipr1   r   rB   ÚtoarrayrC   r
   ÚKernelCentererÚfit_transformr   rD   rE   rF   ÚlinalgÚnormr   Úreconstruction_error)rH   r<   r=   r4   r5   r*   r-   rI   ÚcentererÚKrJ   rK   ÚK_isorU   rA   s                  r0   Ú test_isomap_reconstruction_errorrY   D   s¾  € ð •r”zÐ!Ð!ÝŒðJñ	
ô 	
ð 	
ð €EÝ˜<¨uÀÐEÑEÔE€Að ÐÝÔ& q¨+¸JÐGÑGÔG×OÒOÑQÔQˆˆåÔ,¨Q°¸ZÐHÑHÔH×PÒPÑRÔRˆÝÔ+Ñ-Ô-€HØ×Ò˜t a¨¡d™{Ñ+Ô+€Aå
Œ/ØØØØ!Øðñ ô €Cð ‡G‚GˆA�J„J€Jð ÐÝÔ*¨3¬>¸;ÈZÐXÑXÔXˆˆåÔ0ØŒN˜F¨ð
ñ 
ô 
ˆð �MŠM‰OŒO€EØ×"Ò" 4¨%°©(¡?Ñ3Ô3€Eõ œ9Ÿ>š>¨!¨e©)Ñ4Ô4°uÑ<ÐØ¥2¤:Ò-Ð-ˆ4ˆ4°1€DÝÐ(¨#×*BÒ*BÑ*DÔ*DÈ4ÐPÑPÔPÐPÐPÐPr2   )r   N)Ng      à?c                 óÆ  — d}d}d}t          j        |d¬¦  «        \  }}|                     | d¬¦  «        }t          j        |||¬¦  «        }|                     |¦  «        }	t          j                             d¦  «        }
| |
j	        |j
        Ž z  }|                     ||z   ¦  «        }t          j        t          j        |	|z
  d	z  ¦  «        ¦  «        d	|z  k     sJ ‚d S )
NéÈ   é
   g{®Gáz„?r   ©Úrandom_stateFr   )r>   r<   r=   r   )r   Úmake_s_curver$   r   rD   rR   r    r%   r&   r'   ÚshapeÚ	transformr   Úmean)rH   r<   r=   Ú	n_samplesr>   Únoise_scaler-   ÚyÚisoÚX_isor.   r/   ÚX_iso2s                r0   Útest_transformri   u   sð   € à€IØ€LØ€Kõ Ô  ¸Ð;Ñ;Ô;�D€A€qà	�Š� EˆÑ*Ô*€Aõ Œ/Ø!¨{À6ðñ ô €Cð ×Ò˜aÑ Ô €Eõ Œ)×
Ò
 Ñ
"Ô
"€CØ˜)˜#œ) Q¤WÐ-Ñ-€EØ�]Š]˜1˜u™9Ñ%Ô%€Fõ Œ7•2”7˜E F™N¨qÑ0Ñ1Ô1Ñ2Ô2°Q¸±_ÒDÐDÐDÐDÐDÐDr2   )Ng      $@c                 óF  — t          j        d¬¦  «        \  }}|                     |d¬¦  «        }t          j        dt          j        | |¬¦  «        fdt          j        ¦   «         fg¦  «        }| 	                    ||¦  «         d| 
                    ||¦  «        k     sJ ‚d S )	Nr   r]   Fr   Úisomap©r<   r=   rJ   gÍÌÌÌÌÌì?)r   r   r$   r	   ÚPipeliner   rD   r   ÚKNeighborsClassifierrE   Úscore)r<   r=   rH   r-   re   rJ   s         r0   Útest_pipelinerp   �   s¥   € õ
 Ô¨AÐ.Ñ.Ô.�D€A€qØ	�Š� EˆÑ*Ô*€AÝ
Ô
à•x”°;ÀvÐNÑNÔNÐOØ•IÔ2Ñ4Ô4Ð5ð	
ñô €Cð ‡G‚GˆAˆq�M„M€MØ�—’˜1˜a‘”Ò Ð Ð Ð Ð Ð r2   c                 óZ  — d}d}t          j        d¬¦  «        \  }}t          j        d¬¦  «        \  }}|                     | d¬¦  «        }|                     | d¬¦  «        }t          j        t          j        ||d¬	¦  «        t          j        |d
¬¦  «        ¦  «        }t          j        ||¬¦  «        }| 	                    |¦  «        }| 	                    |¦  «        }	t          ||	¦  «         |                     |¦  «        }|                     |¦  «        }	t          ||	¦  «         d S )Nr   r\   r   r]   r   Fr   r8   )r<   Ú	algorithmr:   Úprecomputed©r<   Úmetric)r<   Úneighbors_algorithm)r   r   r$   r	   Úmake_pipeliner   ÚKNeighborsTransformerr   rD   rR   r   ra   )
rH   rr   r<   r-   Ú_ÚX2Ú	est_chainÚest_compactÚXt_chainÚ
Xt_compacts
             r0   Ú0test_pipeline_with_nearest_neighbors_transformerr       s;  € ð €IØ€KåÔ¨AÐ.Ñ.Ô.�D€A€qÝÔ¨QÐ/Ñ/Ô/�E€Bˆà	�Š� EˆÑ*Ô*€AØ	�Š�< eˆÑ	,Ô	,€Bõ Ô&ÝÔ'Ø#¨y¸zð	
ñ 	
ô 	
õ 	Œ K¸ÐFÑFÔFñ	ô €Iõ ”/Ø°Yðñ ô €Kð ×&Ò& qÑ)Ô)€HØ×*Ò*¨1Ñ-Ô-€JÝ�H˜jÑ)Ô)Ð)à×"Ò" 2Ñ&Ô&€HØ×&Ò& rÑ*Ô*€JÝ�H˜jÑ)Ô)Ð)Ð)Ð)r2   zmetric, p, is_euclidean)Ú	euclideanr   T)Ú	manhattanr   F)Ú	minkowskir   F)r‚   r   Tc                 ó`   — t          j        t          j        | dz  |dz  z   ¦  «        ¦  «        S )Nr   )r    r   Úsum)Úx1Úx2s     r0   ú<lambda>r‡   Ç   s&   € �œ¥¤ r¨1¡u¨r°1©u¡}Ñ 5Ô 5Ñ6Ô6€ r2   r   c                 ó²  — t          j        d¬¦  «        \  }}|                     | d¬¦  «        }t          j        ¦   «                              |¦  «        }t          j        ||¬¦  «                             |¦  «        }|rt          ||¦  «         d S t          j        t          d¬¦  «        5  t          ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r]   Fr   )ru   ÚpzNot equal to tolerance©Úmatch)
r   r   r$   r   rD   rR   r   rN   ÚraisesÚAssertionError)rH   ru   r‰   Úis_euclideanr-   ry   Ú	referenceÚ	embeddings           r0   Útest_different_metricr‘   À   s  € õ Ô¨AÐ.Ñ.Ô.�D€A€qØ	�Š� EˆÑ*Ô*€Aå”Ñ!Ô!×/Ò/°Ñ2Ô2€IÝ” v°Ð3Ñ3Ô3×AÒAÀ!ÑDÔD€Iàð 2Ý˜	 9Ñ-Ô-Ð-Ð-Ð-åŒ]�>Ð1IÐJÑJÔJð 	2ð 	2Ý˜I yÑ1Ô1Ð1ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2s   Â.CÃCÃCc                  óì   — t          j        ¦   «         } dD ]]}|                      |¬¦  «         |                      t          j                             dd¦  «        ¦  «         | j        j        |k    sJ ‚Œ^d S )N)r\   é   é   ©r<   é2   r   )	r   rD   Ú
set_paramsrE   r    r%   r   Únbrs_r<   )Úmodelr<   s     r0   Útest_isomap_clone_bugrš   Ú   sz   € åŒOÑÔ€EØ#ð 6ð 6ˆØ×Ò [ÐÑ1Ô1Ð1Ø�	Š	•"”)—.’.  QÑ'Ô'Ñ(Ô(Ð(ØŒ{Ô&¨+Ò5Ð5Ð5Ð5Ð5ð6ð 6r2   c                 ó  — t          dddd| |¬¦  «        }t          j        d||d¬¦  «        }t          |¦  «        }|                     |                     ¦   «         ¦  «        }|                     |¦  «        }t          ||d	d	¬
¦  «         d S )Néd   é   r   Úcsr)ÚdensityÚformatr)   r^   r   é   )r>   r4   r5   r<   g-Cëâ6?)ÚrtolrA   )Úsparse_randr   rD   r   rR   rP   r   )	rH   r4   r5   Úglobal_random_seedr-   Ú	iso_denseÚ
iso_sparseÚX_trans_denseÚX_trans_sparses	            r0   Útest_sparse_inputr©   ã   s¨   € õ
 	ØØ	ØØØØ'ð	ñ 	ô 	€Aõ ”ØØ!ØØð	ñ ô €Iõ �yÑ!Ô!€Jà×+Ò+¨A¯IªI©K¬KÑ8Ô8€MØ×-Ò-¨aÑ0Ô0€Nå�N M¸À4ÐHÑHÔHÐHÐHÐHr2   c                 ó¢  — t          j        dd¬¦  «        \  }}|                     | d¬¦  «        }d}t          j        ||d¬¦  «        }t          j        d |d	¬
¦  «        }|                     |¦  «         |j        }t          j        d |d¬
¦  «        }| 	                    |¦  «        }| t          j        k    rdnd}t          |||¬¦  «         d S )Nr[   r   r]   Fr   r\   r8   )r=   r:   rs   )r<   r=   ru   r‚   r?   r@   )r   r_   r$   r   rC   r   rD   rE   rF   rR   r    rG   r   )	rH   r-   re   r=   Úgrk   Úprecomputed_resultÚresultrA   s	            r0   Ú(test_isomap_fit_precomputed_radius_graphr®   ÿ   sÖ   € õ Ô  °1Ð5Ñ5Ô5�D€A€qØ	�Š� EˆÑ*Ô*€AØ€FåÔ(¨°6À
ÐKÑKÔK€AÝŒ_¨°fÀ]ÐSÑSÔS€FØ
‡J‚Jˆq�M„M€MØÔ*ÐåŒ_¨°fÀ[ÐQÑQÔQ€FØ×!Ò! !Ñ$Ô$€FØ¥2¤:Ò-Ð-ˆ4ˆ4°1€DÝÐ&¨°TÐ:Ñ:Ô:Ð:Ð:Ð:r2   c                 óà   — t          j        d¬¦  «        }t          j        ddgddgddgg| ¬¦  «        }|                     |¦  «         |j        j        | k    sJ ‚|j        j        | k    sJ ‚d	S )
zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   r•   r   r�   é   é   é   ©r)   N)r   rD   r    r!   rE   Údist_matrix_r)   rF   )rH   rf   r-   s      r0   Ú#test_isomap_fitted_attributes_dtyperµ     s   € õ Œ/ aÐ
(Ñ
(Ô
(€Cå
Œ�1�a�&˜1˜a˜& 1 a &Ð)°Ð>Ñ>Ô>€Aà‡G‚GˆA�J„J€JàÔÔ! \Ò1Ð1Ð1Ð1ØŒ>Ô <Ò/Ð/Ð/Ð/Ð/Ð/r2   c                  ó†  — t          j        d¬¦  «        } t          j        ddgddgddggt          j        ¬¦  «        }|                      |¦  «         t          j        d¬¦  «        }t          j        ddgddgddggt          j        ¬¦  «        }|                     |¦  «         t          | j        |j        ¦  «         d	S )
z?Check the equivalence of the results with 32 and 64 bits input.r   r•   r   r�   r°   r±   r²   r³   N)	r   rD   r    r!   rG   rE   Úfloat64r   r´   )Úiso_32ÚX_32Úiso_64ÚX_64s       r0   Útest_isomap_dtype_equivalencer¼     s¸   € åŒ_¨Ð+Ñ+Ô+€FÝŒ8�a˜�V˜a ˜V a¨ VÐ,µB´JÐ?Ñ?Ô?€DØ
‡J‚JˆtÑÔÐåŒ_¨Ð+Ñ+Ô+€FÝŒ8�a˜�V˜a ˜V a¨ VÐ,µB´JÐ?Ñ?Ô?€DØ
‡J‚JˆtÑÔÐå�FÔ'¨Ô)<Ñ=Ô=Ð=Ð=Ð=r2   c                  óø   — t          j        d¬¦  «        \  } }t          j        dd¬¦  «        }d}t	          j        t          |¬¦  «        5  |                     | ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NT)Ú
return_X_yr�   g      @rl   z(Both n_neighbors and radius are providedrŠ   )r   Úload_digitsr   rD   rN   rŒ   Ú
ValueErrorrR   )r-   ry   rk   Úmsgs       r0   Ú9test_isomap_raise_error_when_neighbor_and_radius_both_setrÂ   ,  sÁ   € õ Ô¨4Ð0Ñ0Ô0�D€A€qÝŒ_¨°3Ð7Ñ7Ô7€FØ
4€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð  ð  Ø×Ò˜QÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  s   ÁA/Á/A3Á6A3c                  óþ   — t          j        g d¢¦  «        d d …d f         } t          j        t          d¬¦  «        5  t          j        d¬¦  «                             | ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )N©r   r   r   r±   r²   é   únumber of connected componentsrŠ   r   r•   )r    r!   rN   ÚwarnsÚUserWarningr   rD   rE   )r-   s    r0   Ú"test_multiple_connected_componentsrÉ   7  sÀ   € å
ŒÐ#Ð#Ð#Ñ$Ô$ Q Q Q¨ WÔ-€AÝ	Œ•kÐ)IÐ	JÑ	JÔ	Jð .ð .ÝŒ AÐ&Ñ&Ô&×*Ò*¨1Ñ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .s   ¼)A2Á2A6Á9A6c                 ó.  — t          j        g d¢¦  «        d d …d f                              | d¬¦  «        }t          |¦  «        }t	          j        t          d¬¦  «        5  t          j        dd¬¦  «         	                    |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        |d	d
¬¦  «        }t	          j        t          d¬¦  «        5  t          j        dd¬¦  «         	                    |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÄ   Fr   rÆ   rŠ   r   rs   rt   r   r8   )r<   r:   )r    r!   r$   r   rN   rÇ   rÈ   r   rD   rE   r   rB   rŒ   ÚRuntimeError)rH   r-   ÚX_distancesÚX_graphs       r0   Ú5test_multiple_connected_components_metric_precomputedrÎ   >  s²  € õ 	ŒÐ#Ð#Ð#Ñ$Ô$ Q Q Q¨ WÔ-×4Ò4°\ÈÐ4ÑNÔN€Aõ % QÑ'Ô'€KÝ	Œ•kÐ)IÐ	JÑ	JÔ	Jð Nð NÝŒ A¨mÐ<Ñ<Ô<×@Ò@ÀÑMÔMÐMðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nõ Ô(¨¸À
ÐKÑKÔK€GÝ	Œ•|Ð+KÐ	LÑ	LÔ	Lð Jð JÝŒ A¨mÐ<Ñ<Ô<×@Ò@ÀÑIÔIÐIðJð Jð Jñ Jô Jð Jð Jð Jð Jð Jð Jð Jøøøð Jð Jð Jð Jð Jð Js$   Á *BÂBÂBÃ*D
Ä
DÄDc                  óü   — t          dd¬¦  «        \  } }d}t          j        |¬¦  «        }|                     | ¦  «         |                     ¦   «         }t          d„ t          |¦  «        D ¦   «         |¦  «         dS )z'Check get_feature_names_out for Isomap.r   r°   )r^   Ú
n_featuresr   )r>   c                 ó   — g | ]}d |› �‘ŒS )rk   © )Ú.0Úis     r0   ú
<listcomp>z.test_get_feature_names_out.<locals>.<listcomp>V  s   € ÐBÐBÐB¨˜ ˜˜ÐBÐBÐBr2   N)r   r   rD   rR   Úget_feature_names_outr   r#   )r-   re   r>   rf   Únamess        r0   Útest_get_feature_names_outrØ   N  s�   € å 1°Ð3Ñ3Ô3�D€A€qØ€Lå
Œ/ |Ð
4Ñ
4Ô
4€CØ×Ò�aÑÔÐØ×%Ò%Ñ'Ô'€EÝÐBÐB­e°LÑ.AÔ.AÐBÑBÔBÀEÑJÔJÐJÐJÐJr2   )r   F)-r   Ú	itertoolsr   Únumpyr    rN   Úscipy.sparser   r£   Úsklearnr   r   r   r   r	   r
   Úsklearn.datasetsr   Úsklearn.metrics.pairwiser   Úsklearn.utils._testingr   r   r   Úeigen_solversÚpath_methodsr1   ÚmarkÚparametrizeÚinfrL   rY   ri   rp   r   r‘   rš   r©   r®   rµ   r¼   rÂ   rÉ   rÎ   rØ   rÒ   r2   r0   ú<module>rå      sŽ  ðØ €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,à QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð ,Ð+Ð+€Ø"Ð"Ð"€ð	ð 	ð 	ð 	ð „×ÒÐ.°¸dÀBÄF¸^Ð0LÑMÔMØ„×Ò˜¨Ñ7Ô7Ø„×Ò˜¨Ñ5Ô5ð6ð 6ñ 6Ô5ñ 8Ô7ñ NÔMð6ð@ „×ÒÐ.°¸dÀBÄF¸^Ð0LÑMÔMØ„×Ò˜¨Ñ7Ô7Ø„×Ò˜¨Ñ5Ô5ð+Qð +Qñ 6Ô5ñ 8Ô7ñ NÔMð+Qð\ „×ÒÐ.°¸KÐ0HÑIÔIðEð Eñ JÔIðEð2 „×ÒÐ.°¸LÐ0IÑJÔJð!ð !ñ KÔJð!ð *ð *ð *ð@ „×ÒØàØØØØ	6Ð	6¸¸5ÐAðñ	ô 	ð2ð 2ñ	ô 	ð2ð 6ð 6ð 6ð „×Ò˜¨Ñ7Ô7Ø„×Ò˜¨Ñ5Ô5ðIð Iñ 6Ô5ñ 8Ô7ðIð4;ð ;ð ;ð&
0ð 
0ð 
0ð
>ð 
>ð 
>ð ð  ð  ð.ð .ð .ðJð Jð Jð Kð Kð Kð Kð Kr2   