
    -i8                         S SK rS SKrS SKJrJrJrJr  S SKrS SKJ	r
  S SKJrJr  S SKJr  S SKJr  S SKJr  SrS	 rS
 rS rS rS rS rS rSS jr " S S5      rg)    N)assert_equalassert_almost_equalassert_array_equalassert_array_almost_equal)raises)SphericalVoronoidistance)linear_sum_assignment)golden)gammag|=c                  F    [         R                  " / SQ/ SQ/ SQ/ SQ/5      $ )N   r   r   )r   r   )r   r   r   )r   r   r   nparray     ]/var/www/html/venv/lib/python3.13/site-packages/scipy/spatial/tests/test_spherical_voronoi.py_generate_tetrahedronr      s    88Y[+FGGr   c            	      j    [         R                  " [        [        R                  " SS/SS95      5      $ )Nr         ?   repeat)r   r   list	itertoolsproductr   r   r   _generate_cuber       s'    88D**B8A>?@@r   c            	      R    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      $ )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%    88ZZZ9 : :r   c            	      J   [        5       n [        R                  " S[        * S[        -  /S[        * S[        -  /S[        7S[        -  /S[        7S[        -  //5      n[        R                  " S[        -  S[        * /S[        -  S[        * /S[        -  S[        7/S[        -  S[        7//5      n[        R                  " [        * S[        -  S/[        * S[        -  S/[        7S[        -  S/[        7S[        -  S//5      n[        R                  " XX#45      $ )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 >>22*++r   c                     [         R                  " SS[        * /SS[        7/SS[        * /SS[        7//5      n [         R                  " [	        S5       Vs/ s H  n[         R
                  " XSS9PM     sn5      $ s  snf )Nr   r   r   r   axis)r   r   r$   r%   rangeroll)xis     r   _generate_icosahedronr2   1   sr    
1b3$-b3$-b3$-b3$-! 	"A >>%(C(Q2771a0(CDDCs   A>c                 @   / SQn/ SQnX;  a  X;  a  [        S5      eX;   a  UR                  U 5      S-   n[        R                  " SS[        R                  -  USS9n[        R
                  " [        R                  " U5      [        R                  " U5      /5      R                  nOTU S	:X  a  [        5       nOCU S
:X  a  [        5       nO2U S:X  a  [        5       nO!U S:X  a  [        5       nOU S:X  a
  [        5       nW[        R                  R                  USSS9-  $ )N)
trianglesquarepentagonhexagonheptagonoctagonnonagondecagon	undecagon	dodecagon)tetrahedroncube
octahedrondodecahedronicosahedronzunrecognized polytoper   r      F)endpointr>   r?   r@   rA   rB   r   Tr-   keepdims)
ValueErrorindexr   linspacepivstackcossinTr   r    r"   r*   r2   linalgnorm)namepolygons	polyhedranthetasps         r   _generate_polytoperW   9   s    KH I 5011NN4 1$QBEE	1u=IIrvvf~rvvf~6799		!#			 "		"$		!#ryy~~aa$~777r   c                 b    S[         R                  U S-  -  -  [        U S-  5      -  XS-
  -  -  $ )NrC   r   )r   rJ   r   )dimradiuss     r   _hypersphere_arear[   S   s3    ruusQw%a.06!G3DDDr   c                     [         R                  R                  US9nUR                  X5      nU[         R                  R                  USSS9-  nU$ )Nseedr   TrE   )r   randomRandomStaterandnrO   rP   )rT   rY   r^   rngpointss        r   _sample_sphererd   X   sI    
))

T

