Ë
    âQ(h"Ã  ã                   óú  — d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
Z
d dl
mZ d dlmc mZ d dlmZ d dlmZ d dlZd„ Zefd„Zej2                  j5                  d«       g d	¢Z ej8                  g d
d
g‘d
dg‘d
dg‘d
dg‘d
dg‘d
dg‘d
dg‘d
dg‘d
dg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘dd
g‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘ddg‘«      Z ej8                  ddgdd gddgd dgd d gd dgdd ej<                  ej>                  «      j@                  z
  gdd gddgg	«      Z!ej2                  jE                  dd«       ej8                  d d gd dgdd gddgg«      gZ#e#ej2                  jE                  dd«      d ej8                  d d gd dgdd gddgg«      z   gz   Z$ ejJ                  e«      ej2                  jE                  dd«      ej2                  jE                  dd«      ej2                  jE                  dd«      ej2                  jE                  dd«      ej2                  jE                  dd«      ej2                  jE                  dd«      ej2                  jE                  dd«      ee!dœ
Z&e#dfe$dfd œZ'd!„ Z(e&D ]  Z)d"D ]  Z* e(e)e*«       Œ Œ  G d#„ d$«      Z+ G d%„ d&«      Z, G d'„ d(«      Z- G d)„ d*«      Z.d+„ Z/ G d,„ d-«      Z0 G d.„ d/«      Z1 G d0„ d1«      Z2e
jf                  ji                  d2eejj                  g«      d3„ «       Z6d4„ Z7d5„ Z8y)6é    N)Úassert_equalÚassert_almost_equalÚassert_Úassert_allcloseÚassert_array_equal)Úraises)ÚcKDTree)ÚVoronoic                 ó*   — t        t        | «      «      S ©N©ÚtupleÚsorted©Úxs    ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/spatial/tests/test_qhull.pyÚsorted_tupler      s   € Ü”˜“ÓÐó    c                 óX  — t        | t        j                  «      r| j                  «       } t        |t        j                  «      r|j                  «       }t	        t        || «      «      } | j                  «        t	        t        ||«      «      }|j                  «        t        | |«       y r   )Ú
isinstanceÚnpÚndarrayÚtolistÚlistÚmapÚsortr   )ÚaÚbÚtpls      r   Ú!assert_unordered_tuple_list_equalr       sp   € Ü�!”R—Z‘ZÔ Ø�H‰H‹JˆÜ�!”R—Z‘ZÔ Ø�H‰H‹JˆÜŒS��a‹[Ó€AØ‡F�F„HÜŒS��a‹[Ó€AØ‡F�F„HÜ��AÕr   éÒ  )©r   r   ©r   é   ©r$   r   ©r$   r$   ©ç      à?r(   )r(   g      ø?g…ëQ¸	Àgáz®GáÀg…ëQ¸ù¿gHáz®Gé¿ç        gHáz®Gé?g…ëQ¸ù?gáz®Gá@g…ëQ¸	@éÿÿÿÿr$   é
   é   ç      Ð?é   é   é   é   é   é   é   )
úsome-pointsz	random-2dz	random-3dz	random-4dz	random-5dz	random-6dz	random-7dz	random-8dúpathological-1úpathological-2)zbug-2850z
bug-2850-2c                 ó  — t         |    }|j                  d   }d}|dz   }| dk(  rd}n| dk(  rd}|d| g}t        |t        |«      |«      D ]  }|j	                  ||||z    «       Œ d| |fz  }|t
        vsJ ‚||ft
        |<   y)	z<
    Generate incremental datasets from basic data sets
    r$   Nr,   r5   zQJ Ppr6   é   z%s-chunk-%d)ÚDATASETSÚshapeÚrangeÚlenÚappendÚINCREMENTAL_DATASETS)	ÚnameÚ	chunksizeÚpointsÚndimÚoptsÚnminÚchunksÚjÚnew_names	            r   Ú_add_inc_datarI   ]   s²   € ô �d‰^€FØ�<‰<˜‰?€Dà€DØ�!‰8€Dàˆ}Òà‰Ø	Ð!Ò	!àˆà�U�dˆmˆ_€FÜ�4œ˜V› iÓ0ò -ˆØ�‰�f˜Q˜q ™{Ð+Õ,ð-ð   iÐ0Ñ0€HØÔ/Ñ/Ð/Ð/Ø&,¨d ^Ô˜Ò"r   )r$   r0   é   c                   ó   — e Zd Zd„ Zd„ Zy)Ú
Test_Qhullc                 óú  — t        j                  dt        j                  ddgddgddgddgddgg«      d«      }t	        j
                  |j                  «       «      }t        j                  dt        j                  ddgddgddgddgg«      d«      }t	        j
                  |j                  «       «      }t	        j
                  |j                  «       «      }|j                  «        t	        j
                  |j                  «       «      }|j                  «        t        t        |j                  «       t        t        |j                  «       t        |d   |d   «       t        |d   |d   t        ¬«       t        |d	   |d	   t        ¬«       t        |d
   |d
   t        ¬«       t        |d   |d   «       t        |d   |d   «       t        |d   |d   t        ¬«       t        |d	   |d	   t        ¬«       t        |d
   |d
   t        ¬«       t        |d   |d   «       |j                  «        t        t        |j                  «       |j                  «        t        t        |j                  «       y )Nó   vr   r$   ç      ð?r(   s   Qzç       @©r   r,   r/   r0   )ÚqhullÚ_Qhullr   ÚarrayÚcopyÚdeepcopyÚget_voronoi_diagramÚcloseÚassert_raisesÚRuntimeErrorr   r    r   r   )Úselfr   ÚxdÚyÚydÚxd2Úyd2s          r   Útest_swappingzTest_Qhull.test_swapping}   sþ  € ô �L‰L˜ÜŸ™ A a 5¨!¨A¨°°!¨u°a¸°V¸SÀ¸IÐ"FÓGØó ˆô �]‰]˜1×0Ñ0Ó2Ó3ˆä�L‰L˜ÜŸ™ A a 5¨!¨A¨°°!¨u°a¸°VÐ"<Ó=Øó ˆô �]‰]˜1×0Ñ0Ó2Ó3ˆä�m‰m˜A×1Ñ1Ó3Ó4ˆØ	�‰Œ	Ü�m‰m˜A×1Ñ1Ó3Ó4ˆØ	�‰Œ	ä”l A×$9Ñ$9Ô:Ü”l A×$9Ñ$9Ô:ä˜˜1™˜s 1™vÔ&Ü)¨"¨Q©%°°Q±¼\ÕJÜ)¨"¨Q©%°°Q±¼\ÕJÜ)¨"¨Q©%°°Q±¼\ÕJÜ˜2˜a™5 # a¡&Ô)ä˜˜1™˜s 1™vÔ&Ü)¨"¨Q©%°°Q±¼\ÕJÜ)¨"¨Q©%°°Q±¼\ÕJÜ)¨"¨Q©%°°Q±¼\ÕJÜ˜2˜a™5 # a¡&Ô)à	�‰Œ	Ü”l A×$9Ñ$9Ô:Ø	�‰Œ	Ü”l A×$9Ñ$9Õ:r   c                 óz   — t        j                  ddgddgddgddgddgddgddgddgddgg	«      }t        |«       y )Nr   r$   r,   )r   rT   r
   )r[   rB   s     r   Útest_issue_8051zTest_Qhull.test_issue_8051£   sT   € Ü—‘Ø�ˆV�a˜�V˜a ˜V a¨ V¨a°¨V°a¸°V¸QÀ¸FÀQÈÀFÈQÐPQÈFÐSó
ˆô 	��r   N)Ú__name__Ú
__module__Ú__qualname__ra   rc   © r   r   rL   rL   |   s   „ ò$;óLr   rL   c                   óø   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z		 	 	 dd„Z
ej                  j                  d	«      d
„ «       Zej                  j                  ej                  j                  d«      d„ «       «       Zy)ÚTestUtilitiesz-
    Check that utility functions work.

    c                 óX  — t        j                  g d¢t         j                  ¬«      }t        j                  |«      }t        |j                  g d¢g d¢g«       dD ]M  }|j                  |d d «      }t        ||d   |›¬«       t        j                  ||d d «      }t        ||«       ŒO y )N©r"   r#   r&   r%   ©Údtype©r$   r/   r,   ©r/   r$   r   ))r-   r-   r$   )ç      è?rp   r   )ç333333Ó?çš™™™™™É?r$   r,   ©Úerr_msg)	r   rT   Úfloat64rR   ÚDelaunayr   Ú	simplicesÚfind_simplexÚtsearch)r[   rB   ÚtriÚpÚirG   s         r   Útest_find_simplexzTestUtilities.test_find_simplex°   s•   € ä—‘Ò6¼b¿j¹jÔIˆÜ�n‰n˜VÓ$ˆô 	�S—]‘]¢Y²	Ð$:Ô;ð!ò 	ˆAð × Ñ   2 A Ó'ˆAÜ˜˜A˜a™D¨Q¨EÕ3Ü—‘˜c 1 R a 5Ó)ˆAÜ˜˜AÕñ	r   c                 ó²  — t        j                  g d¢t         j                  ¬«      }t        j                  ddgt         j                  ¬«      }t        j                  |«      }|j                  |«      }|j                  |«      }|j                  |«      }t        |j                  «      D ]©  \  }}||d      }	||d      }
||d      }t        j                  |	|z
  |
|z
  «      }|t        j                  t        j                  ||«      «      z  }|t        j                  |d   «       z  }t        j                  |||z
  «      }t        ||   |«       Œ« y )N)r"   r&   r%   )g]2Ê�½ï?g>mj‡Ø?)g~T›!Òï?g^RÎz¥êÜ?rl   gä†›Býï?gÒÝÄ?r   r$   r,   )r   rT   ru   rR   rv   Úlift_pointsÚplane_distanceÚ	enumeraterw   ÚcrossÚsqrtÚdotÚsignr   )r[   r   r{   rz   ÚzÚpzÚdistrG   ÚvÚx1Úx2Úx3ÚnÚds                 r   Útest_plane_distancez!TestUtilities.test_plane_distanceÅ   s$  € ô �H‰Hò 0Ü79·z±zôCˆä�H‰H�j *Ð-´R·Z±ZÔ@ˆä�n‰n˜QÓˆà�O‰O˜AÓˆØ�_‰_˜QÓˆà×!Ñ! !Ó$ˆä˜cŸm™mÓ,ò 	,‰DˆAˆqØ�1�Q‘4‘ˆBØ�1�Q‘4‘ˆBØ�1�Q‘4‘ˆBä—‘˜˜b™ " r¡'Ó*ˆAØ”—‘œŸ™  1›Ó&Ñ&ˆAØ”"—'‘'˜!˜A™$“-�ÑˆAä—‘�q˜"˜r™'Ó"ˆAä  Q¡¨Õ+ñ	,r   c                 óÀ   — t        j                  g d¢t         j                  ¬«      }t        j                  |«      }t        |j                  ddgddgddgddgg«       y )Nrk   rl   r/   r,   r$   r   )r   rT   ru   rR   rv   r   Úconvex_hull©r[   rB   rz   s      r   Útest_convex_hullzTestUtilities.test_convex_hullà   sN   € ä—‘Ò6¼b¿j¹jÔIˆÜ�n‰n˜VÓ$ˆô 	�S—_‘_¨¨1 v°°1¨v¸¸1°vÀÀ1¸vÐ&FÕGr   c                 óÀ   — t        j                  g d¢«      }t        j                  |«      }t	        |j
                  ddd¬«       t	        |j                  ddd¬«       y )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$   rO   ç›+¡†›„=zVolume of cube is incorrect©Úrtolrt   ç      @zArea of cube is incorrect©r   rT   rR   Ú
