o
    h                     @   s  d dl Z d dlZd dlZd dlmZmZ dd ZG dd dZG dd dZ	ej
d	ejejejejfd
d Zej
dddddfddiddiddffdd Zej
d	ejejfdd Zej
dddddfddiddiddffdd Zej
d	ejejfdd Zej
dddddfddiddiddffdd Zd d! Zd"d# Zej
d	ejejejejfd$d% Zej
d	ejejfd&d' Zej
d	ejejfd(d) Zd*d+ Zej
d	ejejejejgd,d- Zej
d	ejejejejgd.d/ Zd0d1 Zej
d	ejejgd2d3 Zej
d	ejejgd4d5 Z d6d7 Z!ej
d8e e e e fd9d: Z"ej
d8e e fd;d< Z#ej
d8e e fd=d> Z$dS )?    N)edges_equalnodes_equalc                  C   s   t  } t | g ksJ d S N)nxGraphdegree_histogramG r
   X/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/classes/tests/test_function.pytest_degree_histogram_empty	   s   r   c                   @   s   e Z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#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6TestFunctionc                 C   s   t jg dg dg ddd| _ddddd	d
| _ttd| _g d| _t g dg dg d| _	ddddd	d
| _
ddd	d	d	d
| _ttd| _g d| _d S )N         r   r   r   r   r      Test)namer   r   r   r   )r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r	   GdegreelistrangeGnodesGedgesDiGraphDGDGin_degreeDGout_degreeDGnodesDGedgesselfr
   r
   r   setup_method   s    
zTestFunction.setup_methodc                 C   sD   t | j tt| jsJ t | j tt| js J d S r   )r   r	   nodesr    r   r%   r*   r
   r
   r   
test_nodes   s    $zTestFunction.test_nodesc                 C   s   t | j tt| jsJ t| j tt| jks!J t | jjg ddttj| jg dds9J t| jjg ddttj| jg ddksRJ d S )N)r   r   r   nbunch)r   r	   edgesr    r   sortedr%   r*   r
   r
   r   
test_edges   s    "&zTestFunction.test_edgesc                 C   s   t | j tt| jsJ t| j tt| jks!J t | jjddgdttj| jddgds9J t| jjddgdttj| jddgdksRJ t | jjddttj| jddsfJ t| jjddttj| jddks{J d S )Nr   r   r/   weightr4   )r   r	   degreer    r   r2   r%   r*   r
   r
   r   test_degree(   s    "&
zTestFunction.test_degreec                 C   sP   t | jdt t| jdksJ t | jdt t| jdks&J d S )Nr   )r    r	   	neighborsr   r%   r*   r
   r
   r   test_neighbors8   s   &*zTestFunction.test_neighborsc                 C   8   | j  t| j ksJ | j t| jksJ d S r   )r	   number_of_nodesr   r%   r*   r
   r
   r   test_number_of_nodes<      z!TestFunction.test_number_of_nodesc                 C   r:   r   )r	   number_of_edgesr   r%   r*   r
   r
   r   test_number_of_edges@   r=   z!TestFunction.test_number_of_edgesc                 C   r:   r   )r	   is_directedr   r%   r*   r
   r
   r   test_is_directedD   r=   zTestFunction.test_is_directedc                 C   s  | j  }g d}t|| t||g dsJ | j  }tj||dd t|j|ddddd	difdd
