
    Ui8                         d dl Zd dlZd dlmZmZmZmZ d dlZd dlm	Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ dZd	 Zd
 Zd Zd Zd Zd Zd ZddZ G d d          ZdS )    N)assert_equalassert_almost_equalassert_array_equalassert_array_almost_equal)raises)SphericalVoronoidistance)linear_sum_assignment)golden)gammag|=c                  B    t          j        g dg dg dg dg          S )N   r   r   )r   r   )r   r   r   )r   r   r   nparray     /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/spatial/tests/test_spherical_voronoi.py_generate_tetrahedronr      s+    8YYY[[[+++FGGGr   c                  p    t          j        t          t          j        ddgd                              S )Nr         ?   repeat)r   r   list	itertoolsproductr   r   r   _generate_cuber       s.    8D*B8A>>>??@@@r   c            	      N    t          j        g dg dg dg dg dg dg          S )N)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r   r   r   _generate_octahedronr"      s@    8ZZZZZZZZZZZ9 : : :r   c            	      v   t                      } t          j        dt           dt          z  gdt           dt          z  gdt          
 dt          z  gdt          
 dt          z  gg          }t          j        dt          z  dt           gdt          z  dt           gdt          z  dt          
 gdt          z  dt          
 gg          }t          j        t           dt          z  dgt           dt          z  dgt          
 dt          z  dgt          
 dt          z  dgg          }t          j        | |||f          S )Nr   r   r   )r    r   r   phiconcatenate)x1x2x3x4s       r   _generate_dodecahedronr*      s+   			B	AtR#X&tR#X&tR#X&tR#X&( 
) 
)B 
BHa#&Ha#&Ha#&Ha#&( 
) 
)B 
SD"s(A&D"s(A&D"s(A&D"s(A&( 
) 
)B >2r2r*+++r   c                       t          j        ddt           gddt          
 gddt           gddt          
 gg           t          j         fdt	          d          D                       S )Nr   r   r   c                 >    g | ]}t          j        |d           S )r   axis)r   roll).0ixs     r   
<listcomp>z)_generate_icosahedron.<locals>.<listcomp>6   s*    CCCQ271aa000CCCr   r   )r   r   r$   r%   range)r2   s   @r   _generate_icosahedronr5   1   sq    
1b3$-b3$-b3$-b3$-! 	" 	"A >CCCC%((CCCDDDr   c                 \   g d}g d}| |vr| |vrt          d          | |v r}|                    |           dz   }t          j        ddt          j        z  |d          }t          j        t          j        |          t          j        |          g          j        }nh| d	k    rt                      }nS| d
k    rt                      }n>| dk    rt                      }n)| dk    rt                      }n| dk    rt                      }|t          j                            |dd          z  S )N)
trianglesquarepentagonhexagonheptagonoctagonnonagondecagon	undecagon	dodecagon)tetrahedroncube
octahedrondodecahedronicosahedronzunrecognized polytoper   r      F)endpointrA   rB   rC   rD   rE   r   Tr.   keepdims)
ValueErrorindexr   linspacepivstackcossinTr   r    r"   r*   r5   linalgnorm)namepolygons	polyhedranthetasps         r   _generate_polytoperZ   9   sF   K K KH     I8I 5 50111xNN4  1$QBE	1u===Irvf~~rvf~~6779			!##				 ""			"$$			!##ry~~aa$~7777r   c                 d    dt           j        | dz  z  z  t          | dz            z  || dz
  z  z  S )NrF   r   )r   rM   r   )dimradiuss     r   _hypersphere_arear^   S   s5    rusQw%a..06C!G3DDDr   c                     t           j                            |          }|                    | |          }|t           j                            |dd          z  }|S )Nseedr   TrH   )r   randomRandomStaterandnrR   rS   )rW   r\   ra   rngpointss        r   _sample_sphererg   X   sP    
)

T

*
*CYYq#F
binnV!dn;;;FMr   c            	       H   e Zd Zd Zd 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                            d edd                    ej                            dddg          d                         Zej                            dg d          ej                            d edd                    ej                            dddg          d                                     Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            dddg          ej                            dddg          ej                            dg d          ej                            dddg          ej                            d ddg          d!                                                             Zej                            d"g d#          d$             Zd% Zej                            dd&d'g          ej                            d(g d)          d*                         Zd+ Zd,S )-TestSphericalVoronoic                 h    t          j        g dg dg dg dg dg dg dg dg          | _        d S )	N)g7Ag4QĿgM%?)gavcgtu?gc?)gX&p?g|gZ
Bɿ)g-NgQtag;[/ۿ)g|-S?gl̲?gp?)gwg4g?g݆Xf¿)gCk?gl
=r1̿gt8A@)g9K?g͡w4u?g?)r   r   rf   selfs    r   setup_methodz!TestSphericalVoronoi.setup_methodb   sf    h222111222333000222111000 2 	
 	
