Ë
    D^(h§F  ã                   óü   — d dl Z d dlZd dlmZ d dlZd dlZd„ Z G d„ d«      Z G d„ d«      Z	d„ Z
 G d	„ d
«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)é    N)Úcombinationsc                 ó:   — t        d„ t        | |«      D «       «      S )Nc              3   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­w©N©Úabs©Ú.0ÚaÚbs      úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/generators/tests/test_geometric.pyú	<genexpr>zl1dist.<locals>.<genexpr>   s   è ø€ Ò0™d˜a Œs�1�q‘5�zÑ0ùó   ‚©ÚsumÚzip©ÚxÚys     r   Úl1distr   
   s   € ÜÑ0¤c¨!¨Q£iÔ0Ó0Ð0ó    c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestRandomGeometricGraphz7Unit tests for :func:`~networkx.random_geometric_graph`c                 ó¶   — t        j                  ddd¬«      }t        |«      dk(  sJ ‚t        j                  t        d«      dd¬«      }t        |«      dk(  sJ ‚y ©Né2   ç      Ð?é*   ©Úseed)ÚnxÚrandom_geometric_graphÚlenÚrange©ÚselfÚGs     r   Útest_number_of_nodesz-TestRandomGeometricGraph.test_number_of_nodes   sN   € Ü×%Ñ% b¨$°RÔ8ˆÜ�1‹v˜Š|Ðˆ|Ü×%Ñ%¤e¨B£i°¸BÔ?ˆÜ�1‹v˜Š|Ð‰|r   c                 óT  — t        j                  dd«      }t        |d«      D ]ƒ  \  }}|||   v r<t        j                  |j
                  |   d   |j
                  |   d   «      dk  rŒGJ ‚t        j                  |j
                  |   d   |j
                  |   d   «      dk  sŒƒJ ‚ y©úlTests that pairs of vertices adjacent if and only if they are
        within the prescribed radius.
        r   r   é   ÚposN)r!   r"   r   ÚmathÚdistÚnodes©r&   r'   ÚuÚvs       r   Útest_distancesz'TestRandomGeometricGraph.test_distances   s¥   € ô ×%Ñ% b¨$Ó/ˆÜ   AÓ&ò 	S‰DˆAˆqà�A�a‘D‰yÜ—y‘y §¡¨¡¨EÑ!2°A·G±G¸A±J¸uÑ4EÓFÈ$ÓNÐNÐNô  Ÿ9™9 Q§W¡W¨Q¡Z°Ñ%6¸¿¹À¹
À5Ñ8IÓJÈdÓRÐRÐRñ	Sr   c                 ó0  — t        j                  ddd¬«      }t        |d«      D ]o  \  }}|||   v r2t        |j                  |   d   |j                  |   d   «      dk  rŒ=J ‚t        |j                  |   d   |j                  |   d   «      dk  sŒoJ ‚ y)úBTests for providing an alternate distance metric to the generator.r   r   é   ©Úpr,   r-   N)r!   r"   r   r   r0   r1   s       r   Útest_pzTestRandomGeometricGraph.test_p&   sŸ   € ô ×%Ñ% b¨$°!Ô4ˆÜ   AÓ&ò 	P‰DˆAˆqà�A�a‘D‰yÜ˜aŸg™g a™j¨Ñ/°·±¸±¸EÑ1BÓCÀtÓKÐKÐKô " !§'¡'¨!¡*¨UÑ"3°Q·W±W¸Q±ZÀÑ5FÓGÈ4ÓOÐOÐOñ	Pr   c                 ó¸  — ddl }t        |j                  «      }t        j                  |d«      }t        |«      t        |«      k(  sJ ‚t        |d«      D ]ƒ  \  }}|||   v r<t        j                  |j                  |   d   |j                  |   d   «      dk  rŒGJ ‚t        j                  |j                  |   d   |j                  |   d   «      dk  sŒƒJ ‚ y©ú=Tests using values other than sequential numbers as node IDs.r   Nr   r,   r-   )
ÚstringÚlistÚascii_lowercaser!   r"   r#   r   r.   r/   r0   ©r&   r>   r0   r'   r2   r3   s         r   Útest_node_namesz(TestRandomGeometricGraph.test_node_names2   sÌ   € ãä�V×+Ñ+Ó,ˆÜ×%Ñ% e¨TÓ2ˆÜ�1‹vœ˜U›Ò#Ð#Ð#ä   AÓ&ò 	S‰DˆAˆqà�A�a‘D‰yÜ—y‘y §¡¨¡¨EÑ!2°A·G±G¸A±J¸uÑ4EÓFÈ$ÓNÐNÐNô  Ÿ9™9 Q§W¡W¨Q¡Z°Ñ%6¸¿¹À¹
À5Ñ8IÓJÈdÓRÐRÐRñ	Sr   c                 óŽ   — t        j                  dddd¬«      }t        d„ |j                  j	                  «       D «       «      sJ ‚y )Nr   r   r   Úcoords©r    Úpos_namec              3   óD   K  — | ]  \  }}t        |d    «      dk(  –— Œ y­w©rD   r,   N©r#   ©r
   ÚnÚds      r   r   z9TestRandomGeometricGraph.test_pos_name.<locals>.<genexpr>D   ó"   è ø€ ÒE©T¨Q°”3�q˜‘{Ó# qÕ(ÑEùó   ‚ )r!   r"   Úallr0   Úitemsr%   s     r   Útest_pos_namez&TestRandomGeometricGraph.test_pos_nameB   s6   € Ü×%Ñ% b¨$°RÀ(ÔKˆÜÑE°Q·W±W·]±]³_ÔEÔEÐEÑEr   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r4   r:   rB   rQ   © r   r   r   r      s"   „ ÙAòòSò
