
    -i6                         S SK r S SKJrJr  S SKrS SKJr   " S S\5      r " S S\5      r	 " S S	\5      r
 " S
 S5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S5      rg)    N)ABCabstractmethod)
MapWrapperc                   T    \ rS rSrSrSS jrS rS r\S 5       r	\S 5       r
S	 rS
rg)
VertexBase	   z
Base class for a vertex.
Nc                     Xl         [        U R                   5      U l        Ub  [        U5      U l        O[        5       U l        X0l        g)z
Initiation of a vertex object.

Parameters
----------
x : tuple or vector
    The geometric location (domain).
nn : list, optional
    Nearest neighbour list.
index : int, optional
    Index of vertex.
N)xhashsetnnindex)selfr
   r   r   s       S/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/_shgo_lib/_vertex.py__init__VertexBase.__init__   s6     L	>"gDGeDG
    c                     U R                   $ N)r   r   s    r   __hash__VertexBase.__hash__$   s    yyr   c                     US;  a  [        [        U 5       SU S35      eUS:X  a1  [        R                  " U R                  5      U l        U R
                  $ g )N)x_az object has no attribute ''r   )AttributeErrortypenparrayr
   r   )r   items     r   __getattr__VertexBase.__getattr__'   sY    w DJ< 0%%)F!"- . .5=xx'DH88O r   c                     [        S5      eNzKThis method is only implemented with an associated child of the base class.NotImplementedErrorr   vs     r   connectVertexBase.connect/       ! #H I 	Ir   c                     [        S5      er$   r%   r'   s     r   
disconnectVertexBase.disconnect4   r+   r   c                 r    U R                   U l        U R                  R                  U 5        U R                  $ )zReturns the star domain ``st(v)`` of the vertex.

Parameters
----------
v :
    The vertex ``v`` in ``st(v)``

Returns
-------
st : set
    A set containing all the vertices in ``st(v)``
)r   staddr   s    r   starVertexBase.star9   s(     ''Dwwr   )r   r   r   r0   r
   r   NN)__name__
__module____qualname____firstlineno____doc__r   r   r!   r   r)   r-   r2   __static_attributes__ r   r   r   r   	   sG    . I I I Ir   r   c                   L   ^  \ rS rSrSr  S	U 4S jjrS rS rS rS r	Sr
U =r$ )
VertexScalarFieldK   zu
Add homology properties of a scalar field f: R^n --> R associated with
the geometry built from the VertexBase class
c                 >   > [         TU ]  XUS9  SU l        SU l        g)a  
Parameters
----------
x : tuple,
    vector of vertex coordinates
field : callable, optional
    a scalar field f: R^n --> R associated with the geometry
nn : list, optional
    list of nearest neighbours
index : int, optional
    index of the vertex
field_args : tuple, optional
    additional arguments to be passed to field
g_cons : callable, optional
    constraints on the vertex
g_cons_args : tuple, optional
    additional arguments to be passed to g_cons

r   r   TN)superr   	check_min	check_max)	r   r
   fieldr   r   
field_argsg_consg_cons_args	__class__s	           r   r   VertexScalarField.__init__Q   s'    * 	/ r   c                     XLac  XR                   ;  aS  U R                   R                  U5        UR                   R                  U 5        SU l        SU l        SUl        SUl        ggg)zlConnects self to another vertex object v.