r   c                 V   t          j        g d          }d}t          | j                  }t          | j        |z  |          }t          | j        |z   |          }t          | j        |z  |z   ||          }t	          |j        t          j        g d                     t          |j        d           t	          |j        t          j        g d                     t          |j        d           t	          |j        |           t          |j        d           t	          |j        |           t          |j        |           t          t          | j                            }t	          |j        t          j        g d                     t          |j        d           d S )Nr   rF   r   rF   center)r   r   r   r   )	r   r   r   rf   r   rq   r   r]   
memoryview)rl   rq   r]   s1s2s3s4s5s           r   test_constructorz%TestSphericalVoronoi.test_constructorn   st   )))$$dk** dkF2F;;dkF26BBBdkF2V;VVLL29bhyyy&9&9:::RY"""29bhyyy&9&9:::RY"""29f---RY"""29f---RY''' j556629bhyyy&9&9:::RY"""""r   c                     t          | j                  }t          j        g d          }t          | j        |z   |          }t	          |j        |j                   t          |j        |z   |j                   d S )Nr   rp   )r   rf   r   r   r   regionsr   vertices)rl   	sv_originrq   sv_translateds       r   ,test_vertices_regions_translation_invariancezATestSphericalVoronoi.test_vertices_regions_translation_invariance   s    $T[11	)))$$(v)=fMMMY&(=>>>!)"4v"="/"8	: 	: 	: 	: 	:r   c                     t          | j                  }t          | j        dz  d          }t          |j        |j                   t	          |j        dz  |j                   d S )NrF   )r   rf   r   rz   r   r{   )rl   sv_unit	sv_scaleds      r   (test_vertices_regions_scaling_invariancez=TestSphericalVoronoi.test_vertices_regions_scaling_invariance   sg    "4;//$T[1_a88	W_i&7888!'"2Q"6"+"4	6 	6 	6 	6 	6r   c                     t          j        t          d          5  t          | j        d            d d d            d S # 1 swxY w Y   d S )Nz`radius` is `None`. *matchr]   )pytestr   rJ   r   rf   rk   s    r   test_old_radius_api_errorz.TestSphericalVoronoi.test_old_radius_api_error   s    ]:-DEEE 	7 	7T[6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A  AAc                     t          | j                  }|j        }|                                 t	          t          |j                  t          |                     d S N)r   rf   rz   sort_vertices_of_regionsr   sorted)rl   svunsorted_regionss      r   test_sort_vertices_of_regionsz2TestSphericalVoronoi.test_sort_vertices_of_regions   sT    dk**:
##%%%VBJ''0@)A)ABBBBBr   c                 n   t          g dg dg dg dg dg dg dg dg          }t          t          j        t          |                     }t	          | j                  }|                                 t          t          j        t          |j                             }t          ||           d S )	N)r         rF   r   )rF   r   
            )r   r      r   )r   r   r   r   r   )	   r   r   )rF   r   r   )r   r   r   r   r   )r   r   r   r   r   )	r   r   r   chainr   rf   r   rz   r   )rl   expectedr   actuals       r   'test_sort_vertices_of_regions_flattenedz<TestSphericalVoronoi.test_sort_vertices_of_regions_flattened   s    ???,@,@,@,,,*??KKK+++-=-=-=? @ @ 	)9)9:;;dk**
##%%%iovbj'9'9:;;68,,,,,r   c                     t          j        g dg dg dg dg dg          }t          j        t          d          5  t          |          }|                                 d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )      ?r   r   r   zthree-dimensionalr   )r   r   r   r   	TypeErrorr   r   )rl   rf   r   s      r   ,test_sort_vertices_of_regions_dimensionalityzATestSphericalVoronoi.test_sort_vertices_of_regions_dimensionality   s    <<<'<<'<<'<<///	1 2 2
 ]9,?@@@ 	* 	*!&))B'')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   $A00A47A4c                     t          | j                  }| j        j        d         dz  dz
  }|j        j        d         }t	          ||           d S )Nr   rF   r   )r   rf   shaper{   r   )rl   r   r   r   s       r   test_num_verticesz&TestSphericalVoronoi.test_num_vertices   sQ     dk**;$Q'!+a/"1%VX&&&&&r   c           	         t          | j                  }|j        D ]}t          j        |j        t          j        |g                    }t          j        t          |          dd                   }t          |d         |d         dt          |                     t          |d         |d         dt          |                     d S )Nr   r   r   r   rF   )