ConvexHullr   ÚvolumeÚarea©r[   rB   Úhulls      r   Útest_volume_areazTestUtilities.test_volume_areaí   sQ   € ä—‘ò Gó Hˆä×Ñ Ó'ˆä˜Ÿ™ R¨eØ =õ	?ä˜Ÿ	™	 2¨EØ ;ö	=r   c                 óÀ   — t        j                  g d¢«      }t        j                  |«      }t	        |j
                  ddd¬«       t	        |j                  ddd¬«       y )N)
)g¿„ñQ4×?gŽÎœRë@Þ?gX&ÜlL5Ö?)gfÙÇN»zç?gjýž©Mä?g{Dí�šjî?)ga?8å\à?g®µ‚–ì?g�w5­KÁÚ?)g,lnq›³?g6½„î=àà?gŒ UáÔä?)gwì»�æÆÂ?g�ã°`ã?gaè‚³¢ì?)gâ+´qà?g\h½¿Ï±?gLƒg¼ýà?)g¾GéÕeà?gEˆ9²;å?gd:ëL£?)gÈŠK×BÞ?gB²Y’M”Ý?g�ßñÈÿÁ?)g~EHàyËÎ?gUƒdkÈêè?gmÖVq"ç?)gæÉÌqÑpî?g•¹e«ñî?g\û*L€ì?gY þ/®£Â?çH¯¼šò×z>z(Volume of random polyhedron is incorrectr—   g\¬¨Á4¬ú?z&Area of random polyhedron is incorrectrš   rž   s      r   Útest_random_volume_areaz%TestUtilities.test_random_volume_areaø   sW   € ô —‘ò 	Mó 	Nˆô ×Ñ Ó'ˆÜ˜Ÿ™ Z°eØ Jõ	Lä˜Ÿ	™	 9°5Ø Hö	Jr   c                 óÌ  — d}d}t         j                  j                  ||f«      }t        j                  |d|dz   …dd…f   d¬«      }t        j                  |d|dz   …dd…f   d¬«      }t	        |dz   |«      D ]ç  }t        j                  |d|dz   …dd…f   «      }|j                  |||dz   …dd…f   «       |j                  |||dz   …dd…f   d¬«       t        |j                  |j                  d¬	«       t        |j                  |j                  d¬	«       t        |j                  |j                  d¬	«       t        |j                  |j                  d¬	«       Œé y)
zwTest that incremental mode gives the same volume/area as
        non-incremental mode and incremental mode with restarté   r/   Nr$   T©Úincremental©Úrestartr¢   ©r˜   )	r   ÚrandomrR   r›   r<   Ú
add_pointsr   rœ   r�   )r[   Ú	nr_pointsÚdimrB   Úinc_hullÚinc_restart_hullr|   rŸ   s           r   Ú)test_incremental_volume_area_random_inputz7TestUtilities.test_incremental_volume_area_random_input  sC  € ð ˆ	ØˆÜ—‘×!Ñ! 9¨cÐ"2Ó3ˆÜ×#Ñ# F¨6¨C°©E¨6²1¨9Ñ$5À4ÔHˆÜ ×+Ñ+¨F°6°C¸±E°6º1°9Ñ,=È4ÔPÐÜ�s˜1‘u˜iÓ(ò 	IˆAÜ×#Ñ# F¨4¨A¨a©C¨4²¨7¡OÓ4ˆDØ×Ñ  q¨¨1© uªa xÑ 0Ô1Ø×'Ñ'¨¨q°°1±¨u²a¨xÑ(8À$Ð'ÔGÜ˜DŸK™K¨¯©¸tÕDÜ˜DŸK™KÐ)9×)@Ñ)@ÀtÕLÜ˜DŸI™I x§}¡}¸4Õ@Ü˜DŸI™IÐ'7×'<Ñ'<À4ÖHñ	Ir   c                 óè  — |j                   |j                     }d|j                  dz   z  }|j                  d¬«      |z  }d„ }t	        j
                  t        «      j                  }	 ||j                  |«      }
t	        j                  d¬«      5  t	        j                  |
«      j                  d¬«      t        |
|z
  «      |z  dk  j                  d¬«      z  }ddd«       t        j                  «       |› d	t	        j                  | «      › �«       |dd…dd
…dd…f   |dd…d
ddd…f   z
  }t	        j                  t!        |j"                  «      D �cg c]+  }t        j$                  j'                  ||dd…dd…f   «      ‘Œ- c}«      }t	        j(                  |j                  dd…ddf   «      |t	        j*                  |	«      k  z  }t        |j                  «       |› d	t	        j                  | «      › �«       |j-                  |«      }|d
k7  t	        j                  |j                  dd…ddf   «      z  }t        |j                  «       |› d	t	        j                  | «      › �«       |rl||k  j/                  d¬«      }||d|z
  k\  j/                  d¬«      z  }|d
k7  |z  }t        |j                  «       |› d	t	        j                  | «      › �«       yy# 1 sw Y   �Œ	xY wc c}w )z@Check that a triangulation has reasonable barycentric transformsr$   rO   ©Úaxisc                 ój   — | d d …dd d …f   }| d d …d d…d d …f   }t        j                  d|||z
  «      S )Nr*   z
ijk,ik->ij)r   Úeinsum)Útrr   ÚrÚTinvs       r   Úbarycentric_transformzJTestUtilities._check_barycentric_transforms.<locals>.barycentric_transform(  s;   € Ø’1�Rš�6‘
ˆAØ’a˜˜˜šA�g‘;ˆDÜ—9‘9˜\¨4°°Q±Ó7Ð7r   Úignore)Úinvalidgš™™™™™¹?Nú r*   r   )rB   rw   rC   Úsumr   ÚfinfoÚfloatÚepsÚ	transformÚerrstateÚisnanÚallÚabsr   ÚnonzerorT   r<   ÚnsimplexÚlinalgÚdetÚisfiniterƒ   rx   Úany)r[   rz   rt   Ú	unit_cubeÚunit_cube_tolÚverticesÚscÚ	centroidsrº   rÁ   ÚcÚokÚqÚkrœ   rG   Úat_boundarys                    r   Ú_check_barycentric_transformsz+TestUtilities._check_barycentric_transforms  s‰  € ð —:‘:˜cŸm™mÑ,ˆØ�—‘˜3‘ÑˆØ—L‘L a�LÓ(¨2Ñ-ˆ	ò
	8ô
 �h‰h”u‹o×!Ñ!ˆá! #§-¡-°Ó;ˆÜ�[‰[ Ô*ñ 	NÜ—‘˜!“—‘ a�Ó(¬C°°B±«K¸©N¸SÑ,@×+EÑ+EÈ1Ð+EÓ+MÑMˆB÷	Nô 	�—‘“˜W˜I Q¤r§z¡z°2°#£Ð&7Ð8Ô9ð ’Q�s˜�sš1�WÑ ª¨2¨d²1¨Ñ 5Ñ5ˆÜ—‘Ü$)¨#¯,©,Ó$7ö9Ø ô Ÿ9™9Ÿ=™=¨¨1ªQªq¨5©Õ2ò 9ó :ˆä�[‰[˜Ÿ™¢q¨¨1 uÑ-Ó.°&¼2¿7¹7À3»<Ñ2GÑHˆÜ�—‘“˜W˜I Q¤r§z¡z°2°#£Ð&7Ð8Ô9ð ×Ñ˜YÓ'ˆØ�2‰gœŸ™ #§-¡-²°!°A°Ñ"6Ó7Ñ7ˆÜ�—‘“˜W˜I Q¤r§z¡z°2°#£Ð&7Ð8Ô9áà$¨Ñ5×:Ñ:ÀÐ:ÓBˆKØ˜I¨¨]Ñ):Ñ:×?Ñ?ÀQÐ?ÓGÑGˆKà�r‘'˜[Ñ(ˆBÜ�B—F‘F“H  	¨¬2¯:©:°r°c«?Ð*;Ð<Õ=ð ÷%	Nñ 	Nüò9s   ÂAK"Å0K/Ë"K,r+   c                 ó¬  — t        j                  t        j                  j	                  t        j                  j                  t        «      dd«      «      }|d   }|j                  «        t        j                  |«      }t        j                  |j                  d d …ddf   «      j                  «       }t        |dk  |«       | j                  |«       y )NÚdatazdegenerate_pointset.npzrÒ   r   é   )r   ÚloadÚosÚpathÚjoinÚdirnameÚ__file__rX   rR   rv   rÄ   rÂ   r¾   r   r×   )r[   rÙ   rB   rz   Ú	bad_counts        r   Ú&test_degenerate_barycentric_transformsz4TestUtilities.test_degenerate_barycentric_transformsJ  sœ   € ô �w‰w”r—w‘w—|‘|¤B§G¡G§O¡O´HÓ$=¸vØ$=ó?ó @ˆà�c‘ˆØ�
‰
Œä�n‰n˜VÓ$ˆô —H‘H˜SŸ]™]ª1¨Q¨q¨5Ñ1Ó2×6Ñ6Ó8ˆ	Ü�	˜B‘ 	Ô*ð 	×*Ñ*¨3Õ/r   r¥   c                 óÒ  — t        j                  t        «      j                  }dddddœ}t	        dd«      D �]­  }t        j
                  dd	||   «      }t         j                  t        t        t         j                  t        j                  t        j                  |g|z  Ž Ž «      «         j                  }d
|z  }t        j                  |«      }| j                  ||d¬«       t         j                   j#                  d«       t         j                   j%                  |j&                  d   «      dk  }||d d …fxx   d|z  t        j                   j$                  ||d d …f   j&                  Ž dz
  z  z  cc<   t        j                  |«      }| j                  ||dd|z  ¬«       t        j                  t         j(                  ||f   «      }| j                  ||dd|z  ¬«       �Œ° y )NéF   é   r1   r/   )r,   r/   r0   r1   r,   r2   r   r$   zndim=%dT)rt   rÍ   r!   rr   r(   )rt   rÍ   rÎ   )r   r¿   rÀ   rÁ   r<   ÚlinspaceÚc_r   r   ÚravelÚbroadcast_arraysÚix_ÚTrR   rv   r×   r«   ÚseedÚrandr;   Úr_)	r[   rÁ   ÚnpointsrC   r   Úgridrt   rz   Úms	            r   Ú test_more_barycentric_transformsz.TestUtilities.test_more_barycentric_transforms\  s¤  € ô �h‰h”u‹o×!Ñ!ˆà˜R A¨!Ñ,ˆä˜!˜Q“Kó 	DˆDä—‘˜A˜q '¨$¡-Ó0ˆAÜ—5‘5Ü”SœŸ™¤2×#6Ñ#6¼¿¹À!ÀÀTÁÐ8KÐ#LÓMÓNñç‰að ð   $Ñ&ˆGô —.‘. Ó&ˆCØ×.Ñ.¨s¸GØ9=ð /ô ?ô �I‰I�N‰N˜4Ô Ü—‘—‘ §
¡
¨1¡Ó.°Ñ4ˆAØ�’1�‹I˜˜3™¤§	¡	§¡°°Q²q°S±	·±Ð @À3Ñ FÑGÑG‹Iä—.‘. Ó&ˆCØ×.Ñ.¨s¸GØ9=Ø=>¸s¹Uð /ô Dô
 —.‘.¤§¡ t¨T zÑ!2Ó3ˆCØ×.Ñ.¨s¸GØ9=Ø=>¸s¹Uð /ö Dñ5	Dr   N)Ú Fr   )rd   re   rf   Ú__doc__r}   r�   r“   r    r£   r±   r×   ÚpytestÚmarkÚ	fail_slowrâ   Úslowrò   rg   r   r   ri   ri   ª   s“   „ ñò
ò*,ò6Hò	=òJò(Ið" :<Ø05Ø45ó+>ðZ ‡[�[×Ñ˜2Óñ0ó ð0ð" ‡[�[×ÑØ‡[�[×Ñ˜2Óñ#Dó ó ñ#Dr   ri   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTestVertexNeighborVerticesc                 óà  — t        |j                  j                  d   «      D �cg c]  }t        «       ‘Œ }}|j                  D ]*  }|D ]#  }|D ]  }||k7  sŒ	||   j                  |«       Œ Œ% Œ, |j                  \  }}t        |j                  j                  d   «      D �cg c]'  }t        t        t        |||   ||dz       «      «      ‘Œ) }	}t        |	||	›d|›�¬«       y c c}w c c}w )Nr   r$   z != rs   )
r<   rB   r;   Úsetrw   ÚaddÚvertex_neighbor_verticesr   Úintr   )
r[   rz   rG   ÚexpectedÚsr   r   ÚindptrÚindicesÚgots
             r   Ú_checkz!TestVertexNeighborVertices._check†  sù   € Ü#(¨¯©×)9Ñ)9¸!Ñ)<Ó#=Ö>˜a”C•EÐ>ˆÐ>Ø—‘ò 	+ˆAØò +�Øò +�AØ˜A“vØ  ™Ÿ™¨Õ*ñ+ñ+ð	+ð ×6Ñ6‰ˆ�ô ˜cŸj™j×.Ñ.¨qÑ1Ó2ö4Øô ”3”s˜G F¨1¡I¨f°Q°q±S©kÐ:Ó;Õ<ð 4ˆð 4ô 	�S˜(¨s¨g°T¸(¸Ð,FÖGùò ?ùò4s   ¥C&Â$,C+c                 óž   — t        j                  g d¢t         j                  ¬«      }t        j                  |«      }| j                  |«       y )N)r"   r#   r%   rl   ©r   rT   ru   rR   rv   r  r’   s      r   Útest_trianglez(TestVertexNeighborVertices.test_triangle•  s1   € Ü—‘Ò/´r·z±zÔBˆÜ�n‰n˜VÓ$ˆØ�‰�CÕr   c                 óž   — t        j                  g d¢t         j                  ¬«      }t        j                  |«      }| j                  |«       y )Nrk   rl   r  r’   s      r   Útest_rectanglez)TestVertexNeighborVertices.test_rectangleš  s1   € Ü—‘Ò6¼b¿j¹jÔIˆÜ�n‰n˜VÓ$ˆØ�‰�CÕr   c                 óž   — t        j                  g d¢t         j                  ¬«      }t        j                  |«      }| j                  |«       y )N)r"   r#   r&   r%   r'   )gÍÌÌÌÌÌì?r(   rl   r  r’   s      r   Útest_complicatedz+TestVertexNeighborVertices.test_complicatedŸ  s7   € Ü—‘ò 3Ü:<¿*¹*ôFˆä�n‰n˜VÓ$ˆØ�‰�CÕr   N)rd   re   rf   r  r  r
  r  rg   r   r   rú   rú   …  s   „ òHòò
ó
r   rú   c                   ó–   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zej                  j                  d ee«      «      d„ «       Zy)ÚTestDelaunayz*
    Check that triangulation works.

    c                 ó€   — t         j                  j                  d«      }t        t        t
        j                  |«       y ©Nr$   )r   ÚmaÚ
masked_allrY   Ú
ValueErrorrR   rv   ©r[   Úmasked_arrays     r   Útest_masked_array_failsz$TestDelaunay.test_masked_array_fails«  s&   € Ü—u‘u×'Ñ'¨Ó*ˆÜ”j¤%§.¡.°,Õ?r   c                 ó´   — t        j                  ddddt         j                  fgt         j                  ¬«      }t	        t
        t        j                  |«       y )Nr"   r#   r&   r$   rl   )r   rT   Únanru   rY   r  rR   rv   ©r[   Úpoints_with_nans     r   Útest_array_with_nans_failsz'TestDelaunay.test_array_with_nans_fails¯  s7   € ÜŸ(™( E¨5°%¸!¼B¿F¹F¸Ð#DÌBÏJÉJÔWˆÜ”j¤%§.¡.°/ÕBr   c           	      óâ  — t        dd«      D ]à  }t        j                  |dz   |f«      }t        |«      D ]	  }d|||f<   Œ d|dd d …f<   t        j                  |«      }|j
                  j                  «        t        |j
                  t        j                  |dz   t        ¬«      d d d …f   «       t        |j                  dt        j                  |dz   t        ¬«      d d d …f   z   «       Œâ y )Nr,   r4   r$   rO   r*   rl   )r<   r   ÚzerosrR   rv   rw   r   r   Úarangerÿ   Ú	neighbors)r[   ÚndrB   rG   rz   s        r   Útest_nd_simplexzTestDelaunay.test_nd_simplex³  sË   € ä˜˜1“+ò 	RˆBÜ—X‘X˜r !™t R˜jÓ)ˆFÜ˜2“Yò "�Ø!��q˜�s’ð"àˆF�2’a�4‰Lä—.‘. Ó(ˆCà�M‰M×ÑÔ ä˜Ÿ™¬¯	©	°"°Q±$¼cÔ(BÀ4ÊÀ7Ñ(KÔLÜ˜Ÿ™¨¬R¯X©X°r¸!±tÄCÔ-HÈÊaÈÑ-PÑ(PÕQñ	Rr   c                 óì   — t        j                  g d¢t         j                  ¬«      }t        j                  |«      }t        |j                  g d¢g d¢g«       t        |j                  g d¢g d¢g«       y )Nrk   rl   rn   ro   )r*   r*   r$   )r*   r*   r   )r   rT   ru   rR   rv   r   rw   r  r’   s      r   Útest_2d_squarezTestDelaunay.test_2d_squareÂ  sK   € ä—‘Ò6¼b¿j¹jÔIˆÜ�n‰n˜VÓ$ˆä�S—]‘]¢Y²	Ð$:Ô;Ü�S—]‘]¢[²+Ð$>Õ?r   c                 ó”  — t        j                  g d¢t         j                  ¬«      }t        j                  g d¢t         j                  ¬«      }t         j                  ||f   }t         j                  ||f   }t	        j
                  t         j                  ||f   «       t	        j
                  t         j                  ||f   «       y )N)r   r$   r   r$   rl   )r   r   r$   r$   )r   rT   ru   rî   rR   rv   rç   )r[   r   r]   ÚxpÚyps        r   Útest_duplicate_pointsz"TestDelaunay.test_duplicate_pointsÊ  s~   € Ü�H‰H’\¬¯©Ô4ˆÜ�H‰H’\¬¯©Ô4ˆä�U‰U�1�a�4‰[ˆÜ�U‰U�1�a�4‰[ˆô 	�‰”r—u‘u˜Q ˜T‘{Ô#Ü�‰”r—u‘u˜R ˜V‘}Õ%r   c                 ót  — t         d   }t        j                  |«      }t        |j                  |j
                     j                  «       |j                  «       «       t        |j                  |j
                     j                  «       |j                  «       «       t         d   }t        j                  |«      }t        |j                  |j
                     j                  «       |j                  «       «       t        |j                  |j
                     j                  «       |j                  «       «       y )Nr6   r7   )r:   rR   rv   r   rB   rw   ÚmaxÚminr’   s      r   Útest_pathologicalzTestDelaunay.test_pathologicalÕ  sÌ   € äÐ*Ñ+ˆÜ�n‰n˜VÓ$ˆÜ�S—Z‘Z §¡Ñ.×2Ñ2Ó4°f·j±j³lÔCÜ�S—Z‘Z §¡Ñ.×2Ñ2Ó4°f·j±j³lÔCäÐ*Ñ+ˆÜ�n‰n˜VÓ$ˆÜ�S—Z‘Z §¡Ñ.×2Ñ2Ó4°f·j±j³lÔCÜ�S—Z‘Z §¡Ñ.×2Ñ2Ó4°f·j±j³lÕCr   c                 óB  — t         j                  j                  dd«      }t         j                  ||f   }t	        j
                  |d¬«      }t        t        j                  |j                  j                  «       «      t        j                  t        |«      «      «       y )Nr+   r,   z	QJ Qbb Pp©Úqhull_options)r   r«   rí   rî   rR   rv   r   Úuniquerw   rè   r  r=   r’   s      r   Útest_jogglezTestDelaunay.test_joggleá  sj   € ô —‘—‘  AÓ&ˆÜ—‘�v˜v�~Ñ&ˆä�n‰n˜V°;Ô?ˆÜœ2Ÿ9™9 S§]¡]×%8Ñ%8Ó%:Ó;ÜŸ9™9¤S¨£[Ó1õ	3r   c           	      ór  — t         j                  j                  dd«      }t         j                  ||f   }t	        j
                  |«      }t        t        t        j                  |j                  j                  «       «      «      t        |«      dz  k(  «       t        t        |j                  «      t        |«      dz  k(  «       t        t        t        j                  |j                  d d …df   «      «      t        |«      dz  k(  «       t        t        j                  |j                  dk\  «      «       y )Nr+   r,   r   )r   r«   rí   rî   rR   rv   r   r=   r/  rw   rè   ÚcoplanarrÅ   Úvertex_to_simplexr’   s      r   Útest_coplanarzTestDelaunay.test_coplanarì  sÐ   € ä—‘—‘  AÓ&ˆÜ—‘�v˜v�~Ñ&ˆä�n‰n˜VÓ$ˆä””B—I‘I˜cŸm™m×1Ñ1Ó3Ó4Ó5¼¸V»Àa¹ÑGÔHÜ”�C—L‘LÓ!¤S¨£[°!¡^Ñ3Ô4ä””B—I‘I˜cŸl™lª1¨Q¨3Ñ/Ó0Ó1´S¸³[À!±^ÑCÔDä”—‘�s×,Ñ,°Ñ1Ó2Õ3r   c                 ó”   — g d¢}t        j                  |d¬«      }t        j                  ddg«      }t	        |j
                  |«       y )N©r"   r#   r%   r'   )çš™™™™™ñ?r7  T©Úfurthest_site)r$   r0   r   )r0   r,   r   )rR   rv   r   rT   r   rw   )r[   rB   rz   r   s       r   Útest_furthest_sitezTestDelaunay.test_furthest_siteú  s8   € ÚAˆÜ�n‰n˜V°4Ô8ˆä—8‘8˜Y¨	Ð2Ó3ˆÜ˜3Ÿ=™=¨(Õ3r   r@   c                 ó   — t         |   \  }}t        j                  |d¬«      }t        j                  |d   d|¬«      }|dd  D ]  }|j                  |«       Œ t        j                  |«      }t        j                  |d   d|¬«      }t        |«      dkD  r+|j                  t        j                  |dd  d¬«      d¬«       |j                  d«      r¯t        t        j                  |j                  j                  «       «      t        j                  |j                  d   «      «       t        t        j                  |j                  j                  «       «      t        j                  |j                  d   «      «       n&t        |j                  |j                  t        ¬«       t        |j                  |j                  t        ¬«       y )	Nr   r³   T©r§   r.  r$   r¨   ÚpathologicalrQ   )r?   r   ÚconcatenaterR   rv   r¬   r=   Ú
startswithr   r/  rw   rè   r  r;   r    r   )	r[   r@   rF   rD   rB   ÚobjÚchunkÚobj2Úobj3s	            r   Útest_incrementalzTestDelaunay.test_incremental  sb  € ô ,¨DÑ1‰ˆ�Ü—‘ ¨QÔ/ˆä�n‰n˜V A™Y°DØ+/ô1ˆà˜A˜B�Zò 	"ˆEØ�N‰N˜5Õ!ð	"ô �~‰~˜fÓ%ˆä�~‰~˜f Q™i°TØ,0ô2ˆäˆv‹;˜Š?Ø�O‰OœBŸN™N¨6°!°"¨:¸AÔ>Ø$(ð ô *ð �?‰?˜>Ô*ô œrŸy™y¨¯©×)<Ñ)<Ó)>Ó?Ü!Ÿy™y¨¯©°a©Ó9ô;äœrŸy™y¨¯©×)=Ñ)=Ó)?Ó@Ü!Ÿy™y¨¯©°a©Ó9õ;ô .¨c¯m©m¸T¿^¹^Ü2>õ@ô 	*¨$¯.©.¸$¿.¹.Ü.:ö	<r   N)rd   re   rf   rô   r  r  r!  r#  r'  r+  r0  r4  r:  rõ   rö   Úparametrizer   r?   rD  rg   r   r   r  r  ¦  se   „ ñò@òCòRò@ò	&ò
Dò	3ò4ò4ð ‡[�[×Ñ˜V¡VÐ,@Ó%AÓBñ!<ó Cñ!<r   r  c                 óü  — t        t        t        |«      «      }t        t        t        |«      «      }||k7  �r¸| j                  d   dk(  �r¥dt	        j
                  t        «      j                  z  }|D �]x  \  }}|D �]c  \  }}| |   | |   z
  }|t        j                  j                  |«      z  }t	        j                  |d    |d   g«      }	t	        j                  |	| |   | |   z
  «      }
t	        j                  |	| |   | |   z
  «      }t	        j                  t	        j                  |
|	«      d«      sŒ»t	        j                  t	        j                  ||	«      d«      sŒæt	        j                  || |   | |   z
  «      }
t	        j                  || |   | |   z
  «      }t	        j                  || |   | |   z
  «      }|
| k  s|
||z   kD  r�ŒS|| k  s|||z   kD  r�Œc �Œo t        d«      ‚ y t        ||«       y )Nr$   r,   iè  r   zcomparison fails)rü   r   r   r;   r   r¿   rÀ   rÁ   rÉ   ÚnormrT   r„   ÚallcloseÚAssertionErrorr   )rB   Úfacets_1Úfacets_2rÁ   r   r   ÚapÚbpÚtr�   Úc1Úc2Úc3s                r   Úassert_hulls_equalrR  &  sÛ  € ô ”3”| XÓ.Ó/€HÜ”3”| XÓ.Ó/€Hà�8Ó §¡¨Q¡°1Ó 4ð ”R—X‘Xœe“_×(Ñ(Ñ(ˆàó 	9‰DˆAˆqØ"ó 9‘��BØ˜2‘J ¨¡Ñ+�Ø”R—Y‘Y—^‘^ AÓ&Ñ&�Ü—H‘H˜q ™t˜e Q q¡T˜]Ó+�ô —V‘V˜A˜v a™y¨6°"©:Ñ5Ó6�Ü—V‘V˜A˜v a™y¨6°"©:Ñ5Ó6�Ü—{‘{¤2§6¡6¨"¨a£=°!Ô4ØÜ—{‘{¤2§6¡6¨"¨a£=°!Ô4Øô —V‘V˜A˜v a™y¨6°"©:Ñ5Ó6�Ü—V‘V˜A˜v a™y¨6°"©:Ñ5Ó6�Ü—V‘V˜A˜v b™z¨F°2©JÑ6Ó7�Ø˜˜’9  R¨#¡X¢ÙØ˜˜’9  R¨#¡X¢Ùò ð19ô4 %Ð%7Ó8Ð8ð7	9ð< 	ä�˜8Õ$r   c                   ó  — e Zd Zd„ Zd„ Zej                  j                  d ee	«      «      d„ «       Z
ej                  j                  d ee«      «      d„ «       Zd„ Zd„ Zej                  j                  dd	d
g«      d„ «       Zej                  j                  dddg«      ej                  j                  d ej"                  ddgg«       ej"                  g d¢e¬«      f ej"                  ddgg«       ej"                  g d¢e¬«      f ej"                  ddgg«       ej"                  g d¢e¬«      f ej"                  ddgddgg«       ej"                  g d¢e¬«      f ej"                  ddgg«       ej"                  g d¢e¬«      fg«      d„ «       «       Zej                  j                  dd	d
g«      d„ «       Zej                  j                  dd	d
g«      d„ «       Zej                  j                  dd	d
g«      d„ «       Zy )!ÚTestConvexHullc                 ó€   — t         j                  j                  d«      }t        t        t
        j                  |«       y r  )r   r  r  rY   r  rR   r›   r  s     r   r  z&TestConvexHull.test_masked_array_fails^  s(   € Ü—u‘u×'Ñ'¨Ó*ˆÜ”j¤%×"2Ñ"2°LÕAr   c                 ó²   — t        j                  dddt         j                  fgt         j                  ¬«      }t	        t
        t        j                  |«       y )Nr"   r&   r,   rl   )r   rT   r  ru   rY   r  rR   r›   r  s     r   r  z)TestConvexHull.test_array_with_nans_failsb  s7   € ÜŸ(™( E¨5°1´R·V±V°*Ð#=ÄRÇZÁZÔPˆÜ”j¤%×"2Ñ"2°OÕDr   r@   c                 óÄ  — t         |   }t        j                  |«      }t        j                  |«      }t	        ||j
                  |j                  «       |j                  d   dk(  rGt        t        j                  |j                  «      t        j                  |j                  «      «       y t        t        j                  |j                  «      |j                  «       y )Nr$   r,   )r:   rR   rv   r›   rR  r‘   rw   r;   r   r   r/  r   rÏ   )r[   r@   rB   rz   rŸ   s        r   Útest_hull_consistency_triz(TestConvexHull.test_hull_consistency_trif  s�   € ô ˜$‘ˆä�n‰n˜VÓ$ˆÜ×Ñ Ó'ˆä˜6 3§?¡?°D·N±NÔCð �<‰<˜‰?˜aÒÜœŸ™ 4§>¡>Ó2´B·G±G¸D¿M¹MÓ4JÕKäœŸ™ 4§>¡>Ó2°D·M±MÕBr   c                 ó  — t         |   \  }}t        j                  |d¬«      }t        j                  |d   d¬«      }|dd  D ]  }|j                  |«       Œ t        j                  |«      }t        j                  |d   d¬«      }t        |«      dkD  r+|j                  t        j                  |dd  d¬«      d¬«       t        ||j                  |j                  «       t        ||j                  |j                  «       y )Nr   r³   Tr¦   r$   r¨   )	r?   r   r>  rR   r›   r¬   r=   rR  rw   )	r[   r@   rF   Ú_rB   r@  rA  rB  rC  s	            r   rD  zTestConvexHull.test_incrementalw  sÝ   € ô )¨Ñ.‰	ˆ�Ü—‘ ¨QÔ/ˆä×Ñ˜v a™y°dÔ;ˆØ˜A˜B�Zò 	"ˆEØ�N‰N˜5Õ!ð	"ô ×Ñ Ó'ˆä×Ñ  q¡	°tÔ<ˆÜˆv‹;˜Š?Ø�O‰OœBŸN™N¨6°!°"¨:¸AÔ>Ø$(ð ô *ô 	˜6 3§=¡=°$·.±.ÔAÜ˜6 3§=¡=°$·.±.ÕAr   c           	      ó‚  — t         j                  j                  d«       t         j                  j                  dd«      }t	        j
                  |«      }t        t        j                  |j                  «      t        j                  |j                  «      «       |j                  |j                     j                  \  }}t        j                  ||j                  «       z
  ||j                  «       z
  «      }t        t        j                   t        j"                  t        j$                  |«      «      dkD  «      «       y )Nr!   r.   r,   r   )r   r«   rì   rí   rR   r›   r   r/  rw   r   rÏ   rB   rë   Úarctan2Úmeanr   rÅ   ÚdiffÚunwrap)r[   rB   rŸ   r   r]   Úangles         r   Útest_vertices_2dzTestConvexHull.test_vertices_2dŒ  sÄ   € ä
�	‰	�‰�tÔÜ—‘—‘  AÓ&ˆä×Ñ Ó'ˆÜ”R—Y‘Y˜tŸ~™~Ó.´·±¸¿¹Ó0FÔGð �{‰{˜4Ÿ=™=Ñ)×+Ñ+‰ˆˆ1Ü—
‘
˜1˜qŸv™v›x™<¨¨Q¯V©V«X©Ó6ˆÜ”—‘”r—w‘wœrŸy™y¨Ó/Ó0°1Ñ4Ó5Õ6r   c                 ó¼   — t        j                  g d¢«      }t        j                  |«      }t	        |j
                  dd¬«       t	        |j                  dd¬«       y )Nr•   rO   r–   rª   r™   rš   r’   s      r   r    zTestConvexHull.test_volume_area™  sG   € ä—‘ò Gó Hˆä×Ñ˜vÓ&ˆä˜Ÿ
™
 B¨UÕ3Ü˜Ÿ™ "¨5Ö1r   r§   FTc                 óæ   — t        j                  ddgddgddgddgddgg«      }t        j                  ||d¬«      }t        j                  g d¢t        ¬«      }|j
                  }t        ||«       y )	Nrr   çš™™™™™Ù?rq   ç333333ã?ÚQG4©rB   r§   r.  )FTFFrl   ©r   rT   rR   r›   ÚboolÚgoodr   ©r[   r§   rB   rŸ   r   Úactuals         r   Útest_good2dzTestConvexHull.test_good2d¢  sy   € ô —‘˜C ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ð	'ó (ˆô
 ×Ñ vØ,7Ø.3ô5ˆô —8‘8Ò7¼tÔDˆØ—‘ˆÜ�V˜XÕ&r   Ú
visibilityrf  zQG-4znew_gen, expectedrq   gffffffæ?)FFFFFrl   gffffffæ¿)FTFFFg=
×£p=Ú?)FFFTTr(   re  )FFTFFg433333ã?c                 ó   — t        j                  ddgddgddgddgddgg«      }t        j                  |d|¬«      }|j	                  |«       |j
                  }d|v rt        j                  |«      }t        ||«       y )Nrr   rd  rq   re  Trg  ú-)r   rT   rR   r›   r¬   rj  Úinvertr   )r[   Únew_genr   rn  rB   rŸ   rl  s          r   Útest_good2d_incremental_changesz.TestConvexHull.test_good2d_incremental_changes±  s‹   € ôN —‘˜C ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ð	'ó (ˆô
 ×Ñ vØ,0Ø.8ô:ˆð 	�‰˜Ô Ø—‘ˆØ�*ÑÜ—y‘y Ó*ˆHÜ�V˜XÕ&r   c                 ó  — t        j                  ddgddgddgddgddgg«      }t        j                  ||¬«      }|j                  }|�J ‚|r5|j                  t        j                  d«      «       |j                  }|�J ‚y y )Nrr   rd  rq   re  )rB   r§   ©r$   r,   )r   rT   rR   r›   rj  r¬   r  )r[   r§   rB   rŸ   rl  s        r   Útest_good2d_no_optionz$TestConvexHull.test_good2d_no_optionæ  s“   € ô —‘˜C ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ð	'ó (ˆô
 ×Ñ vØ,7ô9ˆà—‘ˆØˆ~Ðˆ~áØ�O‰OœBŸH™H VÓ,Ô-Ø—Y‘YˆFØ�>Ð!‘>ð r   c                 óæ   — t        j                  ddgddgddgddgddgg«      }t        j                  ||d¬«      }t        j                  g d¢t        ¬«      }|j
                  }t        ||«       y )Nrr   rd  rq   rf  rg  )FFFFrl   rh  rk  s         r   Útest_good2d_insidez!TestConvexHull.test_good2d_insideù  sy   € ô
 —‘˜C ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ð	'ó (ˆô
 ×Ñ vØ,7Ø.3ô5ˆô —8‘8Ò8ÄÔEˆØ—‘ˆÜ�V˜XÕ&r   c                 óâ   — t        j                  g d¢g d¢g d¢g d¢g d¢g«      }t        j                  ||d¬«      }t        j                  g d¢t        ¬	«      }t        |j                  |«       y )
N©r)   r)   r)   )gŠNžË7Ïì?g+ï²xÙ¿g¸gÈ>é@È?)gFE÷%'ß?gW¯¦Û§=ç¿g¤úÎ/Jß?)g›˜ä6Ðrâ?gtÄ­Ä4úé¿g¤¾��Å·¿)g¶w6y¶å?g’«QÂæ¿gÿ€b¿‚�Ç?ÚQG0rg  )TFFFrl   )r   rT   rR   r›   ri  r   rj  )r[   r§   rB   rŸ   r   s        r   Útest_good3dzTestConvexHull.test_good3d
  sb   € ô —‘š?Ú@Ú@ÚAÚ@ð	Bó Cˆô
 ×Ñ vØ,7Ø.3ô5ˆô —8‘8Ò7¼tÔDˆÜ�T—Y‘Y Õ)r   N)rd   re   rf   r  r  rõ   rö   rE  r   r:   rX  r?   rD  ra  r    rm  r   rT   ri  rs  rv  rx  r|  rg   r   r   rT  rT  ]  sR  „ òBòEð ‡[�[×Ñ˜V¡V¨HÓ%5Ó6ñCó 7ðCð  ‡[�[×Ñ˜V¡VÐ,@Ó%AÓBñBó CðBò(7ò2ð ‡[�[×Ñ˜]¨U°D¨MÓ:ñ'ó ;ð'ð ‡[�[×Ñ˜\Ø#Ø$ð, ó !ð ‡[�[×ÑÐ0ð 
ˆ�‰�C˜�:�,Ó	Ø	ˆ�‰Ò5¸TÔ	Bð	Dð
 
ˆ�‰�C˜�;�-Ó	 Ø	ˆ�‰Ò4¸DÔ	Að	Cð
 
ˆ�‰�C˜�;�-Ó	 Ø	ˆ�‰Ò3¸4Ô	@ð	Bð 
ˆ�‰�C˜�:  S˜zÐ*Ó	+Ø	ˆ�‰Ò4¸DÔ	Að	Cð 
ˆ�‰�C˜Ð%Ð&Ó	'Ø	ˆ�‰Ò5¸TÔ	Bð	Dð93
ó ñ>'ó?ó	!ðF'ð$ ‡[�[×Ñ˜]¨U°D¨MÓ:ñ"ó ;ð"ð$ ‡[�[×Ñ˜]¨U°D¨MÓ:ñ'ó ;ð'ð  ‡[�[×Ñ˜]¨U°D¨MÓ:ñ*ó ;ñ*r   rT  c                   óÒ  — e Zd Zej                  j                  dddg«      ej                  j                  dddg«      ej                  j                  ddd	g«      d
„ «       «       «       Zd„ Zd„ Zd„ Z	ej                  j                  d e
e«      «      d„ «       Zd„ Zd„ Zej                  j                  d«      ej                  j                  d e
e«      «      d„ «       «       Zy)ÚTestVoronoizqhull_opts, extra_pts)z	Qbb Qc Qzr$   )zQbb Qcr   Ún_ptsé2   éd   rC   r,   r/   c                 ó>  — t         j                  j                  d«      }|j                  ||f«      }t        ||¬«      }|j                  }|j                  «       |dz
  |z   k(  sJ ‚|j                  t        |j                  «      |z
  k(  sJ ‚t        |j                  «      ||z   k(  sJ ‚|j                  j                  d   |k(  sJ ‚|rN|j                  D �	cg c]  }	t        |	«      ‘Œ }
}	|
j                  d«      dk(  sJ ‚|
j                  d«      |vsJ ‚y y c c}	w )Nin  r-  r$   r   )r   r«   Údefault_rngr
   Úpoint_regionr)  Úsizer=   ÚregionsrB   r;   ÚcountÚindex)r[   Ú
qhull_optsr  Ú	extra_ptsrC   ÚrngrB   ÚvorÚ	pt_regionr   Úsublenss              r   Útest_point_region_structurez'TestVoronoi.test_point_region_structure  s  € ô �i‰i×#Ñ# DÓ)ˆØ—‘˜U D˜MÓ*ˆÜ�f¨JÔ7ˆØ×$Ñ$ˆ	Ø�}‰}‹ %¨!¡)¨iÑ"7Ò7Ð7Ð7Ø�~‰~¤ S§[¡[Ó!1°IÑ!=Ò=Ð=Ð=Ü�3—;‘;Ó 5¨9Ñ#4Ò4Ð4Ð4Ø�z‰z×Ñ Ñ" eÒ+Ð+Ð+ñ Ø'*§{¡{Ö3 !”s˜1•vÐ3ˆGÐ3ð —=‘= Ó# qÒ(Ð(Ð(Ø—=‘= Ó#¨9Ñ4Ð4Ñ4ð ùÚ3s   ÃDc                 ó€   — t         j                  j                  d«      }t        t        t
        j                  |«       y r  )r   r  r  rY   r  rR   r
   r  s     r   r  z#TestVoronoi.test_masked_array_fails=  s&   € Ü—u‘u×'Ñ'¨Ó*ˆÜ”j¤%§-¡-°Õ>r   c                 ó4   — g d¢}d}| j                  ||«       y )N)	r"   r#   )r   r,   r%   r&   ru  )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_qvoronoi©r[   rB   Úoutputs      r   Útest_simplezTestVoronoi.test_simpleA  s#   € ò*ˆð
ˆð@ 	×Ñ˜v vÕ.r   c                 ó*  — |j                  «       j                  «       D �cg c])  }t        t        t        |j                  «       «      «      ‘Œ+ }}t        |d   d   «      }t        t        t        |dd|z    «      «      }t        |d   d   «      }|d|z   d|z   |z    D ��cg c]!  }|dd D �cg c]  }t        |«      dz
  ‘Œ c}‘Œ# }	}}|d|z   |z   d D ��cg c]  }|dd D �cg c]  }t        |«      ‘Œ c}‘Œ  }
}}|d|z   |z   d D ��cg c]!  }|dd D �cg c]  }t        |«      dz
  ‘Œ c}‘Œ# }}}t        j                  |fi |¤Ž}d„ }t        |j                  |«       t        t        t        t        |j                  «      «      t        t        t        |	«      «      «       t        t        t        t        ||
«      «      t        t        ||«      «      «      «      }t        t        t        t        ||j                   j#                  «       «      «      t        t        ||j$                  «      «      «      «      }|j'                  «        |j'                  «        t        ||«       yc c}w c c}w c c}}w c c}w c c}}w c c}w c c}}w )z:Compare to output from 'qvoronoi o Fv < data' to Voronoi()r$   r   r/   r,   Nc                 ó*   — t        t        | «      «      S r   r   r   s    r   Ú	sorttuplez0TestVoronoi._compare_qvoronoi.<locals>.sorttuple|  s   € Üœ ›Ó#Ð#r   )ÚstripÚ
splitlinesr   r   rÀ   Úsplitrÿ   r   rR   r
   r   rÏ   r   rü   r†  ÚzipÚridge_pointsr   Úridge_verticesr   )r[   rB   r•  Úkwr   ÚnvertexrÏ   Únregionr]   r†  rž  rŸ  rŒ  r™  Úp1Úp2s                   r   r“  zTestVoronoi._compare_qvoronoij  sX  € ð 8>·|±|³~×7PÑ7PÓ7RÖS°!”$”sœ5 !§'¡'£)Ó,Õ-ÐSˆÐSÜ�f˜Q‘i ‘lÓ#ˆÜœœE 6¨!¨A¨g©IÐ#6Ó7Ó8ˆÜ�f˜Q‘i ‘lÓ#ˆà" 1 W¡9¨Q¨w©Y°wÑ->Ð?÷AØð '(¨¨ eÖ, ”C˜“F˜1“HÔ,ð Aˆñ Að "(¨¨'©	°'Ñ(9Ð(:Ð!;÷=Øð *+¨1¨Q¨Ö0 Aœ˜Q�Ô0ð =ˆñ =ð $*¨!¨G©)°GÑ*;Ð*<Ð#=÷?Øð ./¨q¨r¨UÖ3¨œ3˜q›6 !›8Ô3ð ?ˆñ ?ô �m‰m˜FÑ) bÑ)ˆò	$ô 	˜Ÿ™ hÔ/Ü”SœœU C§K¡KÓ0Ó1ÜœœU GÓ,Ó-ô	/ô ”#”dœ3˜y¨,Ó7Ó8Üœ3˜y¨.Ó9Ó:ó<ó =ˆä”#”dœ3˜y¨#×*:Ñ*:×*AÑ*AÓ*CÓDÓEÜœ3˜y¨#×*<Ñ*<Ó=Ó>ó@ó Aˆà
�‰Œ	Ø
�‰Œ	ä�R˜Õùò9 Tùò -ùó Aùâ0ùó =ùâ3ùó ?sM   ¡.I/Â#I9Â/I4ÃI9ÃJÃ&I?Ã8JÄJÄJ
Ä/JÉ4I9É?JÊ
Jr@   c                 óì  — t         |   }t        |«      }t        j                  |«      }|j                  j                  «       D ]®  \  }}t        j                  t        j                  |«      dk\  «      sŒ2|j                  |   j                  d¬«      }d||d      |z
  z  }|j                  ||z   d¬«      \  }	}
t        |
|d   «       |j                  ||z
  d¬«      \  }	}
t        |
|d   «       Œ° y )Nr   r³   g�íµ ÷Æ°>r$   )rÕ   )r:   ÚKDTreerR   r
   Ú
ridge_dictÚitemsr   rÅ   ÚasarrayrÏ   r]  Úqueryr   )r[   r@   rB   ÚtreerŒ  r{   r‰   Úridge_midpointrŽ   rˆ   rÕ   s              r   Útest_ridgeszTestVoronoi.test_ridgesŒ  sä   € ô ˜$‘ˆä�f‹~ˆÜ�m‰m˜FÓ#ˆà—N‘N×(Ñ(Ó*ò 	"‰DˆAˆqä—6‘6œ"Ÿ*™* Q›-¨1Ñ,Ô-Øà Ÿ\™\¨!™_×1Ñ1°qÐ1Ó9ˆNØ˜˜q ™t™ ~Ñ5Ñ6ˆAà—j‘j °!Ñ!3°q�jÓ9‰GˆD�!Ü˜˜A˜a™DÔ!à—j‘j °!Ñ!3°q�jÓ9‰GˆD�!Ü˜˜A˜a™DÕ!ñ	"r   c                 ó8   — g d¢}d}| j                  ||d¬«       y )Nr6  a'  
        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
        Tr8  r’  r”  s      r   r:  zTestVoronoi.test_furthest_site¥  s%   € ÚAˆðˆð$ 	×Ñ˜v v¸TÐÕBr   c                 ó”   — g d¢}t        |«      }t        |j                  d«       t        |d¬«      }t        |j                  d«       y )Nr6  FTr8  )r
   r   r9  )r[   rB   rŒ  s      r   Útest_furthest_site_flagz#TestVoronoi.test_furthest_site_flag½  s<   € ÚAˆä�f‹oˆÜ�S×&Ñ& uÔ-Ü�f¨4Ô0ˆÜ�S×&Ñ& tÕ,r   r+   c                 ó8  ‡‡‡— t         |   d   d   j                  d   dkD  ry t         |   \  }}t        j                  |d¬«      }t	        j
                  |d   d|¬«      }|dd  D ]  }|j                  |«       Œ t	        j
                  |«      }t	        j
                  |d   d|¬«      }t        |«      dkD  r+|j                  t        j                  |dd  d¬«      d¬«       t        t        |j                  «      t        |j                  «      «       t        t        |j                  «      t        |j                  «      «       ||fD ]Ê  ŠddiŠt        ‰j                  «      D ]>  \  }	}
t        |j                  «      D ]!  \  }}t        j                  |
|«      sŒ|‰|	<   Œ# Œ@ ˆˆˆfd	„Šd
„ }t         | ‰‰j                  «      «       ||j                  «      «       t         | ‰‰j                  «      «       ||j                  «      «       ŒÌ y )Nr   r$   r/   r³   Tr<  r¨   r*   c                 óÎ   •— t        | d«      rt        | D �ch c]
  } ‰|«      ’Œ c}«      S 	 ‰|    S c c}w # t        $ r#}d‰j                  |    ›�}t	        |«      |‚d }~ww xY w)NÚ__len__z*incremental result has spurious vertex at )Úhasattrr   ÚKeyErrorrÏ   rI  )r   r]   ÚeÚmessageÚobjxÚremapÚ
vertex_maps       €€€r   r¹  z+TestVoronoi.test_incremental.<locals>.remapë  su   ø€ Ü˜1˜iÔ(Ü °AÖ!6¨q¡%¨¥(Ò!6Ó7Ð7ð9Ø% a™=Ð(ùò "7øô  ò 9ð"%Ø%)§]¡]°1Ñ%5Ð$8ð :�Gä(¨Ó1°qÐ8ûð9ús   —3®8 ¸	A$ÁAÁA$c                 óÈ   — t        t        t        | «      «      }d|v r|j                  d«       |D � cg c]  } t	        | «      dkD  sŒ| ‘Œ }} |j                  «        |S c c} w )Nrg   r$   )rü   r   r   Úremover=   r   )r   r¨  s     r   Ú
simplifiedz0TestVoronoi.test_incremental.<locals>.simplifiedõ  sV   € ÜœC¤¨aÓ0Ó1�Ø˜‘;Ø—L‘L Ô$Ø$)Ö8˜q¬S°«V°a«ZšÐ8�Ð8Ø—
‘
”Ø�ùò 9s   ³AÁA)r?   r;   r   r>  rR   r
   r¬   r=   r   r„  r�   rÏ   rH  r†  rŸ  )r[   r@   rF   rD   rB   r@  rA  rB  rC  r|   r‰   rG   Úv2r½  r¸  r¹  rº  s                 @@@r   rD  zTestVoronoi.test_incrementalÅ  sè  ú€ ô
   Ñ% aÑ(¨Ñ+×1Ñ1°!Ñ4°qÒ8àä+¨DÑ1‰ˆ�Ü—‘ ¨QÔ/ˆä�m‰m˜F 1™I°4Ø+/ô1ˆà˜A˜B�Zò 	"ˆEØ�N‰N˜5Õ!ð	"ô �}‰}˜VÓ$ˆä�}‰}˜V A™Y°DØ+/ô1ˆäˆv‹;˜Š?Ø�O‰OœBŸN™N¨6°!°"¨:¸AÔ>Ø$(ð ô *ô 	”S˜×)Ñ)Ó*¬C°×0AÑ0AÓ,BÔCÜ”S˜×)Ñ)Ó*¬C°×0AÑ0AÓ,BÔCð ˜�Iò  	ˆDØ˜b˜ˆJÜ! $§-¡-Ó0ò *‘��1Ü& t§}¡}Ó5ò *‘E�A�rÜ—{‘{ 1 bÕ)Ø()˜
 1šñ*ð*ö
9òô Ù™5 §¡Ó.Ó/Ù˜4Ÿ<™<Ó(ôô Ù™5 ×!4Ñ!4Ó5Ó6Ù˜4×.Ñ.Ó/õñ; 	r   N)rd   re   rf   rõ   rö   rE  r�  r  r–  r“  r   r:   r­  r:  r°  r÷   r?   rD  rg   r   r   r~  r~    sø   „ à‡[�[×ÑÐ4ð 	Øð	7ó ð ‡[�[×Ñ˜W r¨3 iÓ0Ø‡[�[×Ñ˜V a¨ VÓ,ñ5ó -ó 1óð5ò4?ò'/òR ðD ‡[�[×Ñ˜V¡V¨HÓ%5Ó6ñ"ó 7ð"ò0Cò0-ð ‡[�[×Ñ˜2ÓØ‡[�[×Ñ˜V¡VÐ,@Ó%AÓBñ=ó Có ñ=r   r~  c            
       óŠ  — e Zd Zdd„Zej
                  j                  dej                  e	g«      d„ «       Z
d„ Zd„ Zd„ Zd„ Zej
                  j                  d ed	d
«      «      d„ «       Zej
                  j                  d ej"                  g d¢«       ej"                  g d¢g d¢g d¢g«      g«      d„ «       Zd„ Zd„ Zd„ Zy)ÚTest_HalfspaceIntersectionc                 ó€  — t        |j                  |j                  «       t        j                  |j                  d   ft        ¬«      }|D ]W  }t        j
                  t        ||z
  «      |k  j                  d¬«      «      d   }t        |j                  d«       d||d   <   ŒY t        |j                  «       «       y)z2Check that every line in arr1 is only once in arr2r   rl   r$   r³   )r$   TN)	r   r;   r   r  ri  rÇ   rÆ   rÅ   r   )r[   Úarr1Úarr2r˜   ÚtruthsÚl1Úindexess          r   Úassert_unordered_allclosez4Test_HalfspaceIntersection.assert_unordered_allclose
  s˜   € ä�T—Z‘Z §¡Ô,ä—‘˜4Ÿ:™: a™=Ð*´$Ô7ˆØò 	&ˆBÜ—j‘j¤# d¨R¡i£.°4Ñ"7×!<Ñ!<À!Ð!<Ó!DÓEÀaÑHˆGÜ˜Ÿ™¨Ô-Ø!%ˆF�7˜1‘:Òð	&ô 	�—
‘
“Õr   Údtc                 ó  — t        j                  g d¢g d¢g d¢g d¢g|¬«      }t        j                  ddg|¬«      }t        j                  ddgddgddgddgg«      }t        j                  ||«      }t	        |j
                  |«       y )	N)r*   r   r   )r   r*   r   )r$   r   éþÿÿÿ)r   r$   rÊ  rl   r$   r)   rP   )r   rT   rR   ÚHalfspaceIntersectionr   Úintersections)r[   rÈ  Ú
halfspacesÚfeasible_pointrB   rŸ   s         r   Ú test_cube_halfspace_intersectionz;Test_HalfspaceIntersection.test_cube_halfspace_intersection  s„   € ä—X‘XšzÚ)Ú)Ú)ð+ð 35ô6ˆ
ô Ÿ™ 1 a &°Ô3ˆä—‘˜C ˜:¨¨S z°C¸°:ÀÀS¸zÐJÓKˆä×*Ñ*¨:°~ÓFˆä˜×*Ñ*¨FÕ3r   c                 óÊ  — t         j                  j                  t         j                  j                  t        «      dd«      }t        j                  |«      }t        j                  |d d …dd …f   |d d …d d…f   f«       }t        j                  g d¢«      }t        j                  ||«      }t        |j                  j                  d«       t        |j                  d«       t        t!        |j"                  «      d«       |j"                  D ]  }t        t!        |«      d«       Œ |d d …d	f   |d d …d d	…f   j%                  |«      z   }| j'                  |d d …d d	…f   j(                  |z  j(                  |j*                  «       t-        j.                  g d
¢«      }|D ]>  }	t        t        j0                  |j                  |	k(  j3                  d¬«      «      d«       Œ@ y )NrÙ   zselfdual-4d-polytope.txtr$   )r)   r)   r)   r)   )é   r0   g      @@rÑ  r2   r*   )r)   r)   r(   ç      à¿r³   )rÜ   rÝ   rÞ   rß   rà   r   Ú
genfromtxtÚhstackrT   rR   rË  r   rÌ  r;   r   Údual_volumer=   Údual_facetsr„   rÇ  rë   Údual_pointsÚ	itertoolsÚpermutationsr¾   rÅ   )
r[   ÚfnameÚineqsrÍ  Ú
feas_pointÚhsÚfacetÚdistsrB   Úpoints
             r   Ú$test_self_dual_polytope_intersectionz?Test_HalfspaceIntersection.test_self_dual_polytope_intersection#  sˆ  € Ü—‘—‘œRŸW™WŸ_™_¬XÓ6¸Ø7ó9ˆä—‘˜eÓ$ˆÜ—i‘i ¢q¨!©" u¡¨u²Q¸¸¸°U©|Ð <Ó=Ð=ˆ
ä—X‘XÒ.Ó/ˆ
Ü×(Ñ(¨°ZÓ@ˆä�R×%Ñ%×+Ñ+¨WÔ5ä˜BŸN™N¨DÔ1Ü”S˜Ÿ™Ó(¨"Ô-Ø—^‘^ò 	(ˆEÜœ˜U› QÕ'ð	(ð š1˜b˜5Ñ! Jªq°#°2°#¨vÑ$6×$:Ñ$:¸:Ó$FÑFˆØ×&Ñ&¨
²1°c°r°c°6Ñ(:×(<Ñ(<¸UÑ(B×'EÑ'EÀrÇ~Á~ÔVä×'Ñ'Ò(;Ó<ˆØò 	MˆEÜœŸ™ ×!1Ñ!1°UÑ!:× ?Ñ ?ÀQÐ ?Ó GÓHÈ!ÕLñ	Mr   c                 ó  — t        j                  g d¢g d¢g d¢g d¢g«      }t        j                  g d¢«      }t        t        t        j
                  ||«       t        j                  dgdgg«      }t        t        t        j
                  ||«       t        j                  ddgg«      }t        t        t        j
                  ||«       t        j                  ddg«      }t        t        j                  t        j
                  ||«       y )N)ç      ð¿r)   r)   )r)   rã  r)   ©rO   r)   rã  ©r)   rO   rã  ©r(   r(   r(   r(   rÒ  )r   rT   rY   r  rR   rË  Ú
QhullError)r[   rÍ  rÎ  s      r   Útest_wrong_feasible_pointz4Test_HalfspaceIntersection.test_wrong_feasible_point:  sÕ   € Ü—X‘XÒ/Ú/Ú/Ú/ð1ó 2ˆ
ô Ÿ™¢/Ó2ˆä”jÜ×1Ñ1°:¸~ô	OäŸ™ C 5¨3¨% .Ó1ˆä”jÜ×1Ñ1°:¸~ô	OäŸ™ C¨ : ,Ó/ˆä”jÜ×1Ñ1°:¸~ô	Oô Ÿ™ 4¨ ,Ó/ˆä”e×&Ñ&Ü×1Ñ1°:¸~õ	Or   c           	      ó  — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      }t        j                  g d¢g d¢g d	¢g d
¢g«      }t        j                  dggdz  «      }t        j                  t        j                  || f«      |f«      }t        j                  g d¢«      }t	        j
                  ||d¬«      }t	        j
                  ||d¬«      }t        |«      D �]  \  }}	|j                  |	t         j                  d d …f   «       |j                  |	t         j                  d d …f   d¬«       t        j                  ||d |dz   …d d …f   f«      }
t	        j
                  |
|«      }t        |j                  |j                  «       t        |j                  |j                  «       t        |j                  |j                  «       | j                  |j                  |j                  «       �Œ |j                  «        y )N)r)   r)   rã  rÒ  )r)   rã  r)   rÒ  )rã  r)   r)   rÒ  )rO   r)   r)   rÒ  )r)   rO   r)   rÒ  )r)   r)   rO   rÒ  )rO   rO   rO   )rO   rO   rã  )rO   rã  rO   )r$   rã  rã  rã  r4   rz  Tr¦   r¨   r$   )r   rT   rÔ  ÚvstackrR   rË  r�   Úadd_halfspacesÚnewaxisr   rÍ  rÌ  rÇ  rX   )r[   rÍ  Úextra_normalsÚoffsetsÚextra_halfspacesrÜ  Úinc_hsÚ
inc_res_hsr|   ÚehsÚtotalrÝ  s               r   rD  z+Test_HalfspaceIntersection.test_incrementalQ  s½  € ä—X‘XÒ2Ú2Ú2Ú1Ú1Ú1ð3ó 4ˆ
ô Ÿ™¢,Ú"/Ú"/Ú"/ð"1ó 2ˆô —(‘(˜S˜E˜7 1™9Ó%ˆÜŸ9™9¤b§i¡i°ÀÀÐ0OÓ&PØ&-ð&/ó 0Ðô —X‘XšlÓ+ˆ
ä×,Ñ,¨Z¸ÐQUÔVˆä×0Ñ0°¸ZØ=AôCˆ
ô  Ð 0Ó1ó 	S‰FˆAˆsØ×!Ñ! #¤b§j¡j²! mÑ"4Ô5à×%Ñ% c¬"¯*©*²a¨-Ñ&8À$Ð%ÔGä—I‘I˜zÐ+;¸D¸Q¸q¹S¸DÂ!¸GÑ+DÐEÓFˆEä×,Ñ,¨U°JÓ?ˆBä˜F×-Ñ-¨z×/DÑ/DÔEÜ˜F×-Ñ-¨r¯}©}Ô=ô ˜B×,Ñ,¨j×.FÑ.FÔGà×*Ñ*¨6×+?Ñ+?À×AQÑAQÖRð	Sð" 	�‰�r   c           	      ó  — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      }t        j                  g d¢«      }t        j                  ||«      }t        j                  g d¢g d	¢g d
¢g d¢g d¢g d¢g«      }g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}t	        |«      t	        |j
                  «      k(  sJ ‚t        ||j
                  «      D ]  \  }}t        |«      t        |«      k(  rŒJ ‚ t        |j                  |«       y )N)rã  r)   r)   r)   )rO   r)   r)   rã  )r)   rã  r)   r)   )r)   rO   r)   rã  )r)   r)   rã  r)   )r)   r)   rO   rã  ræ  )rÊ  r   r   )r,   r   r   )r   rÊ  r   )r   r,   r   )r   r   rÊ  )r   r   r,   )r,   r0   r   )r0   r,   r$   )r1   r,   r   )r,   r1   r$   )r/   r0   r$   )r0   r/   r   )r1   r/   r$   )r/   r1   r   )
r   rT   rR   rË  r=   rÖ  r�  rü   r   r×  )r[   rÍ  rà  rÝ  Úqhalf_pointsÚqhalf_facetsr   r   s           r   Ú	test_cubez$Test_HalfspaceIntersection.test_cube|  só   € ä—X‘XÒ0Ú0Ú0Ú0Ú0Ú0ð2ó 3ˆ
ô —‘šÓ)ˆä×(Ñ(¨°UÓ;ˆô —x‘xÚÚÚÚÚÚð!ó ˆò ÚÚÚÚÚÚÚðˆô �<Ó ¤C¨¯©Ó$7Ò7Ð7Ð7Ü˜ b§n¡nÓ5ò 	$‰DˆAˆqÜ�q“6œS ›VÓ#Ð#Ð#ð	$ô 	˜Ÿ™¨Õ5r   rÕ   r$   r0   c                 ó|  — t        j                  g d¢g d¢g d¢g d¢g«      }t        j                  g d¢g d¢g d¢g d¢g«      }t        j                  |t        j                  d	d
g«      d¬«      }|j	                  |d|…d d …f   «       |j	                  ||d…d d …f   «       |j                  «        t        j                  ddgddgddgddgg«      }|j                  }t        j                  |d d …df   |d d …df   f«      }t        j                  |d d …df   |d d …df   f«      }t        ||   ||   «       y )N)rO   r)   ç       À)rã  r)   rù  )r)   rO   rù  )r)   rã  rù  rä  )rã  r)   rã  rå  )r)   rã  rã  gCëâ6Ô?gaÃÓ+eÑ?Tr¦   r   r0   rO   rã  r$   )	r   rT   rR   rË  rë  rX   rÌ  Úlexsortr   )	r[   rÕ   Ú
big_squareÚsmall_squarerÝ  Úexpected_intersectionsÚactual_intersectionsÚind1Úind2s	            r   Útest_halfspace_batchz/Test_HalfspaceIntersection.test_halfspace_batch   sS  € ô —X‘XšÚ.Ú.Ú.ð0ó 1ˆ
ô
 —x‘x¢Ú!0Ú!0Ú!0ð!2ó 3ˆô
 ×(Ñ(¨Ü)+¯©°6¸6Ð2BÓ)CØ59ô;ˆð 	×Ñ˜, q¨ sª1 uÑ-Ô.Ø
×Ñ˜, q¨ sª1 uÑ-Ô.Ø
�‰Œ
ô "$§¡¨B°¨8Ø,.°¨9Ø,/°¨9Ø,/°¨:ð+7ó "8Ðð  "×/Ñ/Ðô �z‰zÐ/²°1°Ñ5Ð7KÊAÈqÈDÑ7QÐRÓSˆÜ�z‰zÐ1²!°Q°$Ñ7Ð9OÒPQÐSTÐPTÑ9UÐVÓWˆÜÐ,¨TÑ2Ð4JÈ4Ñ4PÕQr   rÍ  )gÃÀJp°˜æ¿g¦zøS_-Ý¿g-|†d¥?)gÑ#Â–‰¨æ?gó–'çöÝ¿g1&Ü¯kÝ¿)r)   gŒ:çe|è?g¹Ä‘"ËÖ¿c                 ó2  — t        j                  g d¢g d¢g d¢g d¢g«      }t        j                  |t        j                  d«      d¬«      }t        j                  t        j                  d¬	«      5  |j                  |«       d d d «       y # 1 sw Y   y xY w)
N©r$   r   r*   ©r   r$   r*   ©r*   r   r*   ©r   r*   r*   r,   Tr¦   zfeasible.*-0.706.*©Úmatch©	r   rT   rR   rË  r  rõ   r   rç  rë  )r[   rÍ  Úinitial_squareÚincremental_intersectors       r   Útest_gh_19865z(Test_HalfspaceIntersection.test_gh_19865Ã  s|   € ô Ÿ(™(Ú¢ª[º+ÐFóˆô #(×"=Ñ"=¸nÜ>@¿h¹hÀq»kØJNô#PÐô �]‰]œ5×+Ñ+Ð3GÔHñ 	?Ø#×2Ñ2°:Ô>÷	?÷ 	?ñ 	?ús   Á2BÂBc           	      óz  — t        j                  g d¢g d¢g d¢g«      }t        j                  g d¢g d¢g d¢g d¢g d¢g d	¢g«      }t        j                  |t        j                  d
«      d¬«      }t        j                  t        j                  d¬«      5  |j                  |«       d d d «       y # 1 sw Y   y xY w)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   r$   r*   )r   r   r*   r*   r/   Tr¦   zfeasible.*[1 0 0 0]r  r	  )r[   rÍ  Úinitial_cuber  s       r   Útest_gh_19865_3dz+Test_HalfspaceIntersection.test_gh_19865_3dØ  s£   € ô —X‘Xš}Ú/Ú+ð-ó .ˆ
ô —x‘x¢Ú!/Ú!.Ú!/Ú!.Ú!/ð!1ó 2ˆô #(×"=Ñ"=¸lÜ>@¿h¹hÀq»kØJNô#PÐô �]‰]œ5×+Ñ+Ð3HÔIñ 	?Ø#×2Ñ2°:Ô>÷	?÷ 	?ñ 	?ús   ÂB1Â1B:c                 óD  — t        j                  g d¢g d¢g d¢g d¢g«      }t        j                  |t        j                  d«      d¬«      }t        j                  t        d¬	«      5  |j                  t        j                  d
«      «       d d d «       y # 1 sw Y   y xY w)Nr  r  r  r  r,   Tr¦   z2D arrayr  )r0   r0   r0   )
r   rT   rR   rË  r  rõ   r   r  rë  Úones©r[   r
  r  s      r   Útest_2d_add_halfspace_inputz6Test_HalfspaceIntersection.test_2d_add_halfspace_inputë  s‚   € ô Ÿ(™(Ú¢ª[º+ÐFóˆô #(×"=Ñ"=¸nÜ>@¿h¹hÀq»kØJNô#PÐô �]‰]œ:¨ZÔ8ñ 	GØ#×2Ñ2´2·7±7¸9Ó3EÔF÷	G÷ 	Gñ 	Gús   Á(%BÂBc                 óŒ  — t        j                  g d¢g d¢g d¢g d¢g«      }t        j                  |t        j                  d«      d¬«      }t        |j                  t        j                  d«      «       |j                  t        j                  g d	¢«      «       t        |j                  t        j                  d
«      «       y )Nr  r  r  r  r,   Tr¦   r0   )r,   r,   r*   r1   )	r   rT   rR   rË  r  r   Údual_verticesr  rë  r  s      r   Útest_1d_add_halfspace_inputz6Test_HalfspaceIntersection.test_1d_add_halfspace_input÷  s‹   € äŸ(™(Ú¢ª[º+ÐFóˆô #(×"=Ñ"=¸nÜ>@¿h¹hÀq»kØJNô#PÐô 	Ð/×=Ñ=¼r¿y¹yÈ»|ÔLØ×.Ñ.¬r¯x©xº
Ó/CÔDÜÐ/×=Ñ=¼r¿y¹yÈ»|ÕLr   N)r¢   )rd   re   rf   rÇ  rõ   rö   rE  r   ru   rÿ   rÏ  rá  rè  rD  r÷  r<   r  rT   r  r  r  r  rg   r   r   rÀ  rÀ  	  sá   „ ó	ð ‡[�[×Ñ˜T B§J¡J°Ð#4Ó5ñ4ó 6ð4òMò.Oò.)òV"6ðH ‡[�[×Ñ˜S¡%¨¨!£*Ó-ñRó .ðRðD ‡[�[×Ñ˜\Ø€R‡X�XÒ4Ó5Ø€R‡X�XÒ6Ú5Ú-ð/ó 0ð,ó ñ?óð?ò?ò&
Gó
Mr   rÀ  Údiagram_typec                 óÔ   — t         j                  j                  d«      }|j                  d«      }t        j                  t
        d¬«      5   | |«       d d d «       y # 1 sw Y   y xY w)Né{   )r0   r+   r/   Ú
dimensionsr  )r   r«   rƒ  rõ   r   r  )r  r‹  Úinvalid_datas      r   Útest_gh_20623r    sO   € ä
�)‰)×
Ñ
 Ó
$€CØ—:‘:˜jÓ)€LÜ	�‰”z¨Ô	6ñ #Ù�\Ô"÷#÷ #ñ #ús   Á	AÁA'c                  ól  — t        j                  ddgddgddgddgg«      } t        j                  | «      }t	        j
                  t        «      5  |j                  d«       d d d «       t	        j
                  t        «      5  |j                  |«       d d d «       y # 1 sw Y   Œ=xY w# 1 sw Y   y xY w)Nr   r7  r$   )r   rT   rR   rv   rõ   r   Ú
IndexErrorrx   ©Ú
generatorsrz   s     r   Útest_gh_21286r!    sœ   € Ü—‘˜A˜q˜6 A s 8¨a°¨V°a¸°VÐ<Ó=€JÜ
�.‰.˜Ó
$€Cä	�‰”zÓ	"ñ Ø×Ñ˜Ô÷ä	�‰”zÓ	"ñ ð 	×Ñ˜Ô÷ð ÷ð ú÷ð ús   ÁBÂB*ÂB'Â*B3c                  óò   — t        j                  ddgddgddgddgg«      } t        j                  | «      }t	        j
                  t        «      5  |j                  g d¢«       d d d «       y # 1 sw Y   y xY w)Nr   r7  r$   )r,   r,   r,   )r   rT   rR   rv   rõ   r   r  rx   r  s     r   Útest_find_simplex_ndim_errr#    sf   € Ü—‘˜A˜q˜6 A s 8¨a°¨V°a¸°VÐ<Ó=€JÜ
�.‰.˜Ó
$€CÜ	�‰”zÓ	"ñ $Ø×ÑšÔ#÷$÷ $ñ $ús   ÁA-Á-A6)9rÜ   rU   Únumpyr   Únumpy.testingr   r   r   r   r   rõ   r   rY   Úscipy.spatial._qhullÚspatialÚ_qhullrR   Úscipy.spatialr	   r¦  r
   rØ  r   r   r    r«   rì   rB   rT   Úpathological_data_1r¿   ru   rÁ   Úpathological_data_2rí   Úbug_2850_chunksÚbug_2850_chunks_2r©  r:   r?   rI   r@   rA   rL   ri   rú   r  rR  rT  r~  rÀ  rö   rE  rv   r  r!  r#  rg   r   r   ú<module>r.     sG  ðÛ 	Û ã ÷Iõ Iã Ý *ç $Ð $Ý +Ý !ã òð 16ó 	ð ‡	�	‡�ˆtÔ â	=€à�b—h‘hð  Ø
ˆ5€Mð Ø˜%�=ð Ø#(¨ -ð Ø27¸°ð à
ˆ3€Kð à˜�ð à % d˜|ð à.3°D¨\ð ð ˆ4€Lð ð ˜�-ð ð #(¨ ð ð 27°u°ð ð ˆ5€Mð	 ð ˜#�;ð	 ð "' t ð	 ð 05°T¨lð	 ð
 ˆ4€Lð ð
 ˜�,ð ð
 "' u ð ð
 16°d¨|ð ð ˆ5€Mð ð ˜#�;ð ð "' t ð ð 05°U¨mð ð ˆ5€Mð ð ˜$�<ð ð #(¨ ð ð 16°e¨}ð ð ˆ4€Lð ð ˜�-ð ð #(¨ ð ð 27°u°ð ð ˆ3€Kð ð ˜�ð ð !& d˜|ð ð /4°D¨\ð ð 	ˆ€Kð ð �e�ð ð  # 5˜kð ð -0°¨;ð ð :=¸S¸	ð ð 	ˆ€Jð ð �T�
ð ð ! ˜Jð ð *-¨T¨
ð ð 6:¸%°Lð ð 
ˆ%€Lð ð ˜�,ð ð "& c 
ð ð .2°$¨Kð ð 
ˆ$€Kð ð �t�ð ð  $ E˜lð ð .2°$¨Kð ð 
ˆ%€Lð ð ˜�,ð ð "& d ð ð /3°4¨[ð ð 
ˆ%€Lð ð ˜�*ð ð  $ D˜kð ð -1°¨<ð ð  
ˆ$€Kð! ð  �u�ð! ð  !% U˜|ð! ð  /3°5¨\ð! ð" 
ˆ%€Lð# ð" ˜�*ð# ð"  $ D˜kð# ð" -1°¨;ð# ð$ 
ˆ$€Kð% ð$ �t�ð% ð$  $ E˜lð% ð$ .2°%¨Lð% ð& 
ˆ%€Lð' ð& ˜�,ð' ð& "& c 
ð' ð& .2°$¨Kð' ð( 
ˆ$€Kð) ð( �t�ð) ð(  $ D˜kð) ó Ð ð. �b—h‘hØˆ€Hˆr�1ˆg˜˜A�wØˆ€Gˆa�ˆV�a˜�VØˆˆXˆR�X‰X�b—j‘jÓ!×%Ñ%Ñ%Ð&¨¨A¨°°A°ð ó Ð ð —9‘9—>‘> " aÓ(Ø�2—8‘8˜a ˜U Q q E¨A¨a¨5°1°Q°%Ð8Ó9ð€ð
 %Ø—i‘i—n‘n R¨Ó+Ø˜X˜RŸX™X¨¨! u¨q°¨e°a¸°U¸Q¸q¸EÐ&BÓCÑCðEñEÐ ð
 �2—:‘:˜fÓ%Ø—‘—‘  AÓ&Ø—‘—‘  AÓ&Ø—‘—‘  AÓ&Ø—‘—‘  AÓ&Ø—‘—‘  AÓ&Ø—‘—‘  AÓ&Ø—‘—‘  AÓ&Ø)Ø)ñ€ð ! $Ð'Ø$ dÐ+ñÐ ò4ð4 ò '€DØò 'ˆ	Ù�d˜IÕ&ñ'ð'÷
+ñ +÷\XDñ XD÷vñ ÷B}<ñ }<ò@4%÷nz*ñ z*÷xkñ k÷`xMñ xMðv ‡�×Ñ˜¨'°5·>±>Ð)BÓCñ#ó Dð#ò	ó$r   