Parameters
----------
v : VertexBase or VertexScalarField object
TN)r   r1   rB   rC   r'   s     r   r)   VertexScalarField.connectt   sU     =Qgg-GGKKNDDHHTN "DN!DNAKAK .=r   c                     XR                   ;   aS  U R                   R                  U5        UR                   R                  U 5        SU l        SU l        SUl        SUl        g g )NT)r   removerB   rC   r'   s     r   r-   VertexScalarField.disconnect   sN    <GGNN1DDKK "DN!DNAKAK r   c                    ^  T R                   (       a+  [        U 4S jT R                   5       5      T l        ST l         T R                  $ )zBCheck whether this vertex is strictly less than all its
neighboursc              3   V   >#    U  H  nTR                   UR                   :  v   M      g 7fr   f.0r(   r   s     r   	<genexpr>.VertexScalarField.minimiser.<locals>.<genexpr>        :'QDFFQSSL'   &)F)rB   allr   _minr   s   `r   	minimiserVertexScalarField.minimiser   s3     >>:$''::DI"DNyyr   c                    ^  T R                   (       a+  [        U 4S jT R                   5       5      T l        ST l         T R                  $ )zH
Check whether this vertex is strictly greater than all its
neighbours.
c              3   V   >#    U  H  nTR                   UR                   :  v   M      g 7fr   rQ   rS   s     r   rU   .VertexScalarField.maximiser.<locals>.<genexpr>   rW   rX   F)rC   rY   r   _maxr   s   `r   	maximiserVertexScalarField.maximiser   s3    
 >>:$''::DI"DNyyr   )r`   rZ   rC   rB   )NNNr;   Nr;   )r5   r6   r7   r8   r9   r   r)   r-   r[   ra   r:   __classcell__rH   s   @r   r=   r=   K   s1    
 GI*,!F"		 	r   r=   c                   6   ^  \ rS rSrSr   SU 4S jjrSrU =r$ )VertexVectorField   zx
Add homology properties of a scalar field f: R^n --> R^m associated with
the geometry built from the VertexBase class.
r;   c
                 6   > [         T
U ]  XU	S9  [        S5      e)Nr@   z&This class is still a work in progress)rA   r   r&   )r   r
   sfieldvfieldrE   vfield_argsrF   rG   r   r   rH   s             r   r   VertexVectorField.__init__   s#     	/!"JKKr   )NNr;   r;   Nr;   NN)r5   r6   r7   r8   r9   r   r:   rc   rd   s   @r   rf   rf      s!    
 @B(,04L Lr   rf   c                   0    \ rS rSrSrS rS rS rS rSr	g)	VertexCacheBase   z7Base class for a vertex cache for a simplicial complex.c                 T    [         R                  " 5       U l        SU l        SU l        g )Nr   )collectionsOrderedDictcachenfevr   r   s    r   r   VertexCacheBase.__init__   s      ,,.
	
r   c              #   T   #    U R                    H  nU R                   U   v   M     g 7fr   )rt   r'   s     r   __iter__VertexCacheBase.__iter__   s$     A**Q- s   &(c                      U R                   S-   $ )z%Returns the size of the vertex cache.   r   r   s    r   sizeVertexCacheBase.size   s    zzA~r   c                 $   [        S[        U R                  5       S35      n[        SU-  5        [        S[        U R                  5       S35        [        SU-  5        U R                   H   nU R                  U   R                  5         M"     g )NzVertex cache of size: :=)lenrt   print	print_out)r   headlenr(   s      r   r   VertexCacheBase.print_out   st    .s4::.?qABcGm&s4::&7q9:cGmAJJqM##% r   )rt   r   ru   N)
r5   r6   r7   r8   r9   r   rx   r}   r   r:   r;   r   r   rn   rn      s    A
&r   rn   c                   <   ^  \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )
VertexCube   zVertex class to be used for a pure simplicial complex with no associated
differential geometry (single level domain that exists in R^n)c                 "   > [         TU ]  XUS9  g )Nr@   )rA   r   )r   r
   r   r   rH   s       r   r   VertexCube.__init__   s    /r   c                     XLaG  XR                   ;  a7  U R                   R                  U5        UR                   R                  U 5        g g g r   )r   r1   r'   s     r   r)   VertexCube.connect   s5    =Qgg-GGKKNDDHHTN .=r   c                     XR                   ;   a7  U R                   R                  U5        UR                   R                  U 5        g g r   )r   rM   r'   s     r   r-   VertexCube.disconnect   s0    <GGNN1DDKK r   r;   r4   )
r5   r6   r7   r8   r9   r   r)   r-   r:   rc   rd   s   @r   r   r      s    F0
 r   r   c                   2   ^  \ rS rSrU 4S jrSS jrSrU =r$ )VertexCacheIndex   c                 8   > [         TU ]  5         [        U l        g)z
Class for a vertex cache for a simplicial complex without an associated
field. Useful only for building and visualising a domain complex.

