
    xf8                     R
   d dl mZ d dlZd dlZd dlmZmZmZ d dl	m
Z d dlmZmZmZmZmZmZ d dlZd dlmZ d dl	Z	d dlZ ej0                  g dg dg d	g d
g dge      Z ej0                  g dg dg dg dg dge      Zed kD  j9                  e      Zg dg dej<                  ej<                  d ej<                  ej<                  gg dg dgZej@                  jC                  g dg dg dffd      Z"d d dej<                  ej<                  gdd dej<                  ej<                  gddd ej<                  ej<                  gej<                  ej<                  ej<                  d dgej<                  ej<                  ej<                  dd ggZ#ej@                  jC                  g dg dg d ffd      Z$d d dej<                  ej<                  gd d dej<                  ej<                  gddd ej<                  ej<                  gej<                  ej<                  ej<                  d dgej<                  ej<                  ej<                  dd ggZ% ej0                  g d!g d"g d#g d$g d%ge      Z& ej0                  g dg dg d&g d'g d(ge      Z' ej0                  d ej<                  ej<                  ddgej<                  d ej<                  dej<                  gej<                  ej<                  d ej<                  ej<                  gddej<                  d dgdej<                  ej<                  dd gge      Z( ejR                  de       ejT                  d)      z
  Z+ej<                  e+e+d kD  <    ej0                  g d*g d+g d,g d-g d.ge      Z, ej0                  g d/g d0g d1ge      Z- ej0                  d ej<                  ej<                  gd2d ej<                  gg d3ge      Z.g d4Z/d5 Z0d6 Z1d7 Z2d8 Z3d9 Z4e	jj                  jm                  d:d;efd<e'ff      e	jj                  jm                  d=g d>d d?gdd?gd d gf      d@               Z7e	jj                  jm                  dAdB      dC        Z8dD Z9dE Z:dF Z;dG Z<dH Z=dI Z>dJ Z?e	jj                  jm                  dKg dL      dM        Z@dN ZAdO ZBe	jj                  jm                  dKe/      dP        ZCe	jj                  j                   ej                         j                  dQ      dRS      dT        ZGdU ZHy)V    )StringION)assert_array_almost_equalassert_array_equalassert_allclose)raises)shortest_pathdijkstrajohnsonbellman_fordconstruct_dist_matrixNegativeCycleError)mmread)r      r   r   r   )r   r   r         r   r   r   r   r   )   r   r   r   r   )r   r   r   r   r   dtype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      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   shaper   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   )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   )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   r!   )r   r   r   )r   r   )r   r"   r   r"   )r"   r   )autoFWDBFJc                      ddt         j                  g} t        t        t        g}d }t        | |      D ]  \  }} |||        y )Nr   r   c                 @    t        t        d|       }t        ||       y )NF)directedlimit)r	   undirected_Gr   )r,   resultSPs      O/usr/lib/python3/dist-packages/scipy/sparse/csgraph/tests/test_shortest_path.pycheckz"test_dijkstra_limit.<locals>.checkd   s    lU%@!"f-    )npinfundirected_SP_limit_0undirected_SP_limit_2undirected_SPzip)limitsresultsr1   r,   r.   s        r0   test_dijkstra_limitr;   ^   sL    BFF^F$$G. VW- veVr2   c                  0    d } t         D ]
  } | |        y )Nc                 J    t        t        | dd      }t        |t               y NTFmethodr+   	overwriter   
directed_Gr   directed_SPr@   r/   s     r0   r1   ztest_directed.<locals>.checkm       :ft%*,!"k2r2   methodsr1   r@   s     r0   test_directedrJ   l   s    3
  fr2   c                  @    d } t         D ]  }dD ]  } | ||         y )Nc                     |r$t        t        | dd      }t        |t               y t        t        | dd      }t        |t               y NFr?   T)r   rC   r   r7   r-   r@   directed_inSP1SP2s       r0   r1   ztest_undirected.<locals>.checkw   s?    