r   rf   r{   r	   cdistr   r   r   r   str)rl   r   vertex	distancesclosests        r   test_voronoi_circlesz)TestSphericalVoronoi.test_voronoi_circles   s    dk**k 	H 	HF ry"(F82D2DEEIhvi001566G
GAJ3v;;GGG
GAJ3v;;GGGG		H 	Hr   c                     t          j        | j        | j        f          | _        t	          t
                    5  t          | j                   d d d            d S # 1 swxY w Y   d S r   )r   r%   rf   
degenerateassert_raisesrJ   r   rk   s    r   test_duplicate_point_handlingz2TestSphericalVoronoi.test_duplicate_point_handling   s     .$+t{)CDD:&& 	. 	.T_---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AA #A c                     t          t                    5  t          | j        d           d d d            d S # 1 swxY w Y   d S )Ng\(\?r   r   rJ   r   rf   rk   s    r   test_incorrect_radius_handlingz3TestSphericalVoronoi.test_incorrect_radius_handling   s     :&& 	7 	7T[6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   9= =c                     t          t                    5  t          | j        g d           d d d            d S # 1 swxY w Y   d S )N)g?r   r   rp   r   rk   s    r   test_incorrect_center_handlingz3TestSphericalVoronoi.test_incorrect_center_handling   s     :&& 	> 	>T[====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   ;??r\   rF   r   shiftFTc                    d}t          ||d          }t          j        |d d df                   |d d df<   t          j        |          dz   |z  }t	          ||z   |          }t          j        d|j        |z
  |j        |j        d d df                  |z
            }t          j	        t          j
        |dd                    }t          j        |          t          j        dz  k    sJ d S )	Nr   r   r`   r   rp   zij,ij->ir   rF   )rg   r   absaranger   einsumr{   rf   
_simplicesarccosclipmaxrM   )	rl   r\   r   rW   rf   rq   r   dotscircumradiis	            r   test_single_hemisphere_handlingz4TestSphericalVoronoi.test_single_hemisphere_handling   s     3Q///vfQQQTl++qqq!t)C..1$-fvof===yR[6%9%'Yr}QQQT/B%Cf%LN Nib! 4 455vk""RUQY......r   rW   )r   rF   r   c                 H   t          j        |          dz   |z  }t          ||dz
  d          }t          j        |t          j        |df          g          }t          j        t          d          5  t          ||z   |           d d d            d S # 1 swxY w Y   d S )Nr   r   r`   zRank of input pointsr   rp   )	r   r   rg   hstackzerosr   r   rJ   r   )rl   rW   r\   r   rq   rf   s         r   test_rank_deficientz(TestSphericalVoronoi.test_rank_deficient   s     )C..1$-37333FBHaV$4$4566]:-CDDD 	= 	=Vf_V<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   5BBBc           	         d}t          ||d          }t          |          }|j        j        d         |k    sJ t	          |j                  |k    sJ g }t          j        |j                  }t          d|dz             D ]}g }t          j        t          |          |          D ].}	|                    |d d t          |	          f                    /t          j        t          j        |          d          }|                    t	          |                     dd|dz
  z  z   }