d	difddd	difgsFJ | j  }dg}t|| t|t| j | s`J | j  }g }t|| t|j| j	svJ t|j| j jsJ d S )N            )rC   rD   )rC   rE   rC   rF          @r5   TdatarC   rD   r4   rE   rF   )
r	   copyr   add_starr   r1   r   r    r-   r"   r+   r	   nlistr
   r
   r   test_add_starH   s,   


	
zTestFunction.test_add_starc                 C   sR  | j  }g d}t|| t||g dsJ | j  }tj||dd t|j|ddddd	difdd
d	difd
dd	difgsFJ | j  }dg}t|| t||g s^J t|t| j dg skJ | j  }tdg}t|| t|dgg sJ t|t| j dg sJ | j  }dg}t|| t||g sJ t|t| j dg sJ | j  }tdg}t|| t|dgg sJ t|t| j dg sJ | j  }g }t|| t|j| j jsJ t|t| j sJ | j  }tg }t|| t|j| j jsJ t|t| j s'J d S )NrB   )rG   rD   rE   rE   rF   rI   r5   TrJ   rC   rD   r4   rE   rF   node)	r	   rL   r   add_pathr   r1   r   r    iterrN   r
   r
   r   test_add_pathd   sV   


	






zTestFunction.test_add_pathc                 C   sX  | j  }g d}g dg dg}t|| t|||v s"J | j  }ddddifddddifdd	ddifd	dddifgddddifdd	ddifd	dddifddddifgg}tj||dd
 t|j|dd|v spJ | j  }dg}t|| t|t| j | sJ | j  }g }t|| t|j| j	sJ t
|j| j jsJ d S )NrB   )rG   rH   rQ   rR   )rG   rQ   rR   )rF   rC   rC   rD   r4         ?rF   rE   r5   TrJ   )r	   rL   r   	add_cycler2   r1   r   r    r-   r"   r   )r+   r	   rO   oklistsr
   r
   r   test_add_cycle   s<   



zTestFunction.test_add_cyclec                 C   s   | j g djt| j g djksJ | jg djt| jg djks*J | j g djt| j g djks?J | jg djt| jg djksTJ t| j g dg d}|j| j usjJ |j| j g djksxJ d S )N)r   r   r   r   r   )r	   subgraphadjr   r%   induced_subgraph_graph)r+   Hr
   r
   r   test_subgraph   s   ** zTestFunction.test_subgraphc                 C   sX   | j ddgjt| j ddgjksJ | jddgjt| jddgjks*J d S )Nr   r   )r	   edge_subgraphr\   r   r%   r*   r
   r
   r   test_edge_subgraph   s   zTestFunction.test_edge_subgraphc                 C   s   t j| jdd}t|t| jsJ |ji ksJ |ji | j i ks'J |j	i | j i ks5J t | j}t|t| jsEJ |j| jjksNJ |j| jjksWJ |j	i | j i kseJ d S )NF)	with_data)
r   create_empty_copyr	   r   r    graph_nodefromkeysr-   _adjr+   r	   r
   r
   r   test_create_empty_copy   s    z#TestFunction.test_create_empty_copyc                 C   s   t | jg dksJ d S )N)r   r   r   r   r   )r   r   r	   r*   r
   r
   r   test_degree_histogram   s   z"TestFunction.test_degree_histogramc                 C   sP   t | jdks
J t | jdksJ t  }|d t |dks&J d S )Ng      ?g333333?r           )r   densityr	   r%   r   add_noderi   r
   r
   r   test_density   s
   
zTestFunction.test_densityc                 C   sH   t  }|dd t |dksJ |dd t |dks"J d S )Nr   rl   r   rI   )r   r   add_edgerm   ri   r
   r
   r   test_density_selfloop   s
   z"TestFunction.test_density_selfloopc                 C   s   t | j}|jsJ tt j|jd tt j|jdg tt j|j	d tt j|j
dg tt j|jdd tt j|jdg tt j|jdd tt j|jdg tt j|j tt j|j d S )Nr   r   r   )r   freezer	   frozenpytestraisesNetworkXErrorrn   add_nodes_fromremove_noderemove_nodes_fromrp   add_edges_fromremove_edgeremove_edges_fromclear_edgesclearri   r
   r
   r   test_freeze   s   
zTestFunction.test_freezec                 C   s@   t | jrJ t | j}|jt | jksJ |jsJ d S r   )r   	is_frozenr	   rr   rs   ri   r
   r
   r   test_is_frozen  s   zTestFunction.test_is_frozenc                 C   6   t t d}|jd }d|d< |d dksJ d S )Nr   r   Tnode_attribute)r   rr   
path_graphr-   )r+   r	   rS   r
   r
   r   6test_node_attributes_are_still_mutable_on_frozen_graph     
zCTestFunction.test_node_attributes_are_still_mutable_on_frozen_graphc                 C   r   )Nr   r   Tedge_attribute)r   rr   r   r1   )r+   r	   edger
   r
   r   6test_edge_attributes_are_still_mutable_on_frozen_graph  r   zCTestFunction.test_edge_attributes_are_still_mutable_on_frozen_graphc                 C   s   t d}tt|d}tt ||d }t|t|d ks#J t d}tt|dd }tt ||}|dkrK|dkrKt|dksJJ nt|dksSJ t d}tt |d}t|dkshJ d S )Nd   r   r   c   r   )	r   complete_graphrandomsampler    r8   lenr   
star_graphr+   re   popnborsrS   r
   r
   r   test_neighbors_complete_graph  s   


z*TestFunction.test_neighbors_complete_graphc                 C   s   t d}tt|d}t ||d }t|dksJ t d}tt|dd }t ||}|dkrC|dkrCt|dksBJ nt|dksKJ t d}t |d}t|dks^J t 	 }|
td t |d}t|dkswJ d S )	Nr   r   r   r   a   b   
   	   )r   r   r   r   r    non_neighborsr   r   r   r   rw   r!   r   r
   r
   r   test_non_neighbors.  s"   


zTestFunction.test_non_neighborsc                 C   s  t d}tt |}t|dksJ t d}g d}tt |}|D ]\}}||f|v s8||f|v s8J q&t d}g d}tt |}|D ]\}}||f|v s]||f|v s]J qKt  }|g d g d}tt |}|D ]}||v s~J qvd S )Nr   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    	non_edgesr   r   r   r$   rz   )r+   re   nedgesexpecteduver
   r
   r   test_non_edgesI  s,   


zTestFunction.test_non_edgesc                 C   s   t  }t |rJ t d}t |rJ t |drJ |d |jdddd t |r3J t |ds;J t  }|g d t |sMJ t |dsUJ | }t |s`J t |dshJ t	
t jt j|d d S )	Nr   r   r   r5   r   )03r   r   1)r   r   r   r   2r   )r   r   r   r   r   r   r   r   r   )r   r   is_weightedr   rn   rp   r$   add_weighted_edges_fromto_undirectedrt   ru   rv   ri   r
   r
   r   test_is_weightedc  s&   