6E*/1C%c=9Vd*/1C%c=9r2   TFrG   r1   r@   rO   s      r0   test_undirectedrT   v   s1    :  '( 	'K&+&	''r2   c                  0    d } t         D ]
  } | |        y )Nc                 J    t        t        | dd      }t        |t               y r>   )r   directed_sparse_zero_Gr   directed_sparse_zero_SPrE   s     r0   r1   z(test_directed_sparse_zero.<locals>.check   s!    1&4%*,!"&=>r2   rG   rI   s     r0   test_directed_sparse_zerorY      s    ?
  fr2   c                  @    d } t         D ]  }dD ]  } | ||         y )Nc                     |r$t        t        | dd      }t        |t               y t        t        | dd      }t        |t               y rM   )r   rW   r   undirected_sparse_zero_SPundirected_sparse_zero_GrN   s       r0   r1   z*test_undirected_sparse_zero.<locals>.check   sE     6vPU*/1C%c+DE 8RV*/1C%c+DEr2   rR   rG   rS   s      r0   test_undirected_sparse_zeror^      s2    F  '( 	'K&+&	''r2   zdirected, SP_ansTFindices)r   r   r   r   c                 8   t        j                  |      }t        j                  |t         j                        }|t        j                  ||d d f   d         }t        j                  |j
                  d   |j                        }t        |j
                  d         D ]  }|||   |f   ||<    d|t        j                  |      <   t        t        | |dd      \  }}}t        ||       t        ||       t        t        | |dd      }t        ||       y )Nr   r   )axisr!   Tr+   r_   min_onlyreturn_predecessorsF)r3   arrayint64argminzerosr    r   rangeisinfr	   rC   r   r   )	r+   SP_ansr_   min_ind_ans	min_d_anskr/   predsourcess	            r0   test_dijkstra_indices_min_onlyrq      s    
 XXfFhhwbhh/G"))F7A:$6Q?@Ka&,,7I6<<?# 1k!na/0	!1',K#$ *2)0*.59	;Bg
 b),{G,	*#!&+	
-B
 b),r2   n)
   d   i  c                 ,   t         j                  j                  d       t        j                  j                  | | dddt         j                        }|j                  t        j                  | t         j                               t        j                  |       }t         j                  j                  |       |d t        | dz         }t        |d|dd	      \  }}}t        |       D ]'  }||   }||   }	|d
k7  s||   |	k(  sJ ||   }|d
k7  r) y )Ni  g      ?lil*   )densityformatrandom_stater   r   g?Trb   r!   )r3   randomseedscipysparserandfloat64setdiagrh   bool_arangeshuffleintr	   ri   )
rr   datavr_   dsro   rp   rn   pss
             r0   test_dijkstra_min_only_randomr      s    IINN4<<Q3u*,BJJ  @DLL!288,-
		!AIIa
QrTmG *.)0*.59	;Bg
 1X GAJ5j1:?"?QA 5jr2   c                      d} g d}g d}g d}t         j                  j                  |||f| | f      }t        |dd       y )Nrs   )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   )g2}ƅ?gMg'?gx@e?gN]?ghn?g16T?g|\?g%e?gh o?g-?gn\?g$~?g<,Ԛ?ga?ge1?g{?gbE?g?r   Tr+   rd   )r}   r~   
csr_matrixr	   )rr   r_   indptrr   graphs        r0   test_dijkstra_randomr      sJ    
ADG2F0D LL##T7F$;Aq6#JEUTt<r2   c                  L    d} t        t        |             }t        |dd       y )Na  %%MatrixMarket matrix coordinate real general
                84 84 22
                2 1 4.699999809265137e+00
                6 14 1.199999973177910e-01
                9 6 1.199999973177910e-01
                10 16 2.012000083923340e+01
                11 10 1.422000026702881e+01
                12 1 9.645999908447266e+01
                13 18 2.012000083923340e+01
                14 13 4.679999828338623e+00
                15 11 1.199999973177910e-01
                16 12 1.199999973177910e-01
                18 15 1.199999973177910e-01
                32 2 2.299999952316284e+00
                33 20 6.000000000000000e+00
                33 32 5.000000000000000e+00
                36 9 3.720000028610229e+00
                36 37 3.720000028610229e+00
                36 38 3.720000028610229e+00
                37 44 8.159999847412109e+00
                38 32 7.903999328613281e+01
                43 20 2.400000000000000e+01
                43 33 4.000000000000000e+00
                44 43 6.028000259399414e+01
    Tr   )r   r   r	   )textr   s     r0   test_gh_17782_segfaultr      s%    D2 (4.!DTDd;r2   c                      t        j                  d      fd} dD ]&  }t        t        t        t
        fD ]  } | ||        ( t        t        t
        t        d       y )Nr   c                     |dz   } | t         dj                  |            }t        |t           j                  |             y )N)r   F)r+   r_   )rC   reshaper   r7   )funcindshapeoutshaper/   r_   s       r0   r1   z)test_shortest_path_indices.<locals>.check  s@    d?*u!//(35!"mG&<&D&DX&NOr2   ))r   )r   r   )r   r   r%   )r@   r_   )	r3   r   r	   r   r
   r   assert_raises