t!          d t#          |          D                       }|
|k    sJ d S )Nd   r   r`   r   r-   r   c                 $    g | ]\  }}d |z  |z  S )r   r   )r0   r1   es      r   r3   z?TestSphericalVoronoi.test_higher_dimensions.<locals>.<listcomp>  s$    KKKDAqR!GaKKKKr   )rg   r   r{   r   lenrz   r   sortr   r4   r   combinationsappendr   uniquer%   sum	enumerate)rl   r\   rW   rf   r   cell_counts	simplicesr1   cellsindicesexpected_euleractual_eulers               r   test_higher_dimensionsz+TestSphericalVoronoi.test_higher_dimensions   si   3Q///f%%{ #s****2:!#### GBM**	q#'"" 	+ 	+AE$1%**a@@ : :Yqqq$w--'789999IbnU33!<<<Es5zz****bCE]*KKIk4J4JKKKLL------r   c                 R   t          j        t          j                   t          j                  f          }t          |          }t	          fd|j        D                       sJ t          j        t          t          j	        ddg                              }|
                    t           j                  t          j                  z  }t          j        |j        |          }t!          |          }||                                         t$          k     sJ d S )Nc                 B    g | ]}t          |          d dz
  z  k    S )rF   r   )r   )r0   r   r\   s     r   r3   zDTestSphericalVoronoi.test_cross_polytope_regions.<locals>.<listcomp>  s,    ???qCFFa#'l*???r   r   r   r   )r   r%   eyer   allrz   rN   r   r   r   astypefloat64sqrtr	   r   r{   r
   r   TOLrl   r\   rf   r   r   distress    `     r   test_cross_polytope_regionsz0TestSphericalVoronoi.test_cross_polytope_regions  s     "&++rvc{{ ;<<f%%????BJ???@@@@@ 9T)"3RGC"H"H"HIIJJ??2:..= ~bk844#D))Cy}}$$$$$$r   c                    t          j        t          t          j        ddg|                              }|                    t           j                  t          j        |          z  }t          |          }t          j	        t          j
        |           t          j
        |          f          }t          j        |j        |          }t          |          }||                                         t           k     sJ d S )Nr   r   r   )r   rN   r   r   r   r   r   r   r   r%   r   r	   r   r{   r
   r   r   r   s          r   test_hypercube_regionsz+TestSphericalVoronoi.test_hypercube_regions  s     4	 12q'# F F FGGHHrz**RWS\\9f%% >BF3KK<"=>> ~bk844#D))Cy}}$$$$$$r   r   i  r   r]   )r   r   rF   single_hemispherec                 h   t          ||d          }|r%t          j        |d d df                   |d d df<   t          j        |          dz   |z  }||z  |z   }t	          |||          }|                                }	t          |	                                t          ||                     d S )Nr   r`   r   r]   rq   )	rg   r   r   r   r   calculate_areasr   r   r^   )
rl   rW   r\   r]   r   r   rf   rq   r   areass
             r   test_area_reconstitutionz-TestSphericalVoronoi.test_area_reconstitution*  s      3Q///  	06&A,//F111a4L)C..1$-&6)fVFCCC""$$EIIKK):3)G)GHHHHHr   poly)r7   r@   rA   rB   rC   rD   rE   c                     t          |          }|j        \  }}t          |          }|                                }t	          |t          |d          |z             d S )Nr   )rZ   r   r   r   r   r^   )rl   r   rf   rW   r\   r   r   s          r   test_equal_area_reconstitutionz3TestSphericalVoronoi.test_equal_area_reconstitution>  s`     $D))3f%%""$$E#4S!#<#<q#@AAAAAr   c                 .   d}t          j        t          j        |           t          j        |          f          }t          |          }t	          j        t          d          5  |                                 d d d            d S # 1 swxY w Y   d S )Nr   zOnly supportedr   )r   r%   r   r   r   r   r   r   )rl   r\   rf   r   s       r   test_area_unsupported_dimensionz4TestSphericalVoronoi.test_area_unsupported_dimensionH  s    "&++rvc{{ ;<<f%%]9,<=== 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   (B

BBr   r   rq   )Nro   )r   g       @g      @c                 4   || j         z  }|||z  }t          |||          }|j         j        t          j        t          j                  u sJ |j        j        t          j        t          j                  u sJ t          |j        t                    sJ d S )Nr   )	rf   r   dtyper   r   rq   
isinstancer]   float)rl   r]   rq   rf   r   s        r   test_attribute_typesz)TestSphericalVoronoi.test_attribute_typesO  s     $+%fFfVFCCCy"(2:"6"66666y"(2:"6"66666")U+++++++r   c                    t          | j                  }t          |j        d         d                   }|j        D ]}t	          |t
                    sJ |                                 t	          |j        d         d         |          sJ |                                 t	          |j        d         d         |          sJ d S )Nr   )r   rf   typerz   r   r   r   )rl   r   r   regions       r   test_region_typesz&TestSphericalVoronoi.test_region_types[  s     dk**RZ]1%&&j 	, 	,Ffd++++++
##%%%"*Q-*E22222
##%%%"*Q-*E2222222r   N)__name__
__module____qualname__rm   rx   r~   r   r   r   r   r   r   r   r   r   r   r   markparametrizer4   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   ri   `   s       

 

 

# # #0: : :6 6 67 7 7C C C- - -* * *	' 	' 	'H H H. . .7 7 7> > > [UEE!QKK00[Wudm44	/ 	/ 54 10	/ [S***--[UEE!QKK00[Wudm44= = 54 10 .-= [UEE!QKK00. . 10.( [UEE!QKK00% % 10%$ [UEE!QKK00% % 10%" [S2s),,[UQF++[X{{{33[Wudm44[05$-@@I I A@ 54 43 ,+ -,
I [V &E &E &E F FB BF FB! ! ! [X2w//[X'F'F'FGG, , HG 0/,3 3 3 3 3r   ri   r   )numpyr   r   numpy.testingr   r   r   r   r   r   r   scipy.spatialr   r	   scipy.optimizer
   scipy.constantsr   r$   scipy.specialr   r   r   r    r"   r*   r5   rZ   r^   rg   ri   r   r   r   <module>r     s          6 6 6 6 6 6 6 6 6 6 6 6  * * * * * * 4 4 4 4 4 4 4 4 0 0 0 0 0 0 ) ) ) ) ) )       H H HA A A: : :
, , ,$E E E8 8 84E E E
   F3 F3 F3 F3 F3 F3 F3 F3 F3 F3r   