PòSó Fr   r   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTestSoftRandomGeometricGraphz<Unit tests for :func:`~networkx.soft_random_geometric_graph`c                 ó¶   — t        j                  ddd¬«      }t        |«      dk(  sJ ‚t        j                  t        d«      dd¬«      }t        |«      dk(  sJ ‚y r   )r!   Úsoft_random_geometric_graphr#   r$   r%   s     r   r(   z1TestSoftRandomGeometricGraph.test_number_of_nodesJ   sN   € Ü×*Ñ*¨2¨t¸"Ô=ˆÜ�1‹v˜Š|Ðˆ|Ü×*Ñ*¬5°«9°dÀÔDˆÜ�1‹v˜Š|Ð‰|r   c                 óÞ   — t        j                  dd«      }t        |d«      D ]H  \  }}|||   v sŒt        j                  |j
                  |   d   |j
                  |   d   «      dk  rŒHJ ‚ yr*   )r!   rZ   r   r.   r/   r0   r1   s       r   r4   z+TestSoftRandomGeometricGraph.test_distancesP   sp   € ô ×*Ñ*¨2¨tÓ4ˆÜ   AÓ&ò 	O‰DˆAˆqà�A�a‘DŠyÜ—y‘y §¡¨¡¨EÑ!2°A·G±G¸A±J¸uÑ4EÓFÈ$ÓNÐNÐNñ	Or   c                 óÎ   — d„ }t        j                  ddd¬«      }t        |d«      D ];  \  }}|||   v sŒ ||j                  |   d   |j                  |   d   «      dk  rŒ;J ‚ y)	r6   c                 ó:   — t        d„ t        | |«      D «       «      S )Nc              3   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­wr   r   r	   s      r   r   zDTestSoftRandomGeometricGraph.test_p.<locals>.dist.<locals>.<genexpr>a   ó   è ø€ Ò8¡d a¨”s˜1˜q™5—zÑ8ùr   r   r   s     r   r/   z1TestSoftRandomGeometricGraph.test_p.<locals>.dist`   ó   € ÜÑ8¬c°!°Q«iÔ8Ó8Ð8r   r   r   r7   r8   r,   r-   N)r!   rZ   r   r0   ©r&   r/   r'   r2   r3   s        r   r:   z#TestSoftRandomGeometricGraph.test_p\   ss   € ò	9ô ×*Ñ*¨2¨t°qÔ9ˆÜ   AÓ&ò 	J‰DˆAˆqà�A�a‘DŠyÙ˜AŸG™G A™J uÑ-¨q¯w©w°q©z¸%Ñ/@ÓAÀTÓIÐIÐIñ	Jr   c                 óB  — ddl }t        |j                  «      }t        j                  |d«      }t        |«      t        |«      k(  sJ ‚t        |d«      D ]H  \  }}|||   v sŒt        j                  |j                  |   d   |j                  |   d   «      dk  rŒHJ ‚ yr<   )
r>   r?   r@   r!   rZ   r#   r   r.   r/   r0   rA   s         r   rB   z,TestSoftRandomGeometricGraph.test_node_namesi   s—   € ãä�V×+Ñ+Ó,ˆÜ×*Ñ*¨5°$Ó7ˆÜ�1‹vœ˜U›Ò#Ð#Ð#ä   AÓ&ò 	O‰DˆAˆqà�A�a‘DŠyÜ—y‘y §¡¨¡¨EÑ!2°A·G±G¸A±J¸uÑ4EÓFÈ$ÓNÐNÐNñ	Or   c           
      ót  — d}d}t        |«      D ��ci c].  }|t        |«      D �cg c]  }t        j                  «       ‘Œ c}“Œ0 }}}t        j                  dd|¬«      }t        j                  dd|¬«      }t        |j                  «       «      t        |j                  «       «      k  sJ ‚yc c}w c c}}w )zwTests default p_dict = 0.5 returns graph with edge count <= RGG with
        same n, radius, dim and positions
        r   r,   r   )r-   N)r$   Úrandomr!   r"   rZ   r#   Úedges)r&   r0   Údimr3   Úir-   ÚRGGÚSRGGs           r   Útest_p_dist_defaultz0TestSoftRandomGeometricGraph.test_p_dist_defaultv   s“   € ð ˆØˆÜAFÀuÃ×N¸Aˆq¬E°#«JÖ7 q”6—=‘=•?Ò7Ñ7ÐNˆÑNÜ×'Ñ'¨¨D°cÔ:ˆÜ×-Ñ-¨b°$¸CÔ@ˆÜ�4—:‘:“<Ó ¤C¨¯	©	«Ó$4Ò4Ð4Ñ4ùò 8ùÓNs   “B4¦B/ÁB4Â/B4c                 ón   — d„ }t        j                  dd|¬«      }t        |j                  «      dk(  sJ ‚y)ú;Tests if p_dict = 0 returns disconnected graph with 0 edgesc                  ó   — y©Nr   rV   ©r/   s    r   Úp_distz=TestSoftRandomGeometricGraph.test_p_dist_zero.<locals>.p_dist„   ó   € Ør   r   r   ©rp   r   N)r!   rZ   r#   re   ©r&   rp   r'   s      r   Útest_p_dist_zeroz-TestSoftRandomGeometricGraph.test_p_dist_zero�   s3   € ò	ô ×*Ñ*¨2¨t¸FÔCˆÜ�1—7‘7‹|˜qÒ Ð Ñ r   c                 óŽ   — t        j                  dddd¬«      }t        d„ |j                  j	                  «       D «       «      sJ ‚y )Nr   r   r   rD   rE   c              3   óD   K  — | ]  \  }}t        |d    «      dk(  –— Œ y­wrH   rI   rJ   s      r   r   z=TestSoftRandomGeometricGraph.test_pos_name.<locals>.<genexpr>Œ   rM   rN   )r!   rZ   rO   r0   rP   r%   s     r   rQ   z*TestSoftRandomGeometricGraph.test_pos_nameŠ   s6   € Ü×*Ñ*¨2¨t¸"ÀxÔPˆÜÑE°Q·W±W·]±]³_ÔEÔEÐEÑEr   N)rR   rS   rT   rU   r(   r4   r:   rB   rj   rt   rQ   rV   r   r   rX   rX   G   s,   „ ÙFòò
OòJòOò	5ò!óFr   rX   c                 ó�   — | j                   |   | j                   |   }}|d   |d   }	}|d   |d   }}
|
|z    |||	«      |z  z  |k\  S )a~  Returns ``True`` if and only if the nodes whose attributes are
    ``du`` and ``dv`` should be joined, according to the threshold
    condition for geographical threshold graphs.

    ``G`` is an undirected NetworkX graph, and ``u`` and ``v`` are nodes
    in that graph. The nodes must have node attributes ``'pos'`` and
    ``'weight'``.

    ``metric`` is a distance metric.
    r-   Úweight)r0   )r'   r2   r3   ÚthetaÚalphaÚmetricÚduÚdvÚu_posÚv_posÚu_weightÚv_weights               r   Újoinr‚   �   s`   € ð �W‰W�Q‰Z˜Ÿ™ ™ˆ€BØ�e‘9˜b ™iˆ5€EØ˜H™ r¨(¡|ˆh€HØ�xÑ¡6¨%°Ó#7¸5Ñ#@Ñ@ÀEÑIÐIr   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestGeographicalThresholdGraphz=Unit tests for :func:`~networkx.geographical_threshold_graph`c                 ó¶   — t        j                  ddd¬«      }t        |«      dk(  sJ ‚t        j                  t        d«      dd¬«      }t        |«      dk(  sJ ‚y )Nr   éd   r   r   )r!   Úgeographical_threshold_graphr#   r$   r%   s     r   r(   z3TestGeographicalThresholdGraph.test_number_of_nodes£   sN   € Ü×+Ñ+¨B°¸"Ô=ˆÜ�1‹v˜Š|Ðˆ|Ü×+Ñ+¬E°"«I°sÀÔDˆÜ�1‹v˜Š|Ð‰|r   c           	      óè   — t        j                  dd«      }t        |d«      D ]M  \  }}|||   v r!t        |||ddt        j
                  «      rŒ,J ‚t        |||ddt        j
                  «      sŒMJ ‚ y)zoTests that pairs of vertices adjacent if and only if their
        distances meet the given threshold.
        r   é
   r,   éþÿÿÿN)r!   r‡   r   r‚   r.   r/   r1   s       r   r4   z-TestGeographicalThresholdGraph.test_distances©   su   € ô ×+Ñ+¨B°Ó3ˆÜ   AÓ&ò 	<‰DˆAˆqà�A�a‘D‰yÜ˜A˜q ! R¨¬T¯Y©YÕ7Ð7Ð7ô    1 a¨¨R´·±Õ;Ð;Ð;ñ	<r   c           	      óÌ   — t        j                  ddt        ¬«      }t        |d«      D ]9  \  }}|||   v rt	        |||ddt        «      rŒ"J ‚t	        |||ddt        «      sŒ9J ‚ y)r6   r   r‰   ©r{   r,   rŠ   N)r!   r‡   r   r   r‚   r1   s       r   Útest_metricz*TestGeographicalThresholdGraph.test_metric¸   so   € ô ×+Ñ+¨B°¼6ÔBˆÜ   AÓ&ò 	9‰DˆAˆqà�A�a‘D‰yÜ˜A˜q ! R¨¬VÕ4Ð4Ð4ô    1 a¨¨R´Õ8Ð8Ð8ñ	9r   c                 ón   — d„ }t        j                  dd|¬«      }t        |j                  «      dk(  sJ ‚y)rl   c                  ó   — yrn   rV   ro   s    r   rp   z?TestGeographicalThresholdGraph.test_p_dist_zero.<locals>.p_distÇ   rq   r   r   r7   rr   r   N)r!   r‡   r#   re   rs   s      r   rt   z/TestGeographicalThresholdGraph.test_p_dist_zeroÄ   s3   € ò	ô ×+Ñ+¨B°¸&ÔAˆÜ�1—7‘7‹|˜qÒ Ð Ñ r   c                 óî   — t         j                  } |ddddd¬«      }t        d„ |j                  j	                  «       D «       «      sJ ‚t        d„ |j                  j	                  «       D «       «      sJ ‚y )	Nr   r†   r   rD   Úwt©r    rF   Úweight_namec              3   óD   K  — | ]  \  }}t        |d    «      dk(  –— Œ y­wrH   rI   rJ   s      r   r   zFTestGeographicalThresholdGraph.test_pos_weight_name.<locals>.<genexpr>Ð   rM   rN   c              3   ó2   K  — | ]  \  }}|d    dkD  –— Œ y­w©r‘   r   NrV   rJ   s      r   r   zFTestGeographicalThresholdGraph.test_pos_weight_name.<locals>.<genexpr>Ñ   ó   è ø€ Ò;¡4 1 a�1�T‘7˜Q•;Ñ;ùó   ‚)r!   r‡   rO   r0   rP   )r&   Úgtgr'   s      r   Útest_pos_weight_namez3TestGeographicalThresholdGraph.test_pos_weight_nameÍ   s[   € Ü×-Ñ-ˆÙ��C˜b¨8ÀÔFˆÜÑE°Q·W±W·]±]³_ÔEÔEÐEÐEÜÑ;¨1¯7©7¯=©=«?Ô;Ô;Ð;Ñ;r   N)	rR   rS   rT   rU   r(   r4   r�   rt   rš   rV   r   r   r„   r„       s   „ ÙGòò<ò