ValueErrorrC   )r1   r   r   r_   s      @r0   test_shortest_path_indicesr      s^    iilGP + "|WmD 	"D$!	"" *mZ!#r2   c                  ~    t         t        dt        t        dfd} t        D ]  }dD ]  } | ||         y )NrR   c                 p    t        t        | |dd      \  }}t        ||          t        ||          y )NFTr+   rA   rd   )r   rC   r   )r@   r+   r/   ro   SP_respred_ress       r0   r1   z test_predecessors.<locals>.check  s=     Vh+059;D 	""fX&67!$(:;r2   )rD   r7   directed_predundirected_predrH   )r1   r@   r+   r   r   s      @@r0   test_predecessorsr     sL    "$F#&(H<  $% 	$H&(#	$$r2   c                  @    d } t         D ]  }dD ]  } | ||         y )Nc                 l    t        t        |dd      \  }}t        t        ||      }t        ||       y )NFTr   r+   )r   rC   r   r   )r@   r+   rP   ro   rQ   s        r0   r1   z+test_construct_shortest_path.<locals>.check"  s5    !*+3,16:<	T $JxH!#s+r2   rR   rG   r1   r@   r+   s      r0   test_construct_shortest_pathr   !  s1    ,  $% 	$H&(#	$$r2   c                  @    d } t         D ]  }dD ]  } | ||         y )Nc                 h    t        t        |dd      }t        t        |dd      }t        ||       y )NFT)r+   rA   
unweighted)r   rC   unweighted_Gr   )r@   r+   rP   rQ   s       r0   r1   z#test_unweighted_path.<locals>.check0  s:    J%-&+'+- L%-&+',. 	"#s+r2   rR   rG   r   s      r0   test_unweighted_pathr   /  s1    	,  $% 	$H&(#	$$r2   c                      t        j                  ddg      dj                  d d d<   dd<   fd} dD ]  }dD ]  } | ||         y )	Nr   r   r   r#   )r   r   c                 4    t        t        t        | |       y )N)r   r   r   )r@   r+   r   s     r0   r1   z#test_negative_cycles.<locals>.checkF  s    (-	 r2   r%   r(   r'   rR   )r3   onesflat)r1   r@   r+   r   s      @r0   test_negative_cyclesr   @  s]    GGQFOEEJJssOE$K  $ $% 	$H&(#	$$r2   r@   r   c                 L    t        t        | d      }t        |t        d       y )NTr   g|=)atol)r   directed_negative_weighted_Gr   directed_negative_weighted_SPrE   s     r0   test_negative_weightsr   O  s    	3Vd	KBB5EBr2   c                  x    t         j                  j                  t        d       d } t        D ]
  } | |        y )Nr   c                 J    t        t        | dd      }t        |t               y r>   rB   rE   s     r0   r1   z test_masked_input.<locals>.checkX  rF   r2   )r3   mamasked_equalrC   rH   rI   s     r0   test_masked_inputr   U  s3    EEz1%3
  fr2   c                      t        j                  g dg dg dg dg dgt              } | j                         }t	        |d       t        ||        y )	Nr   r   r   r   r   r   F)rA   )r3   re   floatcopyr   r   )Gfoos     r0   test_overwriter   a  sI    
/!!!!	# +0		1A
 &&(C#'sAr2   c                     t         j                  j                  dgg      }d|j                  j                  d<   t        ||        y )Ng      ?F	WRITEABLE)r@   )r}   r~   r   r   flagsr   )r@   r   s     r0   test_bufferr   l  s8     	"'A %AFFLL!F#r2   mips64ztest known to fail on mips64el)reasonc                      t        j                  d      5 } t        t        j                  ddgt        j
                  dgg             d d d         D ]  }|j                  t        urJ  y # 1 sw Y   %xY w)NT)recordr   r   )warningscatch_warningsr   r3   re   nancategoryRuntimeWarning)r   rs     r0   test_NaN_warningsr   x  sj    		 	 	- 7bhhA4567 0zz///07 7s   3A..A7c                     t        j                  g dg dg dg dg dgt              } t        |       }t        j
                  j                  |       }t        j
                  j                  |       }t        j
                  j                  |       }t        |t        |             t        |t        |             t        |t        |             y )N)r   r   r   r   r   )r   r   r"   r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   )
r3   re   r   r   r}   r~   r   
csc_matrix
lil_matrixr   )G_denser/   G_csrG_cscG_lils        r0   test_sparse_matricesr     s    hh('''	) 16	7G
 
w	BLL##G,ELL##G,ELL##G,Eb-"67b-"67b-"67r2   )Iior   r   numpyr3   numpy.testingr   r   r   pytestr   r   scipy.sparse.csgraphr   r	   r
   r   r   r   scipy.sparser}   scipy.ior   platformre   r   rC   r-   astyper   r4   rD   r~   r   rW   rX   r]   r\   r   r7   r6   r   eyer5   r   r   r   rH   r;   rJ   rT   rY   r^   markparametrizerq   r   r   r   r   r   r   r   r   r   r   r   r   skipifmachine
startswithr   r    r2   r0   <module>r      sO      X X *6 6    RXX&&&&	( 05	6
 rxx((((	* 27	8 Q&&u-2662662	  00/-<-<->2? 5; 1 < 
 q!RVVRVV4!Q/!Q/vvrvvrvvq!4vvrvvrvvq!4	6  !<<224L/G/G/I4J 7= 3 > 
  Arvvrvv6Aq"&&"&&1Aq"&&"&&1A6A6	8  --=--	/ 7<	= /))))	+ 38	9 !1bffbffa";#%661bffa"@#%662661bffbff"E#$aA"6#$bffbffa";	"= EJ	K   e4vrvvay@ 3566 +a/ 0"((/////	1 9>	?  (rxx)3)3)5<A C  !)1bffbff*=+-q"&&/*5*7>C!E  )' '  +- -023 YAAA$GH- I3-0 o. /,	=<<#"$$$$"$ #45C 6C
	 7+$ ,$ $H$$&11(;Dde0 f08r2   