o
    jx                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlZd dl	Z
d dlmZmZ dd ZG dd	 d	Zd
d Zdd Zdd Zdd Zdd ZG dd dZG dd dZdd ZG dd dZG dd dZdS )    )chainislicetee)inf)shuffleN)FORWARDREVERSEc                 C   s   t | dkrd S td}td}t }| D ]}t|| qtj|dd}|jj|	 d dd}|j
d | t | ks@J d S )	Nr   numpyZscipyT)ZorientedF)ZtolZ	hermitian   )lenpytestZimportorskipnxGraph	add_cycleZincidence_matrixZlinalgZmatrix_rankZtoarrayshape)ZbasisnpspHbincrank r   f/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/networkx/algorithms/tests/test_cycles.pycheck_independent   s   

r   c                   @   s   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"
TestCyclesc                 C   sN   t  }t |g d t |g d t |g d |dd || _d S )Nr   r
         r   r         r   r
            r$   	   )r   r   r   add_edgeG)clsr'   r   r   r   setup_class   s   
zTestCycles.setup_classc                    s>   t |t  krdS || t fddtD S )NFc                 3   s$    | ]}||   kV  qd S Nr   .0ir   lnr   r   	<genexpr>)   s   " z3TestCycles.is_cyclic_permutation.<locals>.<genexpr>)r   anyrange)selfar   r   r.   r   is_cyclic_permutation$   s
   z TestCycles.is_cyclic_permutationc                 C   s"  | j }t|d}tdd |D }|g dg dg dgks!J t|d}tdd |D }|g dg dg dgks?J t|d	}td
d |D }|g dg dg dgks]J t|d t|d	}tdd |d d D t|d g }|g dg dg dg dgksJ d S )Nr   c                 s       | ]}t |V  qd S r*   sortedr,   cr   r   r   r1   .       z.TestCycles.test_cycle_basis.<locals>.<genexpr>r   r!   r   r
   c                 s   r7   r*   r8   r:   r   r   r   r1   1   r<   r%   c                 s   r7   r*   r8   r:   r   r   r   r1   4   r<   ABCc                 s   r7   r*   r8   r:   r   r   r   r1   9   r<   )ABC)r'   r   cycle_basisr9   r   r4   r'   cyZsort_cyr   r   r   test_cycle_basis+   s   ((zTestCycles.test_cycle_basisc                 C   F   t tj t }t|d}W d    d S 1 sw   Y  d S Nr   )r   raisesr   NetworkXNotImplementedDiGraphrB   r4   r'   rD   r   r   r   test_cycle_basis2<      "zTestCycles.test_cycle_basis2c                 C   rF   rG   )r   rH   r   rI   
MultiGraphrB   rK   r   r   r   test_cycle_basis3A   rM   zTestCycles.test_cycle_basis3c                    sh   t d}|t tdd t |}ddd t | } fddt |D }||ks2J d S )	Nr    r   r$   r   r
   r
   r   c                    s   g | ]} fd d|D qS )c                    s   g | ]}  ||qS r   )getr,   r0   permr   r   
<listcomp>N   s    zBTestCycles.test_cycle_basis_ordered.<locals>.<listcomp>.<listcomp>r   )r,   ZcycrS   r   r   rU   N   s    z7TestCycles.test_cycle_basis_ordered.<locals>.<listcomp>)r   cycle_graphupdater3   rB   relabel_nodes)r4   r'   ZcbGr   ZcbHr   rS   r   test_cycle_basis_orderedF   s   


z#TestCycles.test_cycle_basis_orderedc                 C   sj   t  }t |g d t |g d t |}tdd |D }|dgg dg dg dgks3J d	S )
z-Tests the function for graphs with self loopsr   )r   r   r"   r   c                 s   r7   r*   r8   r:   r   r   r   r1   W   r<   z8TestCycles.test_cycle_basis_self_loop.<locals>.<genexpr>r   r   r
   r   )r   r   r   )r   r   r"   N)r   r   r   rB   r9   rC   r   r   r   test_cycle_basis_self_loopQ   s   
