L i ddlZddlZddlZddlmZmZmZmZm Z ddl Z ddl m Z ddl mcmZddlmZddlmZddlZdZefdZej2j5dgd Zej8gd d gd d gd d gd d gd dgd dgd dgd dgd dgd d gd d gd d gd d gd dgd dgd dgd dgd dgd d gd dgd d gd dgd dgd d gd d gd dgd dgd d gd dgd d gd d gd d gd dgd dgd dgd dgdd gdd gdd gdd gddgddgddgddgddgdd gdd gdd gddgddgddgddgdd gddgdd gdd gddgddgdd gddgddgdd gddgdd gdd gdd gdd gddgddgddgddgddgdd gdd gdd gdd gddgddgddgddgddgZej8ddgddgddgddgddgddgddej<ej>j@z gddgddgg Z!ej2jEddej8ddgddgddgddgggZ#e#ej2jEdddej8ddgddgddgddggzgzZ$ejJeej2jEddej2jEddej2jEddej2jEddej2jEddej2jEddej2jEddee!d Z&e#dfe$dfd Z'd!Z(e&D]Z)d"D] Z*e(e)e* Gd#d$Z+Gd%d&Z,Gd'd(Z-Gd)d*Z.d+Z/Gd,d-Z0Gd.d/Z1Gd0d1Z2e jfjid2eejjgd3Z6d4Z7d5Z8y)6N) assert_equalassert_almost_equalassert_assert_allcloseassert_array_equal)raises)cKDTree)Voronoic*tt|SNtuplesortedxs d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/spatial/tests/test_qhull.py sorted_tuplers  cXt|tjr|j}t|tjr|j}t t ||}|j t t ||}|j t||yr ) isinstancenpndarraytolistlistmapsortr)abtpls r!assert_unordered_tuple_list_equalr sp!RZZ HHJ!RZZ HHJ Sa[AFFH Sa[AFFHAr)rrrr$rr$r$?r()r(g?gQ gzGgQgHzGgHzG?gQ?gzG@gQ @r$ ?) some-pointsz random-2dz random-3dz random-4dz random-5dz random-6dz random-7dz random-8dpathological-1pathological-2)zbug-2850z bug-2850-2ct|}|jd}d}|dz}|dk(rd}n|dk(rd}|d|g}t|t||D]}|j ||||z|d|}|t vsJ||ft |<y) z< Generate incremental datasets from basic data sets r$Nr,r5zQJ Ppr6 z-chunk-)DATASETSshaperangelenappendINCREMENTAL_DATASETS) name chunksizepointsndimoptsnminchunksjnew_names r _add_inc_datarI]sd^F <<?D D !8D } ! !Udm_F 4Vi 0- fQq{+,-wyk*H / // /&,d^"r)r$r0ceZdZdZdZy) Test_Qhullc tjdtjddgddgddgddgddggd}t j |j }tjdtjddgddgddgddggd}t j |j }t j |j }|jt j |j }|jtt|j tt|j t|d|dt|d|dtt|d |d tt|d |d tt|d |d t|d|dt|d|dtt|d |d tt|d |d tt|d |d |jtt|j |jtt|j y) Nvrr$?r(sQz@rr,r/r0)qhull_Qhullrarraycopydeepcopyget_voronoi_diagramclose assert_raises RuntimeErrorrr rr)selfrxdyydxd2yd2s r test_swappingzTest_Qhull.test_swapping}s LLAa5!A!uaVSI"FG ]]1002 3 LLAa5!A!uaV"<= ]]1002 3mmA1134  mmA1134  lA$9$9:lA$9$9:1s1v&)"Q%Q\J)"Q%Q\J)"Q%Q\J2a5#a&)1s1v&)"Q%Q\J)"Q%Q\J)"Q%Q\J2a5#a&)  lA$9$9:  lA$9$9:rc ztjddgddgddgddgddgddgddgddgddgg }t|y)Nrr$r,)rrTr )r[rBs rtest_issue_8051zTest_Qhull.test_issue_8051sTVaVaVaVaVaVQFQFQPQF S  rN)__name__ __module__ __qualname__rarcrrrLrL|s $;LrrLceZdZdZdZdZdZdZdZdZ ddZ e jjd d Ze jje jjd d Zy ) TestUtilitiesz- Check that utility functions work. cXtjgdtj}tj|}t |j gdgdgdD]M}|j|dd}t ||d|tj||dd}t ||Oy)Nr"r#r&r%dtyper$r/r,r/r$r))r-r-r$)?rpr)333333?皙?r$r,err_msg) rrTfloat64rRDelaunayr simplices find_simplextsearch)r[rBtripirGs rtest_find_simplexzTestUtilities.test_find_simplexs6bjjInnV$ S]]Y $:;! A  2A'A AaDQE 3 c1Ra5)A A   rctjgdtj}tjddgtj}tj|}|j |}|j |}|j |}t|jD]\}}||d} ||d} ||d} tj| | z | | z } | tjtj| | z} | tj| d z} tj| || z } t||| y)N)r"r&r%)g]2ʐ?g>mj?)g~T!?g^Rz?rlgB?g?rr$r,)rrTrurRrv lift_pointsplane_distance enumeraterwcrosssqrtdotsignr)r[rr{rzzpzdistrGvx1x2x3nds rtest_plane_distancez!TestUtilities.test_plane_distances$ HH079zz C HHj*-RZZ @nnQ OOA  __Q !!!$cmm, ,DAq1Q4B1Q4B1Q4Bb"r'*A 1& &A "''!A$- Aq"r'"A Q + ,rctjgdtj}tj|}t |j ddgddgddgddggy)Nrkrlr/r,r$r)rrTrurRrvr convex_hullr[rBrzs rtest_convex_hullzTestUtilities.test_convex_hullsN6bjjInnV$ S__1v1v1v1v&FGrctjgd}tj|}t |j dddt |j dddy)N)rrr)rr$r)r$rr)r$r$r)rrr$)rr$r$)r$rr$)r$r$r$rO+=zVolume of cube is incorrectrtolrt@zArea of cube is incorrectrrTrR ConvexHullrvolumearear[rBhulls rtest_volume_areazTestUtilities.test_volume_areasQGH' Re = ? 2E ; =rctjgd}tj|}t |j dddt |j dddy)N) )gQ4?gΜR@?gX&lL5?)gfNz?gjM?g{D흚j?)ga?8\?g?gw5K?)g,lnq?g6=?gU?)gw컝?g`?ga?)g+q?g\hϱ?gLg ?)gGe?gE9;?gd:L?)gȊKB?gBYM?g?)g~EHy?gUdk?gmVq"?)gqp?ge?g\*L?gY/?Hz>z(Volume of random polyhedron is incorrectrg\4?z&Area of random polyhedron is incorrectrrs rtest_random_volume_areaz%TestUtilities.test_random_volume_areasW M N' Ze J L 95 H Jrcd}d}tjj||f}tj|d|dzddfd}tj|d|dzddfd}t |dz|D]}tj|d|dzddf}|j |||dzddf|j |||dzddfdt |j|jd t |j|jd t |j|jd t |j|jd y) zwTest that incremental mode gives the same volume/area as non-incremental mode and incremental mode with restartr/Nr$T incrementalrestartrr) rrandomrRrr< add_pointsrrr)r[ nr_pointsdimrBinc_hullinc_restart_hullr|rs r)test_incremental_volume_area_random_inputz7TestUtilities.test_incremental_volume_area_random_input sC !!9c"23##F6CE619$54H ++F6CE619,=4Ps1ui( IA##F4AaC47O4D   q1uax 0 1  ' 'q1uax(8$ ' G DKKt D DKK)9)@)@t L DIIx}}4 @ DII'7'<'<4 H Irc |j|j}d|jdzz }|jd|z}d}t j t j} ||j|} t jd5t j| jdt| |z |z dkjdz} dddt j|d t j| |dddd ddf|ddd dddfz } t jt!|j"D cgc]+} tj$j'| | ddddf-c} }t j(|jddd d f|t j*| kz} t| j|d t j| |j-|}|d k7t j|jddd d fz} t| j|d t j| |rl||kj/d}||d|z k\j/dz}|d k7|z} t| j|d t j| yy#1swY xYwcc} w) z@Check that a triangulation has reasonable barycentric transformsr$rOaxiscj|dddddf}|ddddddf}tjd|||z S)Nr*z ijk,ik->ij)reinsum)trrrTinvs rbarycentric_transformzJTestUtilities._check_barycentric_transforms..barycentric_transform(s;1R6 AaAg;D99\4Q7 7rignore)invalidg?N r*r)rBrwrCsumrfinfofloateps transformerrstateisnanallabsrnonzerorTr<nsimplexlinalgdetisfiniterrxany)r[rzrt unit_cube unit_cube_tolverticessc centroidsrrcokqkrrG at_boundarys r_check_barycentric_transformsz+TestUtilities._check_barycentric_transformss::cmm, 3 LLaL(2-  8 hhuo!! !#-- ; [[ * N!a(CBKNS,@+E+E1+E+MMB N WIQrzz2#&789 Qss1W 2d1 5 5$)#,,$79 99==1Qq529: [[q1u- .&2773<2G HWIQrzz2#&789   Y '2g#--!A"67 7WIQrzz2#&789 $ 5:::BK I])::??Q?G GKr'[(B BFFH 2::rc?*;< = % N N9sA K"0K/"K,r+ctjtjj tjj t dd}|d}|jtj|}tj|jddddfj}t|dk||j|y)Ndatazdegenerate_pointset.npzrr)rloadospathjoindirname__file__rXrRrvrrrrr)r[rrBrz bad_counts r&test_degenerate_barycentric_transformsz4TestUtilities.test_degenerate_barycentric_transformsJswwrww||BGGOOH$=v$=?@c nnV$HHS]]1Qq512668  B * **3/rrc tjtj}ddddd}t ddD]}tj dd ||}tj tttjtjtj|g|zj}d |}tj|}|j||d tj j#d tj j%|j&ddk}||ddfxxd|ztj j$||ddfj&dz zz cc<tj|}|j||d d|ztjtj(||f}|j||d d|zy)NF r1r/)r,r/r0r1r,r2rr$zndim=T)rtrr!rrr()rtrr)rrrrr<linspacec_rrravelbroadcast_arraysix_TrRrvrrseedrandr;r_) r[rnpointsrCrgridrtrzms r test_more_barycentric_transformsz.TestUtilities.test_more_barycentric_transforms\s hhuo!!RA!,!QK DD Aq'$-0A55S2#6#6!T8K#LMNa dVnG..&C  . .sG9= / ? IINN4  1 .4A 1I3 QqS  @3 FG GI..&C  . .sG9==>sU / D ..tTz!23C  . .sG9==>sU / D5 DrN)Fr)rdrerf__doc__r}rrrrrrpytestmark fail_slowrslowrrgrrriris *,6 H =J(I":<0545+>Z [[200" [[ [[2#D#Drric$eZdZdZdZdZdZy)TestVertexNeighborVerticesc t|jjdDcgc] }t}}|jD]*}|D]#}|D]}||k7s ||j |%,|j \}}t|jjdDcgc]'}ttt|||||dz)} }t| || d|ycc}wcc}w)Nrr$z != rs) r<rBr;setrwaddvertex_neighbor_verticesrintr) r[rzrGexpectedsrrindptrindicesgots r_checkz!TestVertexNeighborVertices._checks#()9)9!)<#=>aCE>> +A ++AAv  *+ + + 66cjj..q1243sGF1IfQqSk:;<44 S(sgT(,FG?4s C&$,C+ctjgdtj}tj|}|j |y)N)r"r#r%rlrrTrurRrvrrs r test_trianglez(TestVertexNeighborVertices.test_triangles1/rzzBnnV$ Crctjgdtj}tj|}|j |y)Nrkrlrrs rtest_rectanglez)TestVertexNeighborVertices.test_rectangles16bjjInnV$ Crctjgdtj}tj|}|j |y)N)r"r#r&r%r')g?r(rlrrs rtest_complicatedz+TestVertexNeighborVertices.test_complicateds73:<**FnnV$ CrN)rdrerfrrr r rgrrrrs H  rrceZdZdZdZej jdZdZ dZ dZ dZ dZ d Zd Zej j!d eed Zy ) TestDelaunayz* Check that triangulation works. ctjjd}ttt j |yNr$)rma masked_allrY ValueErrorrRrvr[ masked_arrays rtest_masked_array_failsz$TestDelaunay.test_masked_array_failss&uu''* j%..,?rctjddddtjfgtj}t t t j|y)Nr"r#r&r$rl)rrTnanrurYrrRrvr[points_with_nans rtest_array_with_nans_failsz'TestDelaunay.test_array_with_nans_failss7((E5%!BFF#DBJJWj%../Brc tddD]}tj|dz|f}t|D] }d|||f< d|dddf<tj|}|j j t|j tj|dztdddft|jdtj|dztdddfzy)Nr,r4r$rOr*rl) r<rzerosrRrvrwrraranger neighbors)r[ndrBrGrzs rtest_nd_simplexzTestDelaunay.test_nd_simplexs1+ RBXXr!tRj)F2Y "!qs  "F2a4L..(C MM    "Q$c(B47(K L RXXr!tC-Ha-P(P Q Rrctjgdtj}tj|}t |j gdgdgt |jgdgdgy)Nrkrlrnro)r*r*r$)r*r*r)rrTrurRrvrrwrrs rtest_2d_squarezTestDelaunay.test_2d_squaresK6bjjInnV$S]]Y $:;S]][+$>?rctjgdtj}tjgdtj}tj||f}tj||f}t j tj ||ft j tj ||fy)N)rr$rr$rl)rrr$r$)rrTrurrRrvr)r[rr]xpyps rtest_duplicate_pointsz"TestDelaunay.test_duplicate_pointss~ HH\ 4 HH\ 4 UU1a4[ UU1a4[ ruuQT{# ruuRV}%rcttd}tj|}t|j|j j |j t|j|j j|jtd}tj|}t|j|j j |j t|j|j j|jy)Nr6r7)r:rRrvrrBrwmaxminrs rtest_pathologicalzTestDelaunay.test_pathologicals*+nnV$SZZ .224fjjlCSZZ .224fjjlC*+nnV$SZZ .224fjjlCSZZ .224fjjlCrcBtjjdd}tj||f}t j |d}t tj|jjtjt|y)Nr+r,z QJ Qbb Pp qhull_options) rrrrrRrvruniquerwrrr=rs r test_jogglezTestDelaunay.test_jogglesjA&vv~&nnV;?299S]]%8%8%:;99S[1 3rc rtjjdd}tj||f}t j |}t ttj|jjt|dzk(t t|jt|dzk(t ttj|jdddft|dzk(t tj|jdk\y)Nr+r,r)rrrrrRrvrr=r/rwrcoplanarrvertex_to_simplexrs r test_coplanarzTestDelaunay.test_coplanarsA&vv~&nnV$BIIcmm11345VaGHCLL!S[!^34BIIcll1Q3/01S[!^CDs,,123rcgd}tj|d}tjddg}t |j |y)Nr"r#r%r')皙?r7T furthest_site)r$r0r)r0r,r)rRrvrrTrrw)r[rBrzrs rtest_furthest_sitezTestDelaunay.test_furthest_sites8AnnV4888Y 233==(3rr@ct|\}}tj|d}tj|dd|}|ddD]}|j |tj|}tj|dd|}t |dkDr+|j tj|dddd|jdrttj|jjtj|jdttj|jjtj|jdn&t|j|jtt|j|jty) NrrTrr.r$r pathologicalrQ)r?r concatenaterRrvrr= startswithrr/rwrrr;r r) r[r@rFrDrBobjchunkobj2obj3s rtest_incrementalzTestDelaunay.test_incrementalsb,D1 Q/nnVAYD+/1ABZ "E NN5 ! "~~f%~~fQiT,02 v;? OOBNN6!":A>$(  * ??> * ryy)<)<)>?!yya9 ; ryy)=)=)?@!yya9 ; .cmmT^^2> @ *$..$...: >2BGGDMM4J K 4>>2DMM Brct|\}}tj|d}tj|dd}|ddD]}|j |tj|}tj|dd}t |dkDr+|j tj|ddddt||j|jt||j|jy)NrrTrr$r) r?rr>rRrrr=rSrw) r[r@rF_rBr@rArBrCs rrDzTestConvexHull.test_incremental|s). Q/vayd;ABZ "E NN5 ! "'q t< v;? OOBNN6!":A>$(  * 63==$..A63==$..Arc tjjdtjjdd}t j |}t tj|jtj|j|j|jj\}}tj||jz ||jz }ttj tj"tj$|dkDy)Nr!r.r,r)rrrrrRrrr/rwrrrBrarctan2meanrrdiffunwrap)r[rBrrr]angles rtest_vertices_2dzTestConvexHull.test_vertices_2ds tA&'RYYt~~. 0FG{{4==)++1 1qvvx<QVVX6rwwryy/01456rctjgd}tj|}t |j ddt |j ddy)NrrOrrrrrs rrzTestConvexHull.test_volume_areasGGHv& BU3"51rrFTctjddgddgddgddgddgg}tj||d}tjgdt}|j }t ||y) Nrr皙?rq333333?QG4rBrr.)FTFFrlrrTrRrboolgoodrr[rrBrractuals r test_good2dzTestConvexHull.test_good2dsyC::::: '( v,7.35887tDVX&r visibilityrgzQG-4znew_gen, expectedrqgffffff?)FFFFFrlgffffff)FTFFFg= ףp=?)FFFTTr(rf)FFTFFg433333?ctjddgddgddgddgddgg}tj|d|}|j ||j }d|vrtj |}t||y)NrrrerqrfTrh-)rrTrRrrrkinvertr)r[new_genrrorBrrms rtest_good2d_incremental_changesz.TestConvexHull.test_good2d_incremental_changessNC::::: '( v,0.8:   * yy*HVX&rctjddgddgddgddgddgg}tj||}|j}|J|r5|j tj d|j}|Jyy)Nrrrerqrf)rBrr$r,)rrTrRrrkrr)r[rrBrrms rtest_good2d_no_optionz$TestConvexHull.test_good2d_no_optionsC::::: '( v,79~~  OOBHHV, -YYF> !> rctjddgddgddgddgddgg}tj||d}tjgdt}|j }t ||y)Nrrrerqrgrh)FFFFrlrirls rtest_good2d_insidez!TestConvexHull.test_good2d_insidesy C::::: '( v,7.35888EVX&rctjgdgdgdgdgdg}tj||d}tjgdt }t |j |y) Nr)r)r))gN7?g+xٿgg>@?)gFE%'?gWۧ=g/J?)g6r?gtĭ4gŷ)gw6y?gQgb?QG0rh)TFFFrl)rrTrRrrjrrk)r[rrBrrs r test_good3dzTestConvexHull.test_good3dsb?@@A@ BC v,7.35887tDTYY)rN)rdrerfrrrrErrFrr:rYr?rDrbrrnrrTrjrtrwryr}rgrrrUrUaslB [[EE [[VVH%56C7C  [[VV,@%ABBCB( 72 [[]UDM: '; ' [[\#$, ! [[0 C:,  5T B D C;- 4D A C C;- 34 @ B C:Sz* + 4D A C C%& ' 5T B D93  >'? !F'$ [[]UDM:";"$ [[]UDM:';'  [[]UDM: *; *rrUceZdZejj dddgejj dddgejj ddd gd Zd Zd Zd Z ejj de e dZ dZ dZejjdejj de edZy) TestVoronoizqhull_opts, extra_pts)z Qbb Qc Qzr$)zQbb Qcrn_pts2drCr,r/c>tjjd}|j||f}t||}|j}|j |dz |zk(sJ|j t|j|z k(sJt|j||zk(sJ|jjd|k(sJ|rN|jD cgc] } t| } } | jddk(sJ| jd|vsJyycc} w)Ninr-r$r) rr default_rngr point_regionr)sizer=regionsrBr;countindex) r[ qhull_optsr extra_ptsrCrngrBvor pt_regionrsublenss rtest_point_region_structurez'TestVoronoi.test_point_region_structure sii##D)UDM*fJ7$$ }}%!)i"7777~~S[[!1I!====3;;59#4444zz"e+++ '*{{3!s1v3G3==#q( ((==#94 44 3sDctjjd}ttt j |yr)rrrrYrrRr rs rrz#TestVoronoi.test_masked_array_failsBs&uu''* j%-->rc4gd}d}|j||y)N) r"r#)rr,r%r&rv)r,r)r,r$)r,r,a  2 5 10 1 -10.101 -10.101 0.5 0.5 0.5 1.5 1.5 0.5 1.5 1.5 2 0 1 3 2 0 1 2 0 2 3 3 0 1 4 1 2 4 3 3 4 0 2 2 0 3 3 4 0 3 2 0 4 0 12 4 0 3 0 1 4 0 1 0 1 4 1 4 1 2 4 1 2 0 2 4 2 5 0 2 4 3 4 1 3 4 3 6 0 3 4 4 5 2 4 4 4 7 3 4 4 5 8 0 4 4 6 7 0 3 4 7 8 0 4 _compare_qvoronoir[rBoutputs r test_simplezTestVoronoi.test_simpleFs#*  @ vv.rc *|jjDcgc])}ttt|j +}}t |dd}ttt|dd|z}t |dd}|d|zd|z|zDcgc]!}|ddDcgc]}t |dz c}#} }}|d|z|zdDcgc]}|ddDcgc] }t |c} } }}|d|z|zdDcgc]!}|ddDcgc]}t |dz c}#} }}tj|fi|} d} t| j|tttt| jttt| tttt| | tt| | }tttt| | j j#tt| | j$}|j'|j't||ycc}wcc}wcc}}wcc}wcc}}wcc}wcc}}w)z:Compare to output from 'qvoronoi o Fv < data' to Voronoi()r$rr/r,Nc*tt|Sr r rs r sorttuplez0TestVoronoi._compare_qvoronoi..sorttuples# #r)strip splitlinesrrrsplitrrrRr rrrrrzip ridge_pointsrridge_verticesr)r[rBrkwrnvertexrnregionr]rrrrrp1p2s rrzTestVoronoi._compare_qvoronoiosX8>||~7P7P7RS!$s5!''),-SSfQil#E6!AgI#678fQil#"1W9QwYw->?A'(e,CF1H,AA"(' '(9(:!;=*+1Q0AQ0= =$*!G)G*;*<#=?./qrU33q6!83??mmF)b) $  h/SUCKK01UG,- /#d3y,783y.9:<= #d3y#*:*:*A*A*CDE3y#*<*<=>@A    R9T-A0=3?sM.I/# I9/I4 I9 J&I? 8J JJ /J4I9?J Jr@ct|}t|}tj|}|jj D]\}}t jt j|dk\s2|j|jd}d||d|z z}|j||zd\} } t| |d|j||z d\} } t| |dy)Nrrgư>r$)r) r:KDTreerRr ridge_dictitemsrrasarrayrr^queryr) r[r@rBtreerr{rridge_midpointrrrs r test_ridgeszTestVoronoi.test_ridgess $f~mmF#NN((* "DAq66"**Q-1,- \\!_11q19Nqt ~56Ajj!!3qj9GD! AaD !jj!!3qj9GD! AaD ! "rc8gd}d}|j||dy)Nr6a' 2 3 5 1 -10.101 -10.101 0.6000000000000001 0.5 0.5 0.6000000000000001 3 0 2 1 2 0 1 2 0 2 0 3 0 2 1 5 4 0 2 0 2 4 0 4 1 2 4 0 1 0 1 4 1 4 0 1 4 2 4 0 2 Tr8rrs rr:zTestVoronoi.test_furthest_sites%A $ vvTBrcgd}t|}t|jdt|d}t|jdy)Nr6FTr8)r rr9)r[rBrs rtest_furthest_site_flagz#TestVoronoi.test_furthest_site_flags<AfoS&&u-f40S&&t,rr+c8t|ddjddkDryt|\}}tj|d}t j |dd|}|ddD]}|j |t j |}t j |dd|}t|dkDr+|j tj|ddddtt|jt|jtt|jt|j||fD]dditjD]>\} } t|jD]!\} } tj| | s| | <#@fd d } t| j| |jt| j| |jy) Nrr$r/rTr<rr*ct|drt|Dchc] }| c}S |Scc}w#t$r#}dj|}t ||d}~wwxYw)N__len__z*incremental result has spurious vertex at )hasattrrKeyErrorrrJ)rr]emessageobjxremap vertex_maps rrz+TestVoronoi.test_incremental..remapsu1i( A!6q%(!6779%a=("7 9"%%)]]1%5$8 :G(1q89s38 A$AA$cttt|}d|vr|jd|Dcgc]}t |dkDs|}}|j |Scc}w)Nrgr$)rrrremover=r)rrs r simplifiedz0TestVoronoi.test_incremental..simplifiedsVC a01;LL$$)8qSVaZ88  9s AA)r?r;rr>rRr rr=rrrrrIrr)r[r@rFrDrBr@rArBrCr|rrGv2rrrrs @@@rrDzTestVoronoi.test_incrementals  %a ( + 1 1! 4q 8 +D1 Q/mmF1I4+/1ABZ "E NN5 ! "}}V$}}VAYD+/1 v;? OOBNN6!":A>$(  * S))*C0A0A,BCS))*C0A0A,BCI DbJ!$--0 *1&t}}5*EAr{{1b)() 1 * *  9  5./4<<(  5!4!4564../ ; rN)rdrerfrrrFrrrrrr:rr:rrr?rDrgrrrrs [[4  7  [[Wr3i0 [[VaV,5-1 54?'/R D [[VVH%56"7"0C0- [[2 [[VV,@%AB=C=rrc eZdZddZej j deje gdZ dZ dZ dZ dZej j ded d d Zej j d ej"gd ej"gd gdgdggdZdZdZdZy)Test_HalfspaceIntersectionct|j|jtj|jdft}|D]W}tj t ||z |kjdd}t|jdd||d<Yt|jy)z2Check that every line in arr1 is only once in arr2rrlr$r)r$TN) rr;rrrjrrrr)r[arr1arr2rtruthsl1indexess rassert_unordered_allclosez4Test_HalfspaceIntersection.assert_unordered_allclosesTZZ,4::a=*$7 &Bjj#dRi.4"7!} tt j0|j| k(j3d d@y) Nrzselfdual-4d-polytope.txtr$)r)r)r)r))r0g@@rr2r*)r)r)r(r)rrrrrr genfromtxthstackrTrRrrrr;r dual_volumer= dual_facetsrrr dual_points itertools permutationsrr) r[fnameineqsr feas_pointhsfacetdistsrBpoints r$test_self_dual_polytope_intersectionz?Test_HalfspaceIntersection.test_self_dual_polytope_intersection(s RWW__X679 e$iiq!"uuQU| <== XX./  ( (Z @R%%++W5BNND1S("-^^ (E UQ ' (1b5!Jq#2#v$6$:$::$FF && 1crc6(:(<(@hhqkJN#P]]5++3H I ? # 2 2: > ? ? ?s B11B:cDtjgdgdgdgdg}tj|tjdd}t j td 5|jtjd dddy#1swYyxYw) Nrrrrr,Trz2D arrayr)r0r0r0) rrTrRrrrrrronesr[r r s rtest_2d_add_halfspace_inputz6Test_HalfspaceIntersection.test_2d_add_halfspace_inputs(([+F#("="=n>@hhqkJN#P]]:Z 8 G # 2 227793E F G G Gs (%BBctjgdgdgdgdg}tj|tjdd}t |j tjd|jtjgd t |j tjd y) Nrrrrr,Trr0)r,r,r*r1) rrTrRrrr dual_verticesrrrs rtest_1d_add_halfspace_inputz6Test_HalfspaceIntersection.test_1d_add_halfspace_inputs(([+F#("="=n>@hhqkJN#P /==ryy|L..rxx /CD/==ryy|LrN)r)rdrerfrrrrFrrurrrrrDrr<rrTr rrrrgrrrrs  [[TBJJ#45 46 4M.O.)V"6H [[S%!*-R.RD [[\ RXX45 RXX65-/0, ?  ??& G Mrr diagram_typectjjd}|jd}tjt d5||dddy#1swYyxYw)N{)r0r+r/ dimensionsr)rrrrrr)rr invalid_datas r test_gh_20623r sO ))   $C::j)L z 6#\"###s AA'cltjddgddgddgddgg}tj|}t j t 5|jddddt j t 5|j|dddy#1swY=xYw#1swYyxYw)Nrr7r$)rrTrRrvrr IndexErrorrx generatorsrzs r test_gh_21286r"sAq6As8aVaV<=J .. $C z "  z " sBB*B'*B3ctjddgddgddgddgg}tj|}t j t 5|jgddddy#1swYyxYw)Nrr7r$)r,r,r,)rrTrRrvrrrrxr s rtest_find_simplex_ndim_errr$sfAq6As8aVaV<=J .. $C z "$ #$$$s A--A6)9rrUnumpyr numpy.testingrrrrrrrrYscipy.spatial._qhullspatial_qhullrR scipy.spatialr rr rrrr rrrBrTpathological_data_1rrurpathological_data_2rbug_2850_chunksbug_2850_chunks_2rr:r?rIr@rArLrirrrSrUrrrrFrvrr"r$rgrrr/sG II *$$+!16  t =bhh  5M %= #(- 27  3K   %d| .3D\  4L - #( 27u   5M  #;  "'t  05Tl    4L   ,   "'u   16d|    5M   #;   "'t   05Um   5M $< #( 16e}  4L - #( 27u   3K  !&d| /4D\  K e  #5k -0; :=S   J T  !J *-T  6:%L  %L , "&c  .2$K  $K t  $El .2$K  %L , "&d  /34[  %L *  $Dk -1<   $K!  u!  !%U|!  /35\! " %L# "*# " $Dk# "-1;# $ $K% $t% $ $El% $.2%L% & %L' &,' &"&c ' &.2$K' ( $K) (t) ( $Dk) .bhhHr1gAwGaVaVXRXXbjj ! % %%&AA  99>>"a(288aUQqEAa51Q%89 %iinnR+XRXX!uqeaUQqE&BCCEE 2::f%A&A&A&A&A&A&A&)) !$'$d+ 44 'D' dI&'' ++\XDXDvBA<A>)BC#D# $r