9ò!ó<r   r„   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚTestWaxmanGraphz;Unit tests for the :func:`~networkx.waxman_graph` function.c                 óº   — t        j                  dddd¬«      }t        |«      dk(  sJ ‚t        j                  t        d«      ddd¬«      }t        |«      dk(  sJ ‚y )Nr   ç      à?çš™™™™™¹?r   r   ©r!   Úwaxman_graphr#   r$   r%   s     r   Útest_number_of_nodes_1z&TestWaxmanGraph.test_number_of_nodes_1×   sN   € Ü�O‰O˜B  S¨rÔ2ˆÜ�1‹v˜Š|Ðˆ|Ü�O‰OœE "›I s¨C°bÔ9ˆÜ�1‹v˜Š|Ð‰|r   c                 óº   — t        j                  dddd¬«      }t        |«      dk(  sJ ‚t        j                  t        d«      ddd¬«      }t        |«      dk(  sJ ‚y )Nr   rž   rŸ   r7   )ÚLr    r%   s     r   Útest_number_of_nodes_2z&TestWaxmanGraph.test_number_of_nodes_2Ý   sN   € Ü�O‰O˜B  S¨AÔ.ˆÜ�1‹v˜Š|Ðˆ|Ü�O‰OœE "›I s¨C°1Ô5ˆÜ�1‹v˜Š|Ð‰|r   c                 ó^   — t        j                  dddt        ¬«      }t        |«      dk(  sJ ‚y)r6   r   rž   rŸ   rŒ   N)r!   r¡   r   r#   r%   s     r   r�   zTestWaxmanGraph.test_metricã   s(   € ô �O‰O˜B  S´Ô8ˆÜ�1‹v˜Š|Ð‰|r   c                 ó�   — t        j                  ddddd¬«      }t        d„ |j                  j	                  «       D «       «      sJ ‚y )Nr   rž   rŸ   r   rD   rE   c              3   óD   K  — | ]  \  }}t        |d    «      dk(  –— Œ y­wrH   rI   rJ   s      r   r   z0TestWaxmanGraph.test_pos_name.<locals>.<genexpr>ë   rM   rN   )r!   r¡   rO   r0   rP   r%   s     r   rQ   zTestWaxmanGraph.test_pos_nameé   s6   € Ü�O‰O˜B  S¨r¸HÔEˆÜÑE°Q·W±W·]±]³_ÔEÔEÐEÑEr   N)rR   rS   rT   rU   r¢   r¥   r�   rQ   rV   r   r   rœ   rœ   Ô   s   „ ÙEòòòóFr   rœ   c                   ó~   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zej                  j                  d eddd	«      «      d
„ «       Zy)ÚTestNavigableSmallWorldGraphc                 ó  — t        j                  dddd¬«      }t        j                  dd«      j                  «       }t        j                  ||«      sJ ‚t        j                  dddd¬«      }t        j
                  g d¢«      j                  «       }t        j                  ||«      sJ ‚t        j                  dddd¬«      }t        j
                  dg«      j                  «       }t        j                  ||«      sJ ‚y )	Né   r7   r   r   )r9   Úqr    é   ©r9   r­   rf   )r¬   r¬   r¬   )r!   Únavigable_small_world_graphÚgrid_2d_graphÚto_directedÚis_isomorphicÚ