&z%TestCycles.test_cycle_basis_self_loopc                    s|   g d}t |}tt |}dgg dddgddgdgg}t|t|ks)J |D ] t fdd|D s;J q+d S )N)r   r   r   r
   r   r   r
   r   r   r   r   r
   )r   r   r   rZ   r   r
   c                 3       | ]	}  |V  qd S r*   r6   r,   rcr;   r4   r   r   r1   a       z0TestCycles.test_simple_cycles.<locals>.<genexpr>)r   rJ   r9   simple_cyclesr   r2   )r4   edgesr'   cccar   rf   r   test_simple_cyclesZ   s   
zTestCycles.test_simple_cyclesc                 C   s*   t dg}tt |dggksJ d S )Nr\   r   )r   r   listrh   r4   r'   r   r   r   test_simple_cycles_singletonc   s   z'TestCycles.test_simple_cycles_singletonc                 C   s:   t  }t |ddg tt |}t|dksJ d S )Nr5   r
   )r   rJ   r   rm   rh   r   r4   r'   r;   r   r   r   test_unsortableg   s   zTestCycles.test_unsortablec                    s   t  }t |g d tt | t dksJ  d g ds'J t |g d tt |}t|dks>J g dg dg}|D ] t fdd|D sXJ qHd S )N)r
   r   r   r
   r   )
         r   c                 3   rb   r*   rc   rd   rf   r   r   r1   z   rg   z6TestCycles.test_simple_cycles_small.<locals>.<genexpr>)r   rJ   r   r9   rh   r   r6   r2   )r4   r'   rj   rk   r   rf   r   test_simple_cycles_smallo   s   z#TestCycles.test_simple_cycles_smallc                 C   s"   t  }tt |g ksJ d S r*   )r   rJ   rm   rh   rn   r   r   r   test_simple_cycles_empty|   s   z#TestCycles.test_simple_cycles_emptyc                 C   s  t  }td|d D ]}|d| |||d  q|d| d d t|d d| d D ]}||d| d  |||d  q1|d| d |d  td| d d| d D ]}|d| d | ||d| d  q_|d| d d| d  |S )Nr   r
   r   )r   rJ   r3   r&   )r4   kr'   r0   r   r   r   worst_case_graph   s   zTestCycles.worst_case_graphc                 C   s@   t ddD ]}| |}ttt|}|d| ksJ qd S )Nr   rr   )r3   rx   r   rm   r   rh   )r4   rw   r'   r/   r   r   r   test_worst_case_graph   s
   
z TestCycles.test_worst_case_graphc                    s   t ddD ]E}|}tt|}tt|}t|t|ks$J |D ] t fdd|D s6J q&|D ]tfdd|D sIJ q9qd S )Nr   rr   c                 3   rb   r*   rc   )r,   rrf   r   r   r1      rg   z;TestCycles.test_recursive_simple_and_not.<locals>.<genexpr>c                 3   rb   r*   rc   r:   re   r4   r   r   r1      rg   )r3   rx   r9   r   rh   recursive_simple_cyclesr   r2   )r4   rw   r'   rj   rccr   r;   re   r4   r   test_recursive_simple_and_not   s   
z(TestCycles.test_recursive_simple_and_notc                    s   t  }g d}|| tt |}t|dksJ tt |}t|t|ks-J |D ] t fdd|D s?J q/|D ]tfdd|D sRJ qBd S )N)r^   )r   r   rP   )r
   r   ra   )r   r   r   r   r   r   )r   r   )r   r
   r   r    r    r   r    r
   )r    r   )r    r      c                 3   rb   r*   rc   rd   rf   r   r   r1      rg   zATestCycles.test_simple_graph_with_reported_bug.<locals>.<genexpr>c                 3   rb   r*   rc   r:   r{   r   r   r1      rg   )r   rJ   add_edges_fromr9   rh   r   r|   r2   )r4   r'   ri   rj   r}   r   r~   r   #test_simple_graph_with_reported_bug   s   
z.TestCycles.test_simple_graph_with_reported_bugN)__name__
__module____qualname__classmethodr)   r6   rE   rL   rO   rY   r[   rl   ro   rq   ru   rv   rx   ry   r   r   r   r   r   r   r      s$    
		r   c                 C   s    t | \}}t|d  t||S r*   )r   nextzip)iterabler5   r   r   r   r   pairwise   s   