Parameters
----------
N)rA   r   r   Vertex)r   rH   s    r   r   VertexCacheIndex.__init__   s     	 r   c                      U R                   U   $ ! [         aN    U =R                  S-  sl        U R                  XR                  S9nX0R                   U'   U R                   U   s $ f = f)Nr{   r|   )rt   KeyErrorr   r   r   r
   r   xvals       r   __getitem__VertexCacheIndex.__getitem__   s`    		!::a=  	!JJ!OJ;;q

;3D !JJqM::a= 	!s    AA)(A))r   r   )r5   r6   r7   r8   r   r   r:   rc   rd   s   @r   r   r      s    	!
! 
!r   r   c                   |   ^  \ rS rSr  SU 4S jjrSS j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U =r$ )VertexCacheField   c                   > [         TU ]  5         SU l        [        U l        Xl        X l        [        X5      U l        X0l	        X@l
        [        X45      U l        [        5       U l        [        5       U l        SU l        XPl        [%        U5      U l        US:X  a8  U R(                  U l        Uc  U R,                  U l        gU R0                  U l        gU R2                  U l        Uc  U R4                  U l        gU R6                  U l        g)aw  
Class for a vertex cache for a simplicial complex with an associated
field.

Parameters
----------
field : callable
    Scalar or vector field callable.
field_args : tuple, optional
    Any additional fixed parameters needed to completely specify the
    field function
g_cons : dict or sequence of dict, optional
    Constraints definition.
    Function(s) ``R**n`` in the form::
g_cons_args : tuple, optional
    Any additional fixed parameters needed to completely specify the
    constraint functions
workers : int  optional
    Uses `multiprocessing.Pool <multiprocessing>`) to compute the field
     functions in parallel.

rq   Fr{   N)rA   r   r   r=   r   rD   rE   FieldWrapperwfieldrF   rG   ConstraintWrapperwgconsr   gpoolfpoolsfc_lockworkersr   _mapwrapper
proc_gpoolprocess_gpoolproc_fpool_nogprocess_fpoolproc_fpool_gpproc_gpoolpproc_fpool_nogpproc_fpool_g)r   rD   rE   rF   rG   r   rH   s         r   r   VertexCacheField.__init__   s    0 	
'
$"55&'<U
 U
%g.a<!%D~%)%8%8"%)%6%6"!%!1!1D~%)%9%9"%)%7%7"r   c                     U R                   U   $ ! [         a    U =R                  S-  sl        U R                  XR                  X R                  U R
                  U R                  U R                  S9nX0R                   U'   U R                  R                  U5        U R                  R                  U5        U R                   U   s $ f = f)Nr{   )rD   r   r   rE   rF   rG   )rt   r   r   r   rD   rE   rF   rG   r   r1   r   r   s       r   r   VertexCacheField.__getitem__0  s    	!::a=  
	!JJ!OJ;;q

r*.//&*kk+/+;+;  =D
 !JJqMJJNN4 JJNN4 ::a= 
	!s    B7C
Cc                 @    U R                   R                  5       nUS	 U$ )Npool)__dict__copy)r   	self_dicts     r   __getstate__VertexCacheField.__getstate__?  s"    MM&&(	fr   c                 ~    U R                   b  U R                  5         U R                  5         U R                  5         g r   )rF   r   r   proc_minimisersr   s    r   process_poolsVertexCacheField.process_poolsD  s0    ;;" r   c                     SUl         [        U R                  U R                  5       HR  u  p#[        R
                  " U" UR                  /UQ76 S:  5      (       d  M6  [        R                  Ul        SUl           g    g NTg        F)	feasibleziprF   rG   r   anyr   infrR   )r   r(   gargss       r   feasibility_check"VertexCacheField.feasibility_checkJ  s[    
4;;(8(89GAvvaoo+,,ff"
 :r   c                 H    U R                   " UR                  /U R                  Q76 Ul        U =R                  S-  sl        [        R                  " UR                  5      (       a  [        R                  Ul        gg! [
         a    [        R                  Ul         N]f = f)zzCompute the scalar field values of a vertex object `v`.

Parameters
----------
v : VertexBase or VertexScalarField object
r{   N)	rD   r   rE   rR   ru   r   r   r   isnanr'   s     r   compute_sfieldVertexCacheField.compute_sfieldS  sp    	**QUU5T__5ACIINI 88ACC==&&AC   	&&AC	s   AA? ?B! B!c                     U R                   b$  U R                   H  nU R                  U5        M     [        5       U l        g)zProcess all constraints.N)rF   r   r   r   r'   s     r   r   VertexCacheField.proc_gpoolc  s3    ;;"ZZ&&q)   U
r   c                     / nU R                    H  nUR                  UR                  5        M      U R                  U R                  R
                  U5      n[        U R                   U5       H  u  p$XBl        M     g)z$Process all constraints in parallel.N)r   appendr   r   r   gconsr   r   )r   gpool_lr(   Gr   s        r   r   VertexCacheField.pproc_gpoolk  s_    ANN155!  T[[..8

A&DAJ 'r   c                     U R                    H'  nUR                  (       d  M  U R                  U5        M)     [        5       U l         g)z6Process all field functions with constraints supplied.N)r   r   r   r   r'   s     r   r   VertexCacheField.proc_fpool_gu  s2    Azzz##A&  U
r   c                 j    U R                    H  nU R                  U5        M     [        5       U l         g)z9Process all field functions with no constraints supplied.N)r   r   r   r'   s     r   r   VertexCacheField.proc_fpool_nog}  s)    A"  U
r   c                    U R                   R                    / nU R                   HF  nUR                  (       a  UR	                  UR
                  5        M1  [        R                  Ul        MH     U R                  U R                   R                  U5      n[        X5       H.  u  pE[        U5      nXPU   l        U =R                  S-  sl        M0     [        5       U l        g)zD
Process all field functions with constraints supplied in parallel.
r{   N)r   funcr   r   r   r   r   r   rR   r   r   tupleru   r   r   fpool_lr(   FvarR   vts          r   r   VertexCacheField.pproc_fpool_g  s     	Azzquu%ff	 
 T[[--w7_EBrBHJIINI %
 U
r   c                 t   U R                   R                    / nU R                   H  nUR                  UR                  5        M      U R                  U R                   R                  U5      n[        X5       H.  u  pE[        U5      nXPU   l        U =R                  S-  sl	        M0     [        5       U l        g)zG
Process all field functions with no constraints supplied in parallel.
r{   N)r   r   r   r   r   r   r   r   rR   ru   r   r   s          r   r    VertexCacheField.pproc_fpool_nog  s     	ANN155! T[[--w7_EBrBHJIINI %
 U
r   c                 V    U  H#  nUR                  5         UR                  5         M%     g)zCheck for minimisers.N)r[   ra   r'   s     r   r    VertexCacheField.proc_minimisers  s    AKKMKKM r   )r   r   rD   rE   r   rF   rG   r   r   r   r   r   r   r   r   )Nr;   Nr;   r{   r   )r5   r6   r7   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   rc   rd   s   @r   r   r      sP    KM68p!
 &  r   r   c                   $    \ rS rSrSrS rS rSrg)r   i  z=Object to wrap constraints to pass to `multiprocessing.Pool`.c                     Xl         X l        g r   rF   rG   )r   rF   rG   s      r   r   ConstraintWrapper.__init__  s    &r   c                     Sn[        U R                  U R                  5       H/  u  p4[        R                  " U" U/UQ76 S:  5      (       d  M,  Sn  U$    U$ r   )r   rF   rG   r   r   )r   v_x_a	vfeasibler   r   s        r   r   ConstraintWrapper.gcons  sV    	4;;(8(89GAvvaoo+,,!	 :
 r   r   N)r5   r6   r7   r8   r9   r   r   r:   r;   r   r   r   r     s    G'r   r   c                   $    \ rS rSrSrS rS rSrg)r   i  z7Object to wrap field to pass to `multiprocessing.Pool`.c                     Xl         X l        g r   rD   rE   )r   rD   rE   s      r   r   FieldWrapper.__init__  s    
$r   c                      U R                   " U/U R                  Q76 n[        R
                  " U5      (       a  [        R                  nU$ ! [         a    [        R                  n NIf = fr   )rD   rE   	Exceptionr   r   r   )r   r   v_fs      r   r   FieldWrapper.func  sU    	**U5T__5C 88C==&&C
  	&&C	s   A A)(A)r   N)r5   r6   r7   r8   r9   r   r   r:   r;   r   r   r   r     s    A%r   r   )rr   abcr   r   numpyr   scipy._lib._utilr   r   r=   rf   rn   r   r   r   r   r   r;   r   r   <module>r      s     #  '? ?DW
 WtL
 L& &4 "! !2t tn   r   