grid_graph)r&   r'   Úggs      r   Útest_navigable_small_worldz7TestNavigableSmallWorldGraph.test_navigable_small_worldï   sÑ   € Ü×*Ñ*¨1°°Q¸RÔ@ˆÜ×Ñ˜a Ó#×/Ñ/Ó1ˆÜ×Ñ  2Ô&Ð&Ð&ä×*Ñ*¨1°°Q¸AÔ>ˆÜ�]‰]š9Ó%×1Ñ1Ó3ˆÜ×Ñ  2Ô&Ð&Ð&ä×*Ñ*¨1°°Q¸AÔ>ˆÜ�]‰]˜A˜3Ó×+Ñ+Ó-ˆÜ×Ñ  2Ô&Ð&Ñ&r   c                 óª   — t        j                  t        j                  d¬«      5  t        j                  dddd¬«       d d d «       y # 1 sw Y   y xY w)Nz.*p must be >= 1©Úmatchr¬   r   r7   r¯   ©ÚpytestÚraisesr!   ÚNetworkXExceptionr°   ©r&   s    r   Útest_invalid_diameter_valuez8TestNavigableSmallWorldGraph.test_invalid_diameter_valueü   s@   € Ü�]‰]œ2×/Ñ/Ð7IÔJñ 	?Ü×*Ñ*¨1°°Q¸AÕ>÷	?÷ 	?ñ 	?úó   ¦A	Á	Ac                 óª   — t        j                  t        j                  d¬«      5  t        j                  dddd¬«       d d d «       y # 1 sw Y   y xY w)Nz.*q must be >= 0r¸   r¬   r7   éÿÿÿÿr¯   rº   r¾   s    r   Ú)test_invalid_long_range_connections_valuezFTestNavigableSmallWorldGraph.test_invalid_long_range_connections_value   sD   € Ü�]‰]œ2×/Ñ/Ð7IÔJñ 	@Ü×*Ñ*¨1°°R¸QÕ?÷	@÷ 	@ñ 	@úrÀ   c                 ó¬   — t        j                  t        j                  d¬«      5  t        j                  ddddd¬«       d d d «       y # 1 sw Y   y xY w)Nz.*r must be >= 0r¸   r¬   r7   r   rÂ   )r9   r­   Úrrf   rº   r¾   s    r   Ú4test_invalid_exponent_for_decaying_probability_valuezQTestNavigableSmallWorldGraph.test_invalid_exponent_for_decaying_probability_value  sF   € Ü�]‰]œ2×/Ñ/Ð7IÔJñ 	EÜ×*Ñ*¨1°°Q¸"À!ÕD÷	E÷ 	Eñ 	Eúó   ¦A
Á
Ac                 óÊ   — t        j                  dddddd¬«      }t        j                  ddt         j                  ¬«      }t         j                  j                  ||«      sJ ‚y	)
z%Smoke test for radius in range [0, 1]r®   r7   r   rž   r,   r   )r9   r­   rÅ   rf   r    )Úcreate_usingN)r!   r°   r±   ÚDiGraphÚutilsÚgraphs_equal)r&   r'   Úexpecteds      r   Útest_r_between_0_and_1z3TestNavigableSmallWorldGraph.test_r_between_0_and_1  sP   € ô ×*Ñ*¨1°°Q¸#À1È2ÔNˆÜ×#Ñ# A q´r·z±zÔBˆÜ�x‰x×$Ñ$ Q¨Ô1Ð1Ñ1r   r    i®	  i
  r‰   c                 ó&  — t        j                  ddd|¬«      }t        j                  ddd|¬«      }t        j                  ddd|¬«      }|j                  «       |j                  «       kD  sJ ‚|j                  «       |j                  «       kD  sJ ‚y)aG  The probability of adding a long-range edge scales with `1 / dist**r`,
        so a navigable_small_world graph created with r < 1 should generally
        result in more edges than a navigable_small_world graph with r >= 1
        (for 0 < q << n).

        N.B. this is probabilistic, so this test may not hold for all seeds.é   r®   rž   )r­   rÅ   r    r7   r,   N)r!   r°   Únumber_of_edges)r&   r    ÚG1ÚG2ÚG3s        r   Útest_r_general_scalingz3TestNavigableSmallWorldGraph.test_r_general_scaling  s†   € ô ×+Ñ+¨A°°cÀÔEˆÜ×+Ñ+¨A°°a¸dÔCˆÜ×+Ñ+¨A°°a¸dÔCˆØ×!Ñ!Ó# b×&8Ñ&8Ó&:Ò:Ð:Ð:Ø×!Ñ!Ó# b×&8Ñ&8Ó&:Ò:Ð:Ñ:r   N)rR   rS   rT   r¶   r¿   rÃ   rÆ   rÎ   r»   ÚmarkÚparametrizer$   rÕ   rV   r   r   rª   rª   î   sK   „ ò'ò?ò@òEò2ð ‡[�[×Ñ˜V¡U¨4°°rÓ%:Ó;ñ;ó <ñ;r   rª   c                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	Ú#TestThresholdedRandomGeometricGraphzCUnit tests for :func:`~networkx.thresholded_random_geometric_graph`c                 óº   — t        j                  dddd¬«      }t        |«      dk(  sJ ‚t        j                  t        d«      ddd¬«      }t        |«      dk(  sJ ‚y )Nr   gš™™™™™É?rŸ   r   r   )r!   Ú"thresholded_random_geometric_graphr#   r$   r%   s     r   r(   z8TestThresholdedRandomGeometricGraph.test_number_of_nodes!  sR   € Ü×1Ñ1°"°c¸3ÀRÔHˆÜ�1‹v˜Š|Ðˆ|Ü×1Ñ1´%¸³)¸SÀ#ÈBÔOˆÜ�1‹v˜Š|Ð‰|r   c                 óä   — t        j                  dddd¬«      }t        |d«      D ]H  \  }}|||   v sŒt        j                  |j
                  |   d   |j
                  |   d   «      dk  rŒHJ ‚ y)	r+   r   r   rŸ   r   r   r,   r-   N)r!   rÛ   r   r.   r/   r0   r1   s       r   r4   z2TestThresholdedRandomGeometricGraph.test_distances'  st   € ô ×1Ñ1°"°d¸CÀbÔIˆÜ   AÓ&ò 	O‰DˆAˆqà�A�a‘DŠyÜ—y‘y §¡¨¡¨EÑ!2°A·G±G¸A±J¸uÑ4EÓFÈ$ÓNÐNÐNñ	Or   c                 óÒ   — d„ }t        j                  ddddd¬«      }t        |d«      D ];  \  }}|||   v sŒ ||j                  |   d	   |j                  |   d	   «      dk  rŒ;J ‚ y
)r6   c                 ó:   — t        d„ t        | |«      D «       «      S )Nc              3   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­wr   r   r	   s      r   r   zKTestThresholdedRandomGeometricGraph.test_p.<locals>.dist.<locals>.<genexpr>8  r_   r   r   r   s     r   r/   z8TestThresholdedRandomGeometricGraph.test_p.<locals>.dist7  r`   r   r   r   rŸ   r7   r   )r9   r    r,   r-   N©r!   rÛ   r   r0   ra   s        r   r:   z*TestThresholdedRandomGeometricGraph.test_p3  sw   € ò	9ô ×1Ñ1°"°d¸CÀ1È2ÔNˆÜ   AÓ&ò 	J‰DˆAˆqà�A�a‘DŠyÙ˜AŸG™G A™J uÑ-¨q¯w©w°q©z¸%Ñ/@ÓAÀTÓIÐIÐIñ	Jr   c                 óH  — ddl }t        |j                  «      }t        j                  |ddd¬«      }t        |«      t        |«      k(  sJ ‚t        |d«      D ]H  \  }}|||   v sŒt        j                  |j                  |   d   |j                  |   d   «      dk  rŒHJ ‚ y)	r=   r   Nr   rŸ   r   r   r,   r-   )
r>   r?   r@   r!   rÛ   r#   r   r.   r/   r0   rA   s         r   rB   z3TestThresholdedRandomGeometricGraph.test_node_names@  s›   € ãä�V×+Ñ+Ó,ˆÜ×1Ñ1°%¸¸sÈÔLˆÜ�1‹vœ˜U›Ò#Ð#Ð#ä   AÓ&ò 	O‰DˆAˆqà�A�a‘DŠyÜ—y‘y §¡¨¡¨EÑ!2°A·G±G¸A±J¸uÑ4EÓFÈ$ÓNÐNÐNñ	Or   c                 óÂ   — t        j                  dddd¬«      }t        |d«      D ]7  \  }}|||   v sŒ|j                  |   d   |j                  |   d   z   dk\  rŒ7J ‚ y)	z~Tests that pairs of vertices adjacent if and only if their sum
        weights exceeds the threshold parameter theta.
        r   r   rŸ   r   r   r,   rx   Nrà   r1   s       r   Ú
test_thetaz.TestThresholdedRandomGeometricGraph.test_thetaM  sn   € ô ×1Ñ1°"°d¸CÀbÔIˆä   AÓ&ò 	L‰DˆAˆqà�A�a‘DŠyØŸ™ ™
 8Ñ,¨q¯w©w°q©z¸(Ñ/CÑCÈÓKÐKÐKñ	Lr   c                 óð   — t         j                  } |dddddd¬«      }t        d„ |j                  j	                  «       D «       «      sJ ‚t        d	„ |j                  j	                  «       D «       «      sJ ‚y )
Nr   r   rŸ   r   r9   r‘   r’   c              3   óD   K  — | ]  \  }}t        |d    «      dk(  –— Œ y­w)r9   r,   NrI   rJ   s      r   r   zDTestThresholdedRandomGeometricGraph.test_pos_name.<locals>.<genexpr>[  s!   è ø€ Ò@©¨¨1”3�q˜‘v“; !Õ#Ñ@ùrN   c              3   ó2   K  — | ]  \  }}|d    dkD  –— Œ y­wr–   rV   rJ   s      r   r   zDTestThresholdedRandomGeometricGraph.test_pos_name.<locals>.<genexpr>\  r—   r˜   )r!   rÛ   rO   r0   rP   )r&   Útrggr'   s      r   rQ   z1TestThresholdedRandomGeometricGraph.test_pos_nameX  s]   € Ü×4Ñ4ˆÙ��T˜3 R°#À4ÔHˆÜÑ@°·±·±³Ô@Ô@Ð@Ð@ÜÑ;¨1¯7©7¯=©=«?Ô;Ô;Ð;Ñ;r   N)
rR   rS   rT   rU   r(   r4   r:   rB   rã   rQ   rV   r   r   rÙ   rÙ     s'   „ ÙMòò
OòJòOò	Ló<r   rÙ   c                  ó®   — t        j                  «       } | j                  dddifdddifdddifg«       ddg}|t        j                  | dd¬	«      k(  sJ ‚y )
Nr   Úposition)r   r   r7   )r   r7   r,   )r7   r   )r   r,   )ÚradiusrF   )r!   ÚGraphÚadd_nodes_fromÚgeometric_edges)r'   Úexpected_edgess     r   Ú"test_geometric_edges_pos_attributerï   _  sp   € Ü
�‰‹
€AØ×Ñà�˜VÐ$Ð%Ø�˜VÐ$Ð%Ø�˜VÐ$Ð%ð	
ôð ˜fÐ%€NØœR×/Ñ/°¸!ÀjÔQÒQÐQÑQr   c                  óÔ   — t        j                  d«      } d}t        j                  t         j                  |¬«      5  t        j
                  | d¬«       d d d «       y # 1 sw Y   y xY w)Nr®   zall nodes. must have a 'r¸   r7   )rê   )r!   Ú
path_graphr»   r¼   ÚNetworkXErrorrí   )r'   Úmsgs     r   Ú"test_geometric_edges_raises_no_posrô   l  sN   € Ü
�‰�aÓ€AØ
$€CÜ	�‰”r×'Ñ'¨sÔ	3ñ (Ü
×Ñ˜1 QÕ'÷(÷ (ñ (ús   ½AÁA'c                  óX   — t        j                  ddddd¬«      } t        | «      dk(  sJ ‚y )Nç      ø?r†   çš™™™™™@r‰   r   ©ÚbetarK   ÚgammaÚmean_degreer    )r!   Ú"geometric_soft_configuration_graphr#   ©r'   s    r   Útest_number_of_nodes_S1rþ   s  s/   € Ü
×-Ñ-Ø�C˜s°¸ô	€Aô ˆq‹6�SŠ=Ð‰=r   c                  ó  — t        j                  ddddd¬«      } t        j                  | d«      }t        |«      dk(  sJ ‚t        j                  | d«      }t        |«      dk(  sJ ‚t        j                  | d	«      }t        |«      dk(  sJ ‚y )
Nrö   r†   r÷   r‰   r   rø   Úkappary   rê   )r!   rü   Úget_node_attributesr#   )r'   ÚkappasÚthetasÚradiis       r   Útest_set_attributes_S1r  z  s‹   € Ü
×-Ñ-Ø�C˜s°¸ô	€Aô ×#Ñ# A wÓ/€FÜˆv‹;˜#ÒÐÐÜ×#Ñ# A wÓ/€FÜˆv‹;˜#ÒÐÐÜ×"Ñ" 1 hÓ/€EÜˆu‹:˜ÒÐÑr   c                  óž  — t        j                  ddddd¬«      } t        j                  | d«      }t        |j	                  «       «      t        |«      z  }t        j                  |dz
  «      dk  sJ ‚t        | j                  «       «      }t        |j	                  «       «      t        |«      z  }t        j                  |dz
  «      d	k  sJ ‚y )
Ng      @r   r÷   r‰   iW  rø   r   rž   r7   )
r!   rü   r  r   Úvaluesr#   r.   ÚfabsÚdictÚdegree)r'   r  Úmean_kappasÚdegreesrû   s        r   Útest_mean_kappas_mean_degree_S1r  †  s¬   € Ü
×-Ñ-Ø�B˜c¨r¸ô	€Aô ×#Ñ# A wÓ/€FÜ�f—m‘m“oÓ&¬¨V«Ñ4€KÜ�9‰9�[ 2Ñ%Ó&¨Ò,Ð,Ð,ä�1—8‘8“:Ó€GÜ�g—n‘nÓ&Ó'¬#¨g«,Ñ6€KÜ�9‰9�[ 2Ñ%Ó&¨Ò*Ð*Ñ*r   c                  óþ   — t        d«      D � ci c]  } | d“Œ }} t        j                  d|¬«      }t        |«      dk(  sJ ‚t        j                  |d«      }t        d„ |j                  «       D «       «      sJ ‚y c c} w )Néè  r‰   r7   )rù   r  r   c              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)r‰   NrV   )r
   r   s     r   r   z&test_dict_kappas_S1.<locals>.<genexpr>™  s   è ø€ Ò8˜uˆu˜�{Ñ8ùs   ‚)r$   r!   rü   r#   r  rO   r  )rg   r  r'   s      r   Útest_dict_kappas_S1r  ”  sp   € Ü" 4›[Ö)˜ˆa�‰eÐ)€FÐ)Ü
×-Ñ-°1¸VÔD€AÜˆq‹6�TŠ>Ðˆ>Ü×#Ñ# A wÓ/€FÜÑ8¨¯©«Ô8Ô8Ð8Ñ8ùò	 *s   Ž
A:c                  óÆ   — t        j                  ddddd¬«      } t        j                  ddddd¬«      }t        j                  | «      t        j                  |«      k  sJ ‚y )Nrö   r†   ç      @r‰   r   rø   g      @©r!   rü   Úaverage_clustering)rÒ   rÓ   s     r   Útest_beta_clustering_S1r  œ  s`   € Ü	×	.Ñ	.Ø�C˜s°¸ô
€Bô 
×	.Ñ	.Ø�C˜s°¸ô
€Bô × Ñ  Ó$¤r×'<Ñ'<¸RÓ'@Ò@Ð@Ñ@r   c                  ó.  — t        j                  t        j                  d¬«      5  t        j                  dddd¬«      } d d d «       t        j                  t        j                  d¬«      5  t        d	«      D �ci c]  }|d“Œ }}t        j                  d|d
d¬«      } d d d «       t        j                  t        j                  d¬«      5  t        j                  dd¬«      } d d d «       y # 1 sw Y   Œ¯xY wc c}w # 1 sw Y   Œ`xY w# 1 sw Y   y xY w)NzDPlease provide either kappas, or all 3 of: n, gamma and mean_degree.r¸   rö   r  r‰   r   )rù   rú   rû   r    z;When kappas is input, n, gamma and mean_degree must not be.r  çffffff@)rù   r  rú   r    )rù   r    )r»   r¼   r!   rò   rü   r$   )r'   rg   r  s      r   Útest_wrong_parameters_S1r  ¦  s   € Ü	�‰Ü
×ÑØTô
ñ 
ô ×1Ñ1Ø˜C¨R°bô
ˆ÷	
ô 
�‰Ü
×ÑØKô
ñ 
ô "' t£Ö-˜A�!�R‘%Ð-ˆÐ-Ü×1Ñ1Ø˜V¨3°Rô
ˆ÷
ô 
�‰Ü
×ÑØTô
ñ Eô ×1Ñ1°sÀÔDˆ÷	Eð E÷#
ð 
üò .÷	
ð 
ú÷Eð Eús5   ¦C.Á-C?Á;
C:ÂC?ÃDÃ.C7Ã:C?Ã?DÄDc                  ó¬   — t        j                  t        j                  d¬«      5  t        j                  ddddd¬«      } d d d «       y # 1 sw Y   y xY w)	Nz3The parameter beta cannot be smaller or equal to 0.r¸   rÂ   r†   r  r‰   r   rø   )r»   r¼   r!   rò   rü   rý   s    r   Útest_negative_beta_S1r  ¿  sL   € Ü	�‰Ü
×ÑÐ Uô
ñ 
ô ×1Ñ1Ø�s #°2¸Bô
ˆ÷
÷ 
ñ 
úrÇ   c                  ól   — t        j                  ddddd¬«      } t        j                  | «      dkD  sJ ‚y )Nrž   r†   r  r‰   r   rø   r   r  rý   s    r   Ú*test_non_zero_clustering_beta_lower_one_S1r  È  s8   € Ü
×-Ñ-Ø�C˜s°¸ô	€Aô × Ñ  Ó# aÒ'Ð'Ñ'r   c                  óÎ   — d} d}t        j                  ddd| d¬«      }t        j                  ddd|d¬«      }t        j                  |«      t        j                  |«      kD  sJ ‚y )Nr,   é   g333333ó?r†   r÷   r   rø   )r!   rü   Únumber_connected_components)Úlow_mean_degreeÚhigh_mean_degreeÚG_lowÚG_highs       r   Ú-test_mean_degree_influence_on_connectivity_S1r%  Ï  su   € Ø€OØÐÜ×1Ñ1Ø�C˜s°Àbô€Eô ×2Ñ2Ø�C˜sÐ0@Àrô€Fô ×)Ñ)¨%Ó0´2×3QÑ3QØó4ò ð ñ r   c                  ó’  — t        j                  ddddd¬«      } t        j                  ddddd¬«      }t        j                  | d«      }t        |j	                  «       «      t        |«      z  }t        j                  |d«      }t        |j	                  «       «      t        |«      z  }t        j                  ||z
  «      d	k  sJ ‚y )