r   c                 C   s   t t| t| dS Nr
   )r   r   r   r;   r   r   r   cycle_edges   s   r   c                 C   s   t t| S r*   )	frozensetr   r   r   r   r   directed_cycle_edgeset   s   r   c                 C   s*   t | dkrtt| S tttt| S r   r   r   r   mapr   r   r   r   undirected_cycle_edgeset   s   r   c                 C   s*   t | dkrtt| S tttt| S )Nr   r   r   r   r   r   multigraph_cycle_edgeset   s   r   c                   @   s   e Zd Zedd Zedd Zedd Zdd Z			
		d-ddZ			
		d-ddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd	S ).TestCycleEnumerationc                 C   s
   t | S r*   )r   complete_graphr0   r   r   r   K   s   
zTestCycleEnumeration.Kc                 C   s   t |  S r*   )r   r   Zto_directedr   r   r   r   D   s   zTestCycleEnumeration.Dc                 C   s   |   rtS |  rtS tS r*   )Zis_directedr   Zis_multigraphr   r   gr   r   r   edgeset_function   s
   z%TestCycleEnumeration.edgeset_functionc	           	         s   |d urt ||krtd| d| |dkr+||v r$td| dt|||< n||v r5|| ntd| dt fdd|D sRt| d	| d
|rjt  |jt |krlt| d| dd S d S )Ncomputed cycle z exceeds length bound computedz has already been found!zexpected cycle z was not computedc                 3   s    | ]} j | V  qd S r*   Zhas_edger,   er   r   r   r1     s    z3TestCycleEnumeration.check_cycle.<locals>.<genexpr>z claimed cycle z is not a cycle of gz cycle z is not chordless)r   RuntimeErrortuplepopallZsubgraphri   )	r4   r   r;   escachesource
original_clength_bound	chordlessr   r   r   check_cycle   s(   
z TestCycleEnumeration.check_cycleNFc                    s`  |d u r|r	t jnt j}ttt|}t| tt|| tt||t j	| dd}| 
|}i }	|d ur=||	d< i }
||fi |	D ]}fdd|D }||}| ||||
d||| qGt|tr|t|
|krztd| dt|
 d S |D ]} fd	d|D }||}| ||||
d
||| q~t|
r|
 D ]}td| dd S d S )NT)copyr   c                       g | ]} | qS r   r   r,   x)unlabelr   r   rU   %      z>TestCycleEnumeration.check_cycle_algorithm.<locals>.<listcomp>r   z	expected z cycles, got c                    r   r   r   r   )labelr   r   rU   2  r   expectedr   z, is valid but not in the expected cycle set!)r   chordless_cyclesrh   rm   r3   r   r   dictr   rX   r   r   
isinstanceintr   values)r4   r   expected_cyclesr   r   	algorithmZrelabelhZedgesetparamsZcycle_cacher;   r   r   r   )r   r   r   check_cycle_algorithm  sJ   


z*TestCycleEnumeration.check_cycle_algorithmc                 C   s,   t ||D ]\}}| j|||||d qd S )N)r   r   r   )r   r   )r4   g_familyZcycle_countsr   r   r   r   Z
num_cyclesr   r   r   (check_cycle_enumeration_integer_sequence>  s   z=TestCycleEnumeration.check_cycle_enumeration_integer_sequencec                 C   s   t  }t |td t |tdd d d  |dd g d}| j||dd | j||ddd d	d
 |D }| j||ddd d S )Nr    r>   r   ))r   r_   r   r   r   Tr   r   r   r   c                 S   s   g | ]
}t |d k r|qS r   r   r:   r   r   r   rU   Y      zMTestCycleEnumeration.test_directed_chordless_cycle_digons.<locals>.<listcomp>r
   )r   rJ   r   r3   r&   r   r4   r   r   r   r   r   $test_directed_chordless_cycle_digonsO  s   z9TestCycleEnumeration.test_directed_chordless_cycle_digonsc                 C   s  t g d}ddg}| j||dd t  }t |td t |tdd |d	d
 g d}| j||dd |d
d	 g d}| j||dd dg}| j||ddd |d	d
 ddg}| j||dd t dd tdD }g }| j||dd d S )N)r_   r   r   r   r   r   r^   )r   r   r   r   r    )r
   r   r   r   r    Tr   r    r   r%   r#   r   )r   r
   r   r   r   )r   r   r    r"   r#   r   r    r"   r#   r$   )r   r   r#   r   r   r   r   r   c                 s   &    | ]}t |D ]}||fV  qqd S r*   r3   )r,   r-   jr   r   r   r1   s     $ zPTestCycleEnumeration.test_directed_chordless_cycle_undirected.<locals>.<genexpr>rr   )r   rJ   r   r   r3   r&   remove_edger   r   r   r   (test_directed_chordless_cycle_undirected\  s(   z=TestCycleEnumeration.test_directed_chordless_cycle_undirectedc                 C   sD  t  }t |td t |tdd g tdg tddg}| j||dd | j|dd |D ddd |d	d
 |g td
d | j||dd | j|dd |D ddd |d
d	 d	d
g|d< | j||dd | j|dd |D ddd |  |d	d
 | j||dd | j|dd |D ddd d S )Nr    r      Tr   c                 S      g | ]
}t |d kr|qS r    r   r:   r   r   r   rU   ~  r   zGTestCycleEnumeration.test_chordless_cycles_directed.<locals>.<listcomp>r   r   r#   r   r$   c                 S   r   r   r   r:   r   r   r   rU     r   r>   c                 S   r   r   r   r:   r   r   r   rU     r   c                 S   r   r   r   r:   r   r   r   rU     r   )	r   rJ   r   r3   r   r&   appendr   r   r4   r'   r   r   r   r   test_chordless_cycles_directedw  s4   
z3TestCycleEnumeration.test_chordless_cycles_directedc                    s^    fddt dD }dd t dD } j||dd dd t dD } j||dd	 d S )
Nc                       g | ]}  |qS r   r   rR   r4   r   r   rU         zOTestCycleEnumeration.test_directed_chordless_cycle_diclique.<locals>.<listcomp>rr   c                 S      g | ]
}|| | d  qS r   r   rR   r   r   r   rU     r   Tr   c                 S   r   r   r   rR   r   r   r   rU     r   r   r   r3   r   )r4   r   r   r   r   r   &test_directed_chordless_cycle_diclique  s   
z;TestCycleEnumeration.test_directed_chordless_cycle_dicliquec                 C   s   t dd tdD }t |td dd tdD }| j||dd | j||dd	 t |}|d
d tdddD  dd tdddD }| j||dd d S )Nc                 s       | ]}||fV  qd S r*   r   r+   r   r   r   r1     r<   zMTestCycleEnumeration.test_directed_chordless_loop_blockade.<locals>.<genexpr>rr   c                 S      g | ]}|fqS r   r   r+   r   r   r   rU         zNTestCycleEnumeration.test_directed_chordless_loop_blockade.<locals>.<listcomp>Tr   r
   r   c                 s   r   r*   r   r+   r   r   r   r1     r<   r   r   c                 S   r   r   r   r+   r   r   r   rU     r   )r   rJ   r3   r   r   MultiDiGraphr   r   r   r   r   %test_directed_chordless_loop_blockade  s   
z:TestCycleEnumeration.test_directed_chordless_loop_blockadec                    s<   fddt ddD }g d} j||dd dd	 } fd
dt ddD }dd |D } j||d|d dd }g d} fddt ddD } j||d|d dd |D } fddt ddD } j||d|d g d} fddt ddD } || g d} fddt dD } || d S )Nc                    r   r   r   rR   r   r   r   rU     r   zTTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.<listcomp>r   r   )r   r
   r   rr   rs   #   8   T   x         r   r   c                 {   (    dd t j| fi |D E d H  d S )Nc                 s        | ]}t |d kr|V  qdS r   Nr   r:   r   r   r   r1         zfTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.triangles.<locals>.<genexpr>r   rh   r   kwargsr   r   r   	triangles     &zSTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.trianglesc                    r   r   r   rR   r   r   r   rU     r   c                 S      g | ]}d | qS r   r   r   r   r   r   rU     r   )r   r   c                 {   r   )Nc                 s   r   )r   Nr   r:   r   r   r   r1     r   zhTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.four_cycles.<locals>.<genexpr>r   r   r   r   r   four_cycles  r   zUTestCycleEnumeration.test_simple_cycles_notable_clique_sequences.<locals>.four_cycles)r   r   r   r      -   i      iz  iv  i  c                    r   r   r   rR   r   r   r   rU     r   r
   r   c                 S   r   r   r   r   r   r   r   rU     r   c                    r   r   r   rR   r   r   r   rU     r   r   )r   r
   r    rs   r   i  i=	  c                    r   r   r   rR   r   r   r   rU     r   r$   )r   r   r   r
   r#   %      i  c                    r   r   r   rR   r   r   r   rU     r   r   )r4   r   r   r   r   r   r   r   +test_simple_cycles_notable_clique_sequences  s8   z@TestCycleEnumeration.test_simple_cycles_notable_clique_sequencesc                 C   sv  t  }t |td g tdg}| j||dd t |td g ttd}| j||dd t |td g }| j||dd t  }t |td g tdg}| j||dd t |td | j|g dd t |td | j|g dd t  }t |td t |tdd d d  g ttd}| j||dd t |td | j|g dd d S )Nr    Tr   r>   )r   rN   r   r3   r   r   r   )r4   r   r   r   r   r   1test_directed_chordless_cycle_parallel_multiedges  s2   zFTestCycleEnumeration.test_directed_chordless_cycle_parallel_multiedgesc                 C   s   t  }t |td t |tdd g tdg tddg}| j||dd | j|dd |D ddd |d	d
 |g td
d |g d | j||dd | j|dd |D ddd d S )Nr    r   r   Tr   c                 S   r   r   r   r:   r   r   r   rU     r   zDTestCycleEnumeration.test_chordless_cycles_graph.<locals>.<listcomp>r   r#   r   r$   )r   r   r#   r$   r%   rr      c                 S   r   r   r   r:   r   r   r   rU     r   )r   r   r   r3   r   r&   r   r   r   r   r   test_chordless_cycles_graph  s   
z0TestCycleEnumeration.test_chordless_cycles_graphc                    sl  d  d dks
J t  }t D ]}|d s"|||d    |||d    qg td dg fddtd dD  }| j||dd | j|d	d |D d
dd d  d dkscJ t  }t D ]}|||d    |d s||d   | qkg t d ddg fddtd dD  }| j||dd | j|dd |D d
dd d S )Ni  r   r   r
   c                    (   g | ]} fd dt ||d D qS )c                       g | ]}|  qS r   r   r   r   r   r   rU   #  r   [TestCycleEnumeration.test_chordless_cycles_giant_hamiltonian.<locals>.<listcomp>.<listcomp>r   r   r+   r   r   r   rU   "      zPTestCycleEnumeration.test_chordless_cycles_giant_hamiltonian.<locals>.<listcomp>Tr   c                 S   r   r   r   r:   r   r   r   rU   '  r   r   r   d   c                    r  )c                    r  r   r   r   r   r   r   rU   <  r   r  r   r   r+   r   r   r   rU   ;  r	  c                 S   r   r
  r   r:   r   r   r   rU   @  r   )r   r   r3   r&   r   rJ   )r4   r'   vr   r   r   r   'test_chordless_cycles_giant_hamiltonian  s:   


z<TestCycleEnumeration.test_chordless_cycles_giant_hamiltonianc                 C   sp   d}t dd t|D }| |g  | j|g dd t|d D ]}| j|g |d | j|g |dd q"d S )	Nrr   c                 s   r   r*   r   )r,   r   yr   r   r   r1   E  r   zMTestCycleEnumeration.test_simple_cycles_acyclic_tournament.<locals>.<genexpr>Tr   r
   r   r   )r   rJ   r3   r   )r4   r0   r'   rw   r   r   r   %test_simple_cycles_acyclic_tournamentC  s   z:TestCycleEnumeration.test_simple_cycles_acyclic_tournamentc                 C   s   t d}ttd}| ||g |dd t |g d | ||g |t tdd ttdd}| |||g |t tdd ttdd}h d}| || t|dkseJ t d}|t g d	j	 d
}| || d S )Nr$   r   r>   )r   r     r   >   )
r   r    r"   r#   r$   r         r   r  )r$   r%   rr   r  r   r  r  r   )r   r
   r   r   r   r  r   r  r  r   r$   r#   )
r   r
   r   r   r   r  rr   r%   r$   r#   )r   r
   r   r   r   r    r"   r#   )r   r    r"   r#   r$   r%   rr   r  r"   )r   rr   r  r   r  r   r   r$   rs   )
r   rV   r   r3   r   r&   Zadd_pathrW   r   ri   )r4   ZtestGZcyc1Zcyc2Zcyc3r   r   r   r   test_simple_cycles_graphM  s$   

z-TestCycleEnumeration.test_simple_cycles_graphc                 C   s   t  }g }tdD ] }t |t| || t|D ]\}}| j|||d qq
t  }d}g }tdD ]4}||dk rA|n|d  |dkrKq7t |t|||  ||7 }t|D ]\}}| j|||d q^q7d S )Nrr   r   r   r   r
   )r   rJ   r3   r   r   	enumerater   r   )r4   dr   r0   rw   r   r   topr   r   r   test_simple_cycles_bounded  s*   
z/TestCycleEnumeration.test_simple_cycles_boundedc                 C   s   t d}t jdt jd}tt j|ddg ksJ tt j|ddg ks'J tt j|ddg ks4J tt j|ddg ksAJ d S )Nr   )Zcreate_usingr   r   )r   rV   rJ   rm   rh   r   )r4   r'   ZDGr   r   r   %test_simple_cycles_bound_corner_cases  s   
z:TestCycleEnumeration.test_simple_cycles_bound_corner_casesc                 C   s  t t t }t|dD ]}J W d    n1 sw   Y  t t t }t|dD ]}J W d    n1 sAw   Y  t t t }t|dD ]}J W d    n1 sdw   Y  t t t }t|dD ]}J W d    d S 1 sw   Y  d S )Nr>   )r   rH   
ValueErrorr   rJ   rh   r   r   rp   r   r   r   test_simple_cycles_bound_error  s0   "z3TestCycleEnumeration.test_simple_cycles_bound_errorc                    sl    fddt ddD }g d} j||dd dd t dD } fd	dt dD } j||dd d S )
Nc                    r   r   r   rR   r   r   r   rU     r   zETestCycleEnumeration.test_chordless_cycles_clique.<locals>.<listcomp>r   r   )r   r
   r   rr   rs   r   r   r   r   r   r   i  il  Tr   c                 S   r   r   r   rR   r   r   r   rU     r   c                    r   r   r   rR   r   r   r   rU     r   r   )r4   r   r   r   r   r   test_chordless_cycles_clique  s   
z1TestCycleEnumeration.test_chordless_cycles_clique)NFN)r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r      s>    



:
-%0
3r   c                   @   s   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&TestFindCyclec                 C   s   g d| _ g d| _d S )Nr   ))r>   r   r]   rP   rP   ra   r   r
   )nodesri   )r(   r   r   r   r)     s   
zTestFindCycle.setup_classc                 C   s(   t | j}tt jjt j|| j d S r*   )	r   r   ri   r   rH   	exceptionNetworkXNoCycle
find_cycler"  rn   r   r   r   test_graph_nocycle  s   z TestFindCycle.test_graph_nocyclec                 C   sB   t | j}|dd tt || j}g d}||ksJ d S )Nr   r   r]   r_   r`   r   r   ri   r&   rm   r%  r"  r4   r'   r   Zx_r   r   r   test_graph_cycle  s
   zTestFindCycle.test_graph_cyclec                 C   sF   t | j}|dd tt j|| jd d}g d}||ks!J d S )Nr   r   Zorientationr'  r(  r)  r   r   r   test_graph_orientation_none  s
   z)TestFindCycle.test_graph_orientation_nonec                 C   sZ   t | j}|dd tt j|| jdd}ddtfddtfddtfg}||ks+J d S )Nr   r   originalr+  r
   )r   r   ri   r&   rm   r%  r"  r   r)  r   r   r   test_graph_orientation_original  s
   z-TestFindCycle.test_graph_orientation_originalc                 C   s6   t | j}tt || j}ddg}||ksJ d S )Nr]   rP   r   rJ   ri   rm   r%  r"  r)  r   r   r   test_digraph  s   zTestFindCycle.test_digraphc                 C   s:   t | j}tt j|| jd d}ddg}||ksJ d S )Nr+  r]   rP   r/  r)  r   r   r   test_digraph_orientation_none  s   z+TestFindCycle.test_digraph_orientation_nonec                 C   F   t | j}tt j|| jdd}ddtfddtfg}||ks!J d S )Nr-  r+  r   r
   r   rJ   ri   rm   r%  r"  r   r)  r   r   r   !test_digraph_orientation_original     z/TestFindCycle.test_digraph_orientation_originalc                 C   b   t | j}tt || j}ddg}|d |d ksJ |d d d |d d d ks/J d S )Nr   r
   r   )r
   r   r
   r   r
   r   )r   rN   ri   rm   r%  r"  r)  r   r   r   test_multigraph  s
   (zTestFindCycle.test_multigraphc                 C   r6  )Nr7  )r
   r   r   r   r
   r   )r   r   ri   rm   r%  r"  r)  r   r   r   test_multidigraph  s
   (zTestFindCycle.test_multidigraphc                 C   r2  )Nignorer+  r   r
   r3  r)  r   r   r   test_digraph_ignore  r5  z!TestFindCycle.test_digraph_ignorec                 C   r2  )Nreverser+  r
   r   )r   rJ   ri   rm   r%  r"  r   r)  r   r   r   test_digraph_reverse  r5  z"TestFindCycle.test_digraph_reversec                 C   s   t | j}tt j|| jdd}dddtfdddtfg}|d |d ks'J |d d d |d d d ks9J |d d |d d ksGJ d S )Nr:  r+  r   r
   r   r   )r   r   ri   rm   r%  r"  r   r)  r   r   r   test_multidigraph_ignore  s   $ z&TestFindCycle.test_multidigraph_ignorec                 C   sN   t g d}tt j|g ddd}dddtfdddtfg}||ks%J d S )N)r]   r_   r_   rZ   r:  r+  r
   r   r   )r   r   rm   r%  r   r   r)  r   r   r   test_multidigraph_ignore2  s   z'TestFindCycle.test_multidigraph_ignore2c                 C   s0   t g d}tjt jjt j|g ddd d S )N)r]   r_   r   )r   r   r   r-  r+  )r   r   r   rH   r#  r$  r%  rn   r   r   r   test_multidigraph_original&  s   