zTestFunction.test_is_weightedc                 C   s"  t  }t |rJ |d |g d t |rJ |jdddd t |dr.J |g d d|d d	 d
< t |rDJ t |drLJ d|d d d< t |ds\J t |scJ t  }|g d t |suJ t |dr}J t |dsJ t	
t jt j|d d S )Nr   )r   r   r   r   r   r   r5   r   )r   r   )r      bluer   colorr   r4   r   )r   r   )r   r   r   r   )r   r   r   )r   r   r   r   )r   r   is_negatively_weightedrn   rw   rp   rz   r$   r   rt   ru   rv   ri   r
   r
   r   test_is_negatively_weighted  s,   

z(TestFunction.test_is_negatively_weightedN)__name__
__module____qualname__r,   r.   r3   r7   r9   r<   r?   rA   rP   rV   rZ   r`   rb   rj   rk   ro   rq   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   r      s6    
4&
!r   c                   @   sP   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S )TestCommonNeighborsc                    s&   t tj _ fdd}t | _d S )Nc                    s"   t  | ||}||ksJ d S r   )r2   func)r	   r   r   r   resultclsr
   r   	test_func  s   z2TestCommonNeighbors.setup_class.<locals>.test_func)staticmethodr   common_neighborsr   test)r   r   r
   r   r   setup_class  s   zTestCommonNeighbors.setup_classc                 C   s"   t d}| |ddg d d S )Nr   r   r   )r   r   r   r   r   r   ri   r
   r
   r   test_K5  s   
zTestCommonNeighbors.test_K5c                 C       t d}| |dddg d S )Nr   r   r   r   )r   r   r   ri   r
   r
   r   test_P3     
zTestCommonNeighbors.test_P3c                 C   r   )Nr   r   r   r   )r   r   r   ri   r
   r
   r   test_S4  r   zTestCommonNeighbors.test_S4c                 C   sV   t tj t }|ddg | |dd W d    d S 1 s$w   Y  d S )Nr   r   r   r   )rt   ru   r   NetworkXNotImplementedr$   rz   r   ri   r
   r
   r   test_digraph  s
   "z TestCommonNeighbors.test_digraphc                 C   sP   t d}tt jt j|dd tt jt j|dd tt jt j|dd d S )Nr   r   r   )r   r   rt   ru   rv   r   ri   r
   r
   r   test_nonexistent_nodes  s   
z*TestCommonNeighbors.test_nonexistent_nodesc                 C   s*   t  }|ddg | |ddg  dS )zCase of no common neighbors.r   r   N)r   r   rw   r   ri   r
   r
   r   test_custom1  s   z TestCommonNeighbors.test_custom1c                 C   s"   t d}| |ddg d dS )zCase of equal nodes.r   r   r   Nr   ri   r
   r
   r   test_custom2  s   
z TestCommonNeighbors.test_custom2N)r   r   r   classmethodr   r   r   r   r   r   r   r   r
   r
   r
   r   r     s    
	r   
graph_typec                 C   sf  t jd| d}d}d}t ||| |jd | |ksJ |jd | |ks(J |jd | |ks3J t jd| d}ttt| tt|}d}t ||| |jd | dks]J |jd | dkshJ |jd | dkssJ t jd| d}dd	d
}t	| |}|
d t || |jd i ksJ |jd d dksJ |jd d d	ksJ d S )Nr   create_usingr   hellor   r   r   hi   r   r   )r   r   set_node_attributesr-   dictzipr2   r!   r   rg   r   )r   r	   valsattrdr
   r
   r   test_set_node_attributes  s,   

r   )valuesr   redr   r   r   c                 C   sH   t  }|d t || | |jd d dksJ d|jvs"J dS )z
    When `values` is a dict or dict-of-dict keyed by nodes, ensure that keys
    that correspond to nodes not in G are ignored.
    r   r   r   r   N)r   r   rn   r   r-   r   r   r	   r
   r
   r   ,test_set_node_attributes_ignores_extra_nodes  s
   
r   c                 C   s@  t jd| d}d}d}t ||| |d d | |ksJ |d d | |ks*J t jd| d}d}dd	g}tt|tt|}t ||| |d d | dksUJ |d d | dksaJ t jd| d}dd
d}dg}t||}t || |d d d dksJ |d d d d
ksJ |d d i ksJ d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   set_edge_attributesr   r   r!   r   rg   r   r	   r   r   r1   r   r
   r
   r   test_set_edge_attributes  s*   
r   rW   rI   )r   r   r4   c                 C   sD   t dg}t || | |d d d dksJ d|jvs J dS )If `values` is a dict or dict-of-dicts containing edges that are not in
    G, data associate with these edges should be ignored.
    r   r   r   r4   rW   r   N)r   r   r   r1   r   r
   r
   r   ,test_set_edge_attributes_ignores_extra_edges+  s   r   c                 C   s\  t jd| d}d}d}t ||| |d d d | |ks J |d d d | |ks.J t jd| d}d}dd	g}tt|tt|}t ||| |d d d | dks[J |d d d | dksiJ t jd| d}dd
d}dg}t||}t || |d d d d dksJ |d d d d d
ksJ |d d d i ksJ d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r   test_set_edge_attributes_multi<  s*   
r   )r   r   r   r   c                 C   sd   t ddg}t || | |d d d d dksJ |d d d i ks(J d| vs0J dS )	r   r   r   r   r   r   r   r4   rW   r   N)r   
MultiGraphr   r1   r   r
   r
   r   2test_set_edge_attributes_multi_ignores_extra_edgesZ  s
   r   c                  C   s   t  t  t  t  g} | D ]I}t jd|d}d}d}t ||| t ||}|d |ks2J |d |ks:J |d |ksBJ d}|d t j|||d	}|d |ksYJ qd S )
Nr   r   r   r   r   r   r   r   default)	r   r   r$   r   MultiDiGraphr   r   get_node_attributesrn   )graphsr	   r   r   attrsdefault_valr
   r
   r   test_get_node_attributesl  s   
r   c                  C   s   t  t  t  t  g} | D ]V}t jd|d}d}d}t ||| t ||}t|dks2J |j	D ]
}|| |ks?J q5|}|
dd t j|||d}t|dksXJ |j	D ]
}|| |kseJ q[qd S )	Nr   r   r   r   r   r   r   r   )r   r   r$   r   r   r   r   get_edge_attributesr   r1   rp   )r   r	   r   r   r   r   r   deafult_attrsr
   r
   r   test_get_edge_attributes}  s$   

r   c              	      sh  t jd| d}dd t |  t |   |jd vs!J  |jd vs*J  |jd vs3J t jd| d}dd	t |  t | t |   |jd vs[J |jd  ksfJ  |jd vsoJ |jd  kszJ  |jd vsJ |jd  ksJ t jd| d}t |  t | t |   |jd vr|jd vsJ  |jd vrȈ|jd vsJ  |jd vr؈|jd vsJ t jd| d}d
dt | fdd| D  t | |jd vr|jd vsJ |jd vr"|jd vs$J |jd vr4|jd vs6J |jd   ksBJ |jd   ksNJ |jd   ksZJ t jd| d}t | i id t |   |jd vsJ  |jd vsJ  |jd vsJ |jd  ksJ |jd  ksJ t jd| d}t | fdd| D  t j| ddgd  |jd vr|jd vsJ  |jd vr|jd vsJ  |jd v r|jd v s
J |jd v r|jd  ksJ |jd v r0|jd  ks2J d S )Nr   r   r   r   r   r   r   r   other,  threec              	         i | ]}| iqS r
   r
   .0nr   
other_attr
other_vals
third_attr
third_valsr   r
   r   
<dictcomp>      z/test_remove_node_attributes.<locals>.<dictcomp>r   c              	      r  r
   r
   r  r  r
   r   r
    r  r/   )r   r   r   remove_node_attributesr-   r   r	   r
   r  r   test_remove_node_attributes  s      $$$

$$$(,r  c              	      s8  t jd| d}d dt |  t |  tt | dks$J t jd| d}ddt |  t | t |   |d d vsMJ  |d d	 vsWJ |d d  dkscJ |d d	  dksoJ t jd| d}t |  t | t |   |d d vr|d d vsJ  |d d	 vr|d d	 vsJ t jd| d}d
dt | fdd| D  t | |d d vr|d d vsJ |d d	 vr|d d	 vsJ |d d   ksJ |d d	   ksJ t jd| d}t |d ii t | |d d vr@|d d   ksBJ |d d	 vsMJ t jd| d}t | fdd| D  t j|dgd |d d vr|d d vsJ |d d	 v r|d d	 v sJ d S )Nr   r   r   r   r   r   r   r   r   thirdr   c              	      &   i | ]\}}||f iqS r
   r
   r  r   r   r  r
   r   r
        z/test_remove_edge_attributes.<locals>.<dictcomp>r   c              	      r  r
   r
   r  r  r
   r   r
  '  r  ebunch)r   r   r   remove_edge_attributesr   r   r1   r  r
   r  r   test_remove_edge_attributes  sf   $$$$,(,r  c              	      s  t jd| d}|dd d dt |  t |   |d d d vs*J  |d d d vs6J  |d d d vsBJ t jd| d}|dd dd	t |  t | t |   |d d d vssJ  |d d d vsJ  |d d d vsJ |d d d  ksJ |d d d  ksJ |d d d  ksJ t jd| d}|dd t |  t | t |   |d d d vr|d d d vsJ  |d d d vr|d d d vsJ  |d d d vr|d d d vsJ t jd| d}|dd d
dt | fdd|jddD  t | |d d d vra|d d d vscJ |d d d vry|d d d vs{J |d d d vr|d d d vsJ |d d d   ksJ |d d d   ksJ |d d d   ksJ t jd| d}|dd t | i id t | |d d d vr|d d d   ksJ |d d d vsJ |d d d vsJ t jd| d}|dd t | i i id t j| ddgd  |d d d vr[|d d d v s]J  |d d d vrs|d d d v suJ  |d d d v r|d d d v sJ d S )Nr   r   r   r   r   r   r   r   r   r  r   c              	      s*   i | ]\}}}|||f iqS r
   r
   )r  r   r   kr  r
   r   r
  ^  s    z5test_remove_multi_edge_attributes.<locals>.<dictcomp>Tkeys)r   r   r   r   )r   r   r  r   r   r  )r   r   rp   r   r  r1   r  r
   r  r   !test_remove_multi_edge_attributes1  s   ,00
000

4


004r  c                  C   sp   t  t  t  t  g} | D ]%}t |sJ |td t |s'J |ddg t |r5J qd S )Nr   r   r   )	r   r   r$   r   r   is_emptyrw   r!   rz   )r   r	   r
   r
   r   test_is_empty  s   r  c                 C   s|   t jd| d}|dd tt |dgsJ tt |dgs#J tt j|ddddi fgs3J t |dks<J d S )Nr   r   r   r   r   TrJ   r   )r   r   rp   r   nodes_with_selfloopsr   selfloop_edgesnumber_of_selfloopsr  r
   r
   r   test_selfloops  s    r"  c                 C   sv   t jd| d}|dd |jdddd tt j|ddddi fddd	difgs+J tt j|d	dd
dgs9J d S )Nr   r   r   r   r   r5   TrJ   r4   )r   r   N)r   r   r   )r   r   rp   r   r   r  r
   r
   r   test_selfloop_edges_attr  s   " r#  c                  C   sR   t jdt jd} | jdddd | jdddd tt j| ddd	d
dgs'J d S )Nr   r   r   r   r5   r   r4   TrK   r  )r   r   r   r   )r   r   r   r   )r   r   r   rp   r   r   r   r
   r
   r   ,test_selfloop_edges_multi_with_data_and_keys  s   r%  c                 C   st   t jd| d}|dd |t j|dd |dd |t j|dd |dd |t j|ddd d S )Nr   r   r   Tr  rJ   )r  rK   )r   r   rp   r|   r   r  r
   r
   r   test_selfloops_removal  s   r&  c                 C   sP  t jd| d}|dd |dd |t | d| vs#J |dd |dd tt |t j|dd W d   n1 sIw   Y  |dd |dd tt	 |t j|dd W d   n1 stw   Y  |dd |dd tt |t j|ddd	 W d   dS 1 sw   Y  dS )
z[test removing selfloops behavior vis-a-vis altering a dict while iterating.
    cf. gh-4068r   r   r   r  Tr  NrJ   r$  )
r   r   rp   r|   r   r1   rt   ru   RuntimeError	TypeErrorr  r
   r
   r   test_selfloops_removal_multi  s(   "r)  c                  C   s   g d} g d}t  t  t  t  g}dddddfdddd	dfdddddfg}|D ](}|| t || d
d	ksAJ t || ddksLJ tt j	t j||d
 q/d S )Nr   )r   r   r   r   r   r   r   )costdistr   r   r*  r+  )
r   r   r$   r   r   rz   path_weightrt   ru   NetworkXNoPath)
valid_pathinvalid_pathr   r1   re   r
   r
   r   test_pathweight  s   
r0  r	   c                 C   sZ   |  g d g d}g d}g d}t| |sJ t| |r#J t| |r+J d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )rz   r   is_path)r	   r.  r/  another_invalid_pathr
   r
   r   test_ispath  s   r3  c                 C   `   |  g d | d t| g dddg}t| h dks#J t| dhks.J d S )Nr   r   r   r   r   r   r      r   r   r   r   rz   rn   r   restricted_viewsetr-   r1   r	   r_   r
   r
   r   test_restricted_view  s
   
r;  c                 C   r4  )N)r   r   )r   r   r   r   )r   r   r   )r   r   r   r   r   r5  r   )r   r   r   r6  r   r7  r:  r
   r
   r   test_restricted_view_multi  s   
r<  )%r   rt   networkxr   networkx.utilsr   r   r   r   r   markparametrizer   r$   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r#  r%  r&  r)  r0  r3  r;  r<  r
   r
   r
   r   <module>   s       /







V
D
Y

	

	





