
    Vh                     ~   d Z ddlZddlZddlZddlmZ  G d d      Z G d de      Zej                  j                  dej                  ej                  f      ej                  j                  d	ddgf      d
               Zej                  j                  dej                  ej                  f      ej                  j                  d	ddgf      d               Zej                  j                  dej                  ej                  f      d        Zej                  j                  dej                  ej                  f      d        Zej                  j                  dej                  ej                  f      d        Zej                  j                  dej                  ej                  f      d        Zy)zEUnit tests for the :mod:`networkx.algorithms.structuralholes` module.    N)dispatch_interfacec                   ^    e 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d Zd Zd Zy)TestStructuralHolesNoScipya  Unit tests for computing measures of structural holes.

    The expected values for these functions were originally computed using the
    proprietary software `UCINET`_ and the free software `IGraph`_ , and then
    computed by hand to make sure that the results are correct.

    .. _UCINET: https://sites.google.com/site/ucinetsoftware/home
    .. _IGraph: http://igraph.org/

    c                    t        j                         | _        | j                  j                  g d       ddddd| _        t        j
                         | _        | j                  j                  g d       dddddddddd	d
| _        t        | j                        | _	        t        | j                        | _
        y )
N))r      )r      )r   r   )r   r   r   r   )
)AB)r	   F)r	   G)r	   E)r   r   )r   r   )r
   r   )r
   D)r   r   )r   C            
   )nxDiGraphr   add_edges_from	D_weightsGraphr   	G_weightslistDnodesGnodes)selfs    ^/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/tests/test_structuralholes.pysetup_methodz'TestStructuralHolesNoScipy.setup_method   s    >?"#Q1E	
 
 466l466l    c                    t        j                  | j                  | j                        }|d   t	        j
                  dd      k(  sJ |d   t	        j
                  dd      k(  sJ |d   t	        j
                  dd      k(  sJ y )	Nnodesr   g?5^I?MbP?absr   r   gMbX9?)r   
constraintr   r   pytestapproxr   r(   s     r   test_constraint_directedz3TestStructuralHolesNoScipy.test_constraint_directed:   sq    ]]466=
!}e >>>>!}e >>>>!}e >>>>r!   c                    t        j                  | j                  | j                        }|d   t	        j
                  dd      k(  sJ |d   t	        j
                  dd      k(  sJ |d   t	        j
                  dd      k(  sJ y )Nr#   r   gy&1?r%   r&   r   r   )r   effective_sizer   r   r)   r*   r   r.   s     r   test_effective_size_directedz7TestStructuralHolesNoScipy.test_effective_size_directed@   sv    **466Ea FMM%T$BBBBa FMM%T$BBBBa FMM!$>>>>r!   c                 x   | j                   j                         }t        j                  || j                  d       t        j
                  |d| j                        }|d   t        j                  dd      k(  sJ |d   t        j                  dd      k(  sJ |d	   t        j                  d
d      k(  sJ y )Nweightr2   r$   r   gzG?r%   r&   r   g}?5^I?r   g?5^I?)	r   copyr   set_edge_attributesr   r(   r   r)   r*   )r   r   r(   s      r   !test_constraint_weighted_directedz<TestStructuralHolesNoScipy.test_constraint_weighted_directedF   s    FFKKM
q$..(;]]1XT[[I
!}e >>>>!}e >>>>!}e >>>>r!   c                 x   | j                   j                         }t        j                  || j                  d       t        j
                  |d| j                        }|d   t        j                  dd      k(  sJ |d   t        j                  dd      k(  sJ |d	   t        j                  dd      k(  sJ y )
Nr2   r3   r   gOn?r%   r&   r   gS?r   )	r   r4   r   r5   r   r.   r   r)   r*   )r   r   r.   s      r   %test_effective_size_weighted_directedz@TestStructuralHolesNoScipy.test_effective_size_weighted_directedN   s    FFKKM
q$..(;**1XT[[Qa FMM%T$BBBBa FMM%T$BBBBa FMM!$>>>>r!   c                    t        j                  | j                  | j                        }|d   t	        j
                  dd      k(  sJ |d   t	        j
                  dd      k(  sJ |d   t	        j
                  d	d      k(  sJ y )
Nr#   r   g?r%   r&   r	   g
ףp=
?r   r   )r   r(   r   r   r)   r*   r+   s     r   test_constraint_undirectedz5TestStructuralHolesNoScipy.test_constraint_undirectedV   sq    ]]466=
#&--4"@@@@#&--4"@@@@#&--t"<<<<r!   c                    t        j                  | j                  | j                        }|d   t	        j
                  dd      k(  sJ |d   t	        j
                  dd      k(  sJ |d   t	        j
                  d	d      k(  sJ y )
Nr#   r   Gz@{Gz?r&   r	         @r   r   )r   r.   r   r   r)   r*   r/   s     r   'test_effective_size_undirected_borgattizBTestStructuralHolesNoScipy.test_effective_size_undirected_borgatti\   sv    **466Ec"fmmDd&CCCCc"fmmDd&CCCCc"fmmA4&@@@@r!   c                 d   | j                   j                         }t        j                  |dd       t        j                  |d| j
                        }|d   t        j                  dd      k(  sJ |d   t        j                  d	d      k(  sJ |d
   t        j                  dd      k(  sJ y )Nr   r2   r3   r   r<   r=   r&   r	   r>   r   )r   r4   r   r5   r.   r   r)   r*   r   r   r.   s      r   test_effective_size_undirectedz9TestStructuralHolesNoScipy.test_effective_size_undirectedb   s    FFKKM
q!X.**1XT[[Qc"fmmDd&CCCCc"fmmDd&CCCCc"fmmA4&@@@@r!   c                 x   | j                   j                         }t        j                  || j                  d       t        j
                  |d| j                        }|d   t        j                  dd      k(  sJ |d   t        j                  dd      k(  sJ |d	   t        j                  d
d      k(  sJ y )Nr2   r3   r   gA`"?r%   r&   r	   gq=
ףp?r   r   )	r   r4   r   r5   r   r(   r   r)   r*   r   r   r(   s      r   #test_constraint_weighted_undirectedz>TestStructuralHolesNoScipy.test_constraint_weighted_undirectedj   s    FFKKM
q$..(;]]1XT[[I
#&--4"@@@@#&--4"@@@@#&--t"<<<<r!   c                 x   | j                   j                         }t        j                  || j                  d       t        j
                  |d| j                        }|d   t        j                  dd      k(  sJ |d   t        j                  dd      k(  sJ |d	   t        j                  d
d      k(  sJ y )Nr2   r3   r   gzG@r=   r&   r	   g(\@r   r   )	r   r4   r   r5   r   r.   r   r)   r*   rA   s      r   'test_effective_size_weighted_undirectedzBTestStructuralHolesNoScipy.test_effective_size_weighted_undirectedr   s    FFKKM
q$..(;**1XT[[Qc"fmmDd&CCCCc"fmmDd&CCCCc"fmmA4&@@@@r!   c                     | j                   j                         }|j                  d       t        j                  || j
                  dgz         }t        j                  |d         sJ y Nr   r#   )r   r4   add_noder   r(   r   mathisnanrD   s      r   test_constraint_isolatedz3TestStructuralHolesNoScipy.test_constraint_isolatedz   sM    FFKKM	

1]]1DKK1#,=>
zz*Q-(((r!   c                    | j                   j                         }|j                  d       t        j                  || j
                  d       t        j                  |d| j                  dgz         }t        j                  |d         sJ y )Nr   r2   r3   )
r   r4   rJ   r   r5   r   r.   r   rK   rL   rA   s      r   test_effective_size_isolatedz7TestStructuralHolesNoScipy.test_effective_size_isolated   sj    FFKKM	

1
q$..(;**1XT[[TUSVEVWzz.+,,,r!   c                     | j                   j                         }|j                  d       t        j                  || j
                  dgz         }t        j                  |d         sJ y rI   )r   r4   rJ   r   r.   r   rK   rL   rA   s      r   %test_effective_size_borgatti_isolatedz@TestStructuralHolesNoScipy.test_effective_size_borgatti_isolated   sP    FFKKM	

1**1DKK1#4EFzz.+,,,r!   N)__name__
__module____qualname____doc__r    r,   r0   r6   r8   r:   r?   rB   rE   rG   rM   rO   rQ    r!   r   r   r      sL    	!#F????=AA=A)--r!   r   c                   8    e Zd Z ej                  d       dZdZy)TestStructuralHolesscipyN)rR   rS   rT   r)   importorskipr   r   rV   r!   r   rX   rX      s    F FFr!   rX   graphr$   c                 t     | dg      }t        j                  t        j                  ||      d         sJ y)EBehavior consistent with isolated node without self-loop. See gh-6916r   r   r#   r   N)rK   rL   r   r.   r[   r$   r   s      r   /test_effective_size_isolated_node_with_selfloopr`      s3     	vhA::b''7:;;;r!   c                      |        }|j                  dg       t        j                  t        j                  ||      d         sJ y)Weighted self-loop. See gh-6916r   r   r   r#   r   N)add_weighted_edges_fromrK   rL   r   r.   r_   s      r   8test_effective_size_isolated_node_with_selfloop_weightedre      s?     	Azl+::b''7:;;;r!   c                 p     | dg      }t        j                  t        j                  |      d         sJ y)r]   r^   r   N)rK   rL   r   r(   r[   r   s     r   +test_constraint_isolated_node_with_selflooprh      s/     	vhA::bmmA&q)***r!   c                 V     | dg      }t        j                  |dg      d   dk(  sJ y)r]   r^   r   r#   r   N)r   r(   rg   s     r   =test_constraint_isolated_node_with_selfloop_using_nodes_kwargrj      s/     	vhA==1#&q)Q...r!   c                      |        }|j                  dg       t        j                  t        j                  |      d         sJ y)rb   rc   r   N)rd   rK   rL   r   r(   rg   s     r   4test_constraint_isolated_node_with_selfloop_weightedrl      s;     	Azl+::bmmA&q)***r!   c                 v     |        }|j                  dg       t        j                  |dg      d   dk(  sJ y )Nrc   r   r#   r   )rd   r   r(   rg   s     r   Ftest_constraint_isolated_node_with_selfloop_weighted_using_nodes_kwargrn      s9    Azl+==1#&q)Q...r!   )rU   rK   r)   networkxr   networkx.classes.testsr   r   rX   markparametrizer   r   r`   re   rh   rj   rl   rn   rV   r!   r   <module>rs      s   K    5@- @-F4  288RZZ"894!+.< / :< 288RZZ"894!+.< / :< 288RZZ"89+ :+ 288RZZ"89/ :/ 288RZZ"89+ :+ 288RZZ"89/ :/r!   