z(TestFindCycle.test_multidigraph_originalc                 C   s`   t g d}tjt jjt j|dd tt j|dd}|ddtfddtfddt	fgks.J d S )N)r]   r^   r_   r-  r+  r:  r   r
   r   )
r   rJ   r   rH   r#  r$  r%  rm   r   r   )r4   r'   r   r   r   r   test_dag4  s   (zTestFindCycle.test_dagc                 C   s   t  }|g d tjt jt j|dd tt |d}ddg}||ks(J tt |d}ddg}||ks:J tt |}ddg}||ksKJ d S )N)rP   r`   r_   ra   r   r   r
   r_   ra   r   )r   rJ   r   r   rH   r$  r%  rm   r)  r   r   r   test_prev_explored<  s   z TestFindCycle.test_prev_exploredc                 C   sB   t  }|g d tjt jt j|dd tt jt j| d S )N)r_   r`   r!  r   r   rB  )r   rJ   r   r   rH   r$  r%  rn   r   r   r   test_no_cycleN  s   zTestFindCycle.test_no_cycleN)r   r   r   r   r)   r&  r*  r,  r.  r0  r1  r4  r8  r9  r;  r=  r>  r?  r@  rA  rC  rD  r   r   r   r   r     s(    
r   c                 C   s   t | t |ks
J d S r*   r8   )r5   r   r   r   r   assert_basis_equalW  s   rE  c                   @   sX   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd ZdS )TestMinimumCycleBasisc                 C   s6   t  }t j|g ddd |jdddd || _d S )N)r
   r   r   r   r
   weightr   r   r    )r   r   r   r&   diamond_graph)r(   Tr   r   r   r)   \  s   
z!TestMinimumCycleBasis.setup_classc                 C   s&   t | j}t|g dg dg d S )Nr   r   r
   )r   r   r   r   minimum_cycle_basisrI  rE  r4   mcbr   r   r   test_unweighted_diamondc  s   z-TestMinimumCycleBasis.test_unweighted_diamondc                 C   s*   t j| jdd}t|g dg dg d S )NrH  rG  rK  )r   r   r   r
   rL  rN  r   r   r   test_weighted_diamondg  s   z+TestMinimumCycleBasis.test_weighted_diamondc                 C   sp   d}t dd| D ],}tjdd|d}| }| }t|}t|}t||| | ks1J t| q	d S )Nrr   i  g333333?seed)	r3   r   Zerdos_renyi_graphZnumber_of_nodesZnumber_of_edgesZnumber_connected_componentsrM  r   r   )r4   ZntrialrS  ZrgZnnodesZnedgesZncomprO  r   r   r   test_dimensionalityk  s   


z)TestMinimumCycleBasis.test_dimensionalityc                 C   s6   t d}t |}tdd |D sJ t| d S )Nr    c                 s   s    | ]	}t |d kV  qdS r   r   )r,   cycler   r   r   r1   {  rg   z<TestMinimumCycleBasis.test_complete_graph.<locals>.<genexpr>)r   r   rM  r   r   )r4   cgrO  r   r   r   test_complete_graphx  s   

z)TestMinimumCycleBasis.test_complete_graphc                 C   s   t dd}t |rJ d S )Nr   )r   Zbalanced_treerM  )r4   tgr   r   r   test_tree_graph~  s   z%TestMinimumCycleBasis.test_tree_graphc                    s   t   tt  }g dg dg dg dg dg dgt|tks)J tfdd|D s6J |D ]}t fd	dt jj|d
dD sMJ q8t| d S )N)r   r%   r#   r    r   )r
   r   r   r   r   )r
   r"   r$   r    r   )r   r   r$   r    r   )r
   r"   r%   r   r   )r
   r   r#   r    r   c                 3       | ]}| v V  qd S r*   r   r:   r   r   r   r1     r<   z<TestMinimumCycleBasis.test_petersen_graph.<locals>.<genexpr>c                 3   s     | ]\}}  ||V  qd S r*   r   r,   ur  )r'   r   r   r1     r   T)Zcyclic)	r   petersen_graphrm   rM  r   r   utilsr   r   )r4   rO  r;   r   r'   r   r   test_petersen_graph  s   (z)TestMinimumCycleBasis.test_petersen_graphc                 C   sZ   d}t |}|dd |jD  |dd t |jD  t j|dd}t| d S )Nr$   c                 S      g | ]	\}}||d fqS )r%   r   r\  r   r   r   rU         zVTestMinimumCycleBasis.test_gh6787_variable_weighted_complete_graph.<locals>.<listcomp>c                 S   rb  )r
   r   r\  r   r   r   rU     rc  rH  rG  )r   r   add_weighted_edges_fromri   rV   rM  r   )r4   NrV  rO  r   r   r   ,test_gh6787_variable_weighted_complete_graph  s   
zBTestMinimumCycleBasis.test_gh6787_variable_weighted_complete_graphc                    s   t d}|jddgdd g dg dg dg tt j|dd}t|t ks,J t fd	d
|D s9J g dg dg dg tt |}t|t ksUJ t fdd
|D sbJ d S )Nr   )r   r   rr   )r
   r   rr   distrG  )r
   r   r   )r   r   r
   r   )r
   r   r   c                 3   rZ  r*   r   r:   r[  r   r   r1     r<   zMTestMinimumCycleBasis.test_gh6787_and_edge_attribute_names.<locals>.<genexpr>)r   r   r   c                 3   rZ  r*   r   r:   r[  r   r   r1     r<   )r   rV   rd  rm   rM  r   r   )r4   r'   rO  r   r[  r   $test_gh6787_and_edge_attribute_names  s   
z:TestMinimumCycleBasis.test_gh6787_and_edge_attribute_namesN)r   r   r   r   r)   rP  rQ  rT  rW  rY  ra  rf  rh  r   r   r   r   rF  [  s    
rF  c                   @   s   e Zd Zejde dfe dfe	 dfe
 dfe dfejdddefedefeeeedeedddfeg dd	ff	d
d ZdS )	TestGirthr`  r   r    r"   rr   *   rR  ))r   r"   )r   r$   )r   r%   )r
   r$   )r   r$   )r   r%   )r   r%   )r    r%   )r"   r$   )r"   r%   )r#   r$   r   c                 C   s   t ||ks	J d S r*   )r   Zgirthr   r   r   r   
test_girth  s    zTestGirth.test_girthN)r   r   r   r   markZparametrizer   Zchvatal_graphZtutte_graphr^  Zheawood_graphZpappus_graphZrandom_labeled_treer   Zempty_graphr   r   r   r3   rk  r   r   r   r   ri    s&    




$ri  )	itertoolsr   r   r   mathr   randomr   r   Znetworkxr   Z%networkx.algorithms.traversal.edgedfsr   r   r   r   r   r   r   r   r   r   r   rE  rF  ri  r   r   r   r   <module>   s.     )   q R