*CYYqF
biinnV!dn;;FMr   c            	          \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS r\R$                  R'                  S\" SS5      5      \R$                  R'                  SSS/5      S 5       5       r\R$                  R'                  S/ SQ5      \R$                  R'                  S\" SS5      5      \R$                  R'                  SSS/5      S 5       5       5       r\R$                  R'                  S\" SS5      5      S 5       r\R$                  R'                  S\" SS5      5      S 5       r\R$                  R'                  S\" SS5      5      S 5       r\R$                  R'                  SSS/5      \R$                  R'                  SSS/5      \R$                  R'                  S/ S Q5      \R$                  R'                  SSS/5      \R$                  R'                  S!SS/5      S" 5       5       5       5       5       r\R$                  R'                  S#/ S$Q5      S% 5       rS& r\R$                  R'                  SS'S(/5      \R$                  R'                  S)/ S*Q5      S+ 5       5       rS, rS-rg.)/TestSphericalVoronoi`   c                 j    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      U l        g )	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   rc   selfs    r   setup_method!TestSphericalVoronoi.setup_methodb   s/    hh21230210 2 	
r   c                 r   [         R                  " / SQ5      nSn[        U R                  5      n[        U R                  U-  U5      n[        U R                  U-   US9n[        U R                  U-  U-   X!5      n[	        UR
                  [         R                  " / SQ5      5        [        UR                  S5        [	        UR
                  [         R                  " / SQ5      5        [        UR                  S5        [	        UR
                  U5        [        UR                  S5        [	        UR
                  U5        [        UR                  U5        [        [        U R                  5      5      n[	        UR
                  [         R                  " / SQ5      5        [        UR                  S5        g )Nr   rC   r   rC   center)r   r   r   r   )	r   r   r   rc   r   rp   r   rZ   
memoryview)rj   rp   rZ   s1s2s3s4s5s           r   test_constructor%TestSphericalVoronoi.test_constructorn   s%   )$dkk* dkkF2F;dkkF26BdkkF2V;VL299bhhy&9:RYY"299bhhy&9:RYY"299f-RYY"299f-RYY' j56299bhhy&9:RYY"r   c                    [        U R                  5      n[        R                  " / SQ5      n[        U R                  U-   US9n[	        UR
                  UR
                  5        [        UR                  U-   UR                  5        g )Nr   ro   )r   rc   r   r   r   regionsr   vertices)rj   	sv_originrp   sv_translateds       r   ,test_vertices_regions_translation_invarianceATestSphericalVoronoi.test_vertices_regions_translation_invariance   sg    $T[[1	)$(v)=fMY&&(=(=>!)"4"4v"="/"8"8	:r   c                     [        U R                  5      n[        U R                  S-  S5      n[        UR                  UR                  5        [	        UR
                  S-  UR
                  5        g )NrC   )r   rc   r   rz   r   r{   )rj   sv_unit	sv_scaleds      r   (test_vertices_regions_scaling_invariance=TestSphericalVoronoi.test_vertices_regions_scaling_invariance   sV    "4;;/$T[[1_a8	W__i&7&78!'"2"2Q"6"+"4"4	6r   c                     [         R                  " [        SS9   [        U R                  S S9  S S S 5        g ! , (       d  f       g = f)Nz`radius` is `None`. *matchrZ   )pytestr   rG   r   rc   ri   s    r   test_old_radius_api_error.TestSphericalVoronoi.test_old_radius_api_error   s,    ]]:-DET[[6 FEEs	   8
Ac                     [        U R                  5      nUR                  nUR                  5         [	        [        UR                  5      [        U5      5        g N)r   rc   rz   sort_vertices_of_regionsr   sorted)rj   svunsorted_regionss      r   test_sort_vertices_of_regions2TestSphericalVoronoi.test_sort_vertices_of_regions   s?    dkk*::
##%VBJJ'0@)ABr   c                 R   [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        [        R                  " [        U5      6 5      n[	        U R
                  5      nUR                  5         [        [        R                  " [        UR                  5      6 5      n[        X15        g )	N)r         rC   r   )rC   r   
            )r   r      r   )r   r   r   r   r   )	   r   r   )rC   r   r   )r   r   r   r   r   )r   r   r   r   r   )	r   r   r   chainr   rc   r   rz   r   )rj   expectedr   actuals       r   'test_sort_vertices_of_regions_flattened<TestSphericalVoronoi.test_sort_vertices_of_regions_flattened   s~    ?,@,*K+-=? @ 	)9:;dkk*
##%ioovbjj'9:;6,r   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " [        SS9   [        U5      nUR                  5         S S S 5        g ! , (       d  f       g = f)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   )rj   rc   r   s      r   ,test_sort_vertices_of_regions_dimensionalityATestSphericalVoronoi.test_sort_vertices_of_regions_dimensionality   sW    <'''/	1 2
 ]]9,?@!&)B'') A@@s   A$$
A2c                     [        U R                  5      nU R                  R                  S   S-  S-
  nUR                  R                  S   n[	        X25        g )Nr   rC   r   )r   rc   shaper{   r   )rj   r   r   r   s       r   test_num_vertices&TestSphericalVoronoi.test_num_vertices   sL     dkk*;;$$Q'!+a/""1%V&r   c           	      x   [        U R                  5      nUR                   H  n[        R                  " UR                  [
        R                  " U/5      5      n[
        R                  " [        U5      SS 5      n[        US   US   S[        U5      5        [        US   US   S[        U5      5        M     g )Nr   r   r   r   rC   )
r   rc   r{   r	   cdistr   r   r   r   str)rj   r   vertex	distancesclosests        r   test_voronoi_circles)TestSphericalVoronoi.test_voronoi_circles   s    dkk*kkF ryy"((F82DEIhhvi0156G
GAJ3v;G
GAJ3v;G	 "r   c                     [         R                  " U R                  U R                  45      U l        [	        [
        5         [        U R                  5        S S S 5        g ! , (       d  f       g = fr   )r   r%   rc   
degenerateassert_raisesrG   r   ri   s    r   test_duplicate_point_handling2TestSphericalVoronoi.test_duplicate_point_handling   sA     ..$++t{{)CD:&T__- '&&s   A  
A.c                 ~    [        [        5         [        U R                  SS9  S S S 5        g ! , (       d  f       g = f)Ng\(\?r   r   rG   r   rc   ri   s    r   test_incorrect_radius_handling3TestSphericalVoronoi.test_incorrect_radius_handling   s&     :&T[[6 '&&s   .
<c                     [        [        5         [        U R                  / SQS9  S S S 5        g ! , (       d  f       g = f)N)g?r   r   ro   r   ri   s    r   test_incorrect_center_handling3TestSphericalVoronoi.test_incorrect_center_handling   s&     :&T[[= '&&s   0
>rY   rC   r   shiftFTc                    Sn[        X1SS9n[        R                  " US S 2S4   5      US S 2S4'   [        R                  " U5      S-   U-  n[	        XE-   US9n[        R
                  " SUR                  U-
  UR                  UR                  S S 2S4      U-
  5      n[        R                  " [        R                  " USS5      5      n[        R                  " U5      [        R                  S-  :  d   eg )	Nr   r   r]   r   ro   zij,ij->ir   rC   )rd   r   absaranger   einsumr{   rc   
_simplicesarccosclipmaxrJ   )	rj   rY   r   rT   rc   rp   r   dotscircumradiis	            r   test_single_hemisphere_handling4TestSphericalVoronoi.test_single_hemisphere_handling   s     Q/vvfQTl+q!t))C.1$-fof=yyR[[6%9%'YYr}}QT/B%Cf%LNiib! 45vvk"RUUQY...r   rT   )r   rC   r   c                 0   [         R                  " U5      S-   U-  n[        XS-
  SS9n[         R                  " U[         R                  " US45      /5      n[
        R                  " [        SS9   [        XT-   US9  S S S 5        g ! , (       d  f       g = f)Nr   r   r]   zRank of input pointsr   ro   )	r   r   rd   hstackzerosr   r   rG   r   )rj   rT   rY   r   rp   rc   s         r   test_rank_deficient(TestSphericalVoronoi.test_rank_deficient   ss     ))C.1$-73FBHHaV$456]]:-CDV_V< EDDs   1B
Bc           	         Sn[        X!SS9n[        U5      nUR                  R                  S   U:X  d   e[	        UR
                  5      U:X  d   e/ n[        R                  " UR                  5      n[        SUS-   5       H  n/ n[        R                  " [        U5      U5       H$  n	UR                  US S 2[        U	5      4   5        M&     [        R                  " [        R                  " U5      SS9nUR                  [	        U5      5        M     SSUS-
  -  -   n
[!        [#        U5       VVs/ s H  u  p{SU-  U-  PM     snn5      nX:X  d   eg s  snnf )Nd   r   r]   r   r,   r   )rd   r   r{   r   lenrz   r   sortr   r.   r   combinationsappendr   uniquer%   sum	enumerate)rj   rY   rT   rc   r   cell_counts	simplicesr1   cellsindicesexpected_eulereactual_eulers                r   test_higher_dimensions+TestSphericalVoronoi.test_higher_dimensions   s4   Q/f%{{  #s***2::!### GGBMM*	q#'"AE$11%*a@Yq$w-'789 AIIbnnU3!<Es5z* # bCE]*Ik4JK4JDAR!GaK4JKL--- Ls   5E
c           	         [         R                  " [         R                  " U5      * [         R                  " U5      45      n[        U5      n[	        UR
                   Vs/ s H  n[        U5      SUS-
  -  :H  PM     sn5      (       d   e[         R                  " [        [        R                  " SS/US95      5      nUR                  [         R                  5      [         R                  " U5      -  n[        R                  " UR                   U5      n[#        U5      nXg   R%                  5       [&        :  d   eg s  snf )NrC   r   r   r   )r   r%   eyer   allrz   r   rK   r   r   r   astypefloat64sqrtr	   r   r{   r
   r   TOL)rj   rY   rc   r   r   r   distress           r   test_cross_polytope_regions0TestSphericalVoronoi.test_cross_polytope_regions  s     "&&+rvvc{ ;<f%BJJ?JqCFa#'l*J?@@@@ 99T)"3"3RGC"HIJ??2::.= ~~bkk84#D)y}}$$$ @s    D?c           	          [         R                  " [        [        R                  " SS/US95      5      nUR                  [         R                  5      [         R                  " U5      -  n[        U5      n[         R                  " [         R                  " U5      * [         R                  " U5      45      n[        R                  " UR                  U5      n[        U5      nXV   R                  5       [         :  d   eg )Nr   r   r   )r   rK   r   r   r   r   r   r   r   r%   r   r	   r   r{   r
   r   r   )rj   rY   rc   r   r   r   r   s          r   test_hypercube_regions+TestSphericalVoronoi.test_hypercube_regions  s     4	 1 12q'# FGHrzz*RWWS\9f% >>BFF3K<"=> ~~bkk84#D)y}}$$$r   r   i  r   rZ   )r   r   rC   single_hemispherec                 .   [        XSS9nU(       a$  [        R                  " US S 2S4   5      US S 2S4'   [        R                  " U5      S-   U-  nX6-  U-   n[	        XcUS9nUR                  5       n	[        U	R                  5       [        X#5      5        g )Nr   r]   r   rZ   rp   )	rd   r   r   r   r   calculate_areasr   r   r[   )
rj   rT   rY   rZ   r   r   rc   rp   r   areass
             r   test_area_reconstitution-TestSphericalVoronoi.test_area_reconstitution*  s      Q/ 66&A,/F1a4L))C.1$-6)fFC""$EIIK):3)GHr   poly)r4   r=   r>   r?   r@   rA   rB   c                     [        U5      nUR                  u  p4[        U5      nUR                  5       n[	        U[        US5      U-  5        g )Nr   )rW   r   r   r   r   r[   )rj   r   rc   rT   rY   r   r   s          r   test_equal_area_reconstitution3TestSphericalVoronoi.test_equal_area_reconstitution>  sH     $D)f%""$E#4S!#<q#@Ar   c                 &   Sn[         R                  " [         R                  " U5      * [         R                  " U5      45      n[        U5      n[        R
                  " [        SS9   UR                  5         S S S 5        g ! , (       d  f       g = f)Nr   zOnly supportedr   )r   r%   r   r   r   r   r   r   )rj   rY   rc   r   s       r   test_area_unsupported_dimension4TestSphericalVoronoi.test_area_unsupported_dimensionH  s]    "&&+rvvc{ ;<f%]]9,<=  >==s   (B
Br   r   rp   )Nrn   )r   g       @g      @c                 x   XR                   -  nUb  X2-  n[        X1US9nUR                   R                  [        R                  " [        R                  5      L d   eUR
                  R                  [        R                  " [        R                  5      L d   e[        UR                  [        5      (       d   eg )Nr   )	rc   r   dtyper   r   rp   
isinstancerZ   float)rj   rZ   rp   rc   r   s        r   test_attribute_types)TestSphericalVoronoi.test_attribute_typesO  s     ++%FfFCyy"((2::"6666yy"((2::"6666"))U++++r   c                    [        U R                  5      n[        UR                  S   S   5      nUR                   H  n[	        U[
        5      (       a  M   e   UR                  5         [	        UR                  S   S   U5      (       d   eUR                  5         [	        UR                  S   S   U5      (       d   eg )Nr   )r   rc   typerz   r  r   r   )rj   r   r   regions       r   test_region_types&TestSphericalVoronoi.test_region_types[  s     dkk*RZZ]1%&jjFfd++++ !
##%"**Q-*E2222
##%"**Q-*E2222r   )r   rc   N) __name__
__module____qualname____firstlineno__rk   rw   r~   r   r   r   r   r   r   r   r   r   r   r   markparametrizer.   r   r   r   r   r   r   r   r   r  r  __static_attributes__r   r   r   rf   rf   `   s   

#0:67C-*	'H.7> [[UE!QK0[[Wudm4	/ 5 1	/ [[S*-[[UE!QK0[[Wudm4= 5 1 .= [[UE!QK0. 1.( [[UE!QK0% 1%$ [[UE!QK0% 1%" [[S2s),[[UQF+[[X{3[[Wudm4[[05$-@I A 5 4 , -
I [[V &E FBFB! [[X2w/[[X'FG, H 0,3r   rf   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*   r2   rW   r[   rd   rf   r   r   r   <module>r     sh     6 6  * 4 0 )  HA:
,$E84E
F3 F3r   