Nrö   r  r÷   r¬   r   rø   r  r   r7   )r!   rü   r  r   r  r#   r.   r  )rÒ   rÓ   Úkappas1Úmean_kappas1Úkappas2Úmean_kappas2s         r   Ú,test_compare_mean_kappas_different_gammas_S1r+  Ý  s°   € Ü	×	.Ñ	.Ø�B˜c¨q°rô
€Bô 
×	.Ñ	.Ø�B˜c¨q°rô
€Bô ×$Ñ$ R¨Ó1€GÜ�w—~‘~Ó'Ó(¬3¨w«<Ñ7€LÜ×$Ñ$ R¨Ó1€GÜ�w—~‘~Ó'Ó(¬3¨w«<Ñ7€LÜ�9‰9�\ LÑ0Ó1°AÒ5Ð5Ñ5r   )r.   rd   Ú	itertoolsr   r»   Únetworkxr!   r   r   rX   r‚   r„   rœ   rª   rÙ   rï   rô   rþ   r  r  r  r  r  r  r  r%  r+  rV   r   r   ú<module>r.     s§   ðÛ Û Ý "ã ã ò1÷6Fñ 6F÷rEFñ EFòPJ÷"1<ñ 1<÷hFñ F÷4-;ñ -;÷`><ñ ><òB
Rò(òò	ò+ò9òAòEò2
ò(òó6r   