U
    ?h,                     @   s   d Z ddlZddlZddlmZmZ ddlmZm	Z	m
Z
mZmZmZ G dd dZdd Zd	d
 Zdd Zejde edgfdd ZG dd dZG dd dZdS )z:Generators - Directed Graphs
----------------------------
    N)GraphMultiDiGraph)gn_graph	gnc_graph	gnr_graphrandom_k_out_graphrandom_uniform_k_out_graphscale_free_graphc                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestGeneratorsDirectedc                 C   sX   t d tdd td td t ddd tdddd tddd tddd d S )Nd         ?*   seed)r   r   r   r	   self r   Y/var/www/html/venv/lib/python3.8/site-packages/networkx/generators/tests/test_directed.pytest_smoke_test_random_graphs   s    
z4TestGeneratorsDirected.test_smoke_test_random_graphsc                 C   sx  t jtjtdt d t jtjtddt d t jtjtdt d t jtjtdt d tddd}tdt	 dd}t
| t
| ksttdddd}tddt	 dd}t
| t
| ksttddd}tdt	 dd}t
| t
| ksttdddddd	tjd
t	ddd}t ttdddd t jttddd t jttddd t jttddd d S )Nr   )create_usingr      r   )r   r   g333333?g?g?   )alphabetagammadelta_in	delta_outinitial_graphr   g333333ӿ)r   )r   )r   )pytestraisesnxNetworkXErrorr   r   r   r   r	   r   sortededgesAssertionErrorZcycle_graph
ValueError)r   GZMGr   r   r   #test_create_using_keyword_arguments   s6    
z:TestGeneratorsDirected.test_create_using_keyword_argumentsc                 C   st   t  }|d dd }t td|s.tt td|d|sFtt td|sZtt tdd|sptd S )Nr   c                 S   s   | S Nr   )xr   r   r   kernel@   s    z6TestGeneratorsDirected.test_parameters.<locals>.kernelr   )r*   r   )r    DiGraphadd_nodeZis_isomorphicr   r$   r   r   )r   r&   r*   r   r   r   test_parameters<   s    
z&TestGeneratorsDirected.test_parametersN)__name__
__module____qualname__r   r'   r-   r   r   r   r   r
      s   r
   c               	   C   s6   t  } tjtdd tdt j| d W 5 Q R X d S )NzFCannot set both create_using and initial_graph. Set create_using=None.match
   )r   r   )r    Z
MultiGraphr   r   r%   r	   r   )r&   r   r   r   5test_scale_free_graph_create_using_with_initial_graphI   s    r4   c                	   C   sT   t jtdd tdd dd W 5 Q R X t jtdd tdd dd W 5 Q R X d S )Nzdelta_in must be >= 0.r1   r3   )r   r   zdelta_out must be >= 0.)r   r   )r   r   r%   r	   r   r   r   r   $test_scale_free_graph_negative_deltaR   s    r6   c                  C   s@   t dddg} td| d}t|dks*tt|jdks<td S )N)ab)r8   c)r9   r7      r   )r   r	   lenr$   r#   )r&   sr   r   r   test_non_numeric_orderingY   s    r>   ig)r   r   c              	   C   s(   t tj td| d W 5 Q R X d S )Nr   r;   )r   r   r    r!   r	   )r?   r   r   r   )test_scale_free_graph_initial_graph_kwarg`   s    r@   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestRandomKOutGraphz_Unit tests for the
    :func:`~networkx.generators.directed.random_k_out_graph` function.

    c                    sh   d}d d}t | |}t fdd| D s6tt | |dd}t fdd| D sdtd	S )
2Tests that the generated graph is `k`-out-regular.r3   r:   r   c                 3   s   | ]\}}| kV  qd S r(   r   .0vdkr   r   	<genexpr>r   s     z6TestRandomKOutGraph.test_regularity.<locals>.<genexpr>r   r   c                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI   t   s     N)r   all
out_degreer$   )r   nr   r&   r   rG   r   test_regularityl   s    z#TestRandomKOutGraph.test_regularityc                 C   s2   d}d}d}t |||dd}t|dks.tdS ) Tests for forbidding self-loops.r3   r:   r   F
self_loopsr   N)r   r    number_of_selfloopsr$   )r   rL   rH   r   r&   r   r   r   test_no_self_loopsv   s
    z&TestRandomKOutGraph.test_no_self_loopsc              	   C   s*   t jtdd tddd W 5 Q R X d S )Nzalpha must be positiver1   r3   r:   r5   )r   r   r%   r   r   r   r   r   test_negative_alpha~   s    z'TestRandomKOutGraph.test_negative_alphaN)r.   r/   r0   __doc__rM   rR   rS   r   r   r   r   rA   f   s   
rA   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestUniformRandomKOutGraphzkUnit tests for the
    :func:`~networkx.generators.directed.random_uniform_k_out_graph`
    function.

    c                    s`   d}d t | }t fdd| D s0tt | dd}t fdd| D s\tdS )	rB   r3   r:   c                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI      s     z=TestUniformRandomKOutGraph.test_regularity.<locals>.<genexpr>r   r   c                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI      s     N)r   rJ   rK   r$   r   rL   r&   r   rG   r   rM      s    
z*TestUniformRandomKOutGraph.test_regularityc                    sJ   d}d t | dd}t|dks(tt fdd| D sFtdS )	rN   r3   r:   FrO   r   c                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI      s     z@TestUniformRandomKOutGraph.test_no_self_loops.<locals>.<genexpr>N)r   r    rQ   r$   rJ   rK   rV   r   rG   r   rR      s
    z-TestUniformRandomKOutGraph.test_no_self_loopsc                    s   d}d t | dd}| s"tt fdd| D s@td}d t | ddd	}t|d
ksjtt fdd| D std S )Nr3   r:   Twith_replacementc                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI      s     zCTestUniformRandomKOutGraph.test_with_replacement.<locals>.<genexpr>	   F)rX   rP   r   c                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI      s     )r   is_multigraphr$   rJ   rK   r    rQ   rV   r   rG   r   test_with_replacement   s    z0TestUniformRandomKOutGraph.test_with_replacementc                    sD   d}d t | dd}| r"tt fdd| D s@td S )Nr3   r:   FrW   c                 3   s   | ]\}}| kV  qd S r(   r   rC   rG   r   r   rI      s     zFTestUniformRandomKOutGraph.test_without_replacement.<locals>.<genexpr>)r   rZ   r$   rJ   rK   rV   r   rG   r   test_without_replacement   s
    z3TestUniformRandomKOutGraph.test_without_replacementN)r.   r/   r0   rT   rM   rR   r[   r\   r   r   r   r   rU      s
   	rU   )rT   r   Znetworkxr    Znetworkx.classesr   r   Znetworkx.generators.directedr   r   r   r   r   r	   r
   r4   r6   r>   markZparametrizer+   r@   rA   rU   r   r   r   r   <module>   s    
7	
