ó
î&]\c           @   sò   d  d l  Z d  d l Z y d  d l m Z WnD e k
 rr d  d l Z d  d l Z d  d l Z d e d „ Z n Xd f  d „  ƒ  YZ	 d e
 f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d f  d „  ƒ  YZ d f  d „  ƒ  YZ d S(   iÿÿÿÿN(   t	   lru_cacheiÿ   c            s)   d t  f d „  ƒ  Y‰  ‡  ‡ ‡ f d †  S(   s   
        Thanks to ilialuk @ https://stackoverflow.com/users/2121105/ilialuk for
        this code snippet. Modifications by S. Endres
        t   LruCacheClassc           B   sA   e  Z d  „  Z d d „ Z d „  Z d „  Z e e _ d „  Z RS(   c         S   s(   | |  _  | |  _ | |  _ i  |  _ d  S(   N(   t   _input_funct	   _max_sizet   _timeoutt   _caches_dict(   t   selft
   input_funct   max_sizet   timeout(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   __init__   s    			c         S   s?   | |  j  k r; |  j  | =t j ƒ  t j ƒ  g |  j  | <n  d  S(   N(   R   t   collectionst   OrderedDictt   time(   R   t   caller(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   cache_clear    s    
	c         S   sC   t  j |  j | ƒ } t  j |  j | ƒ | _ t  j |  j ƒ | ƒ S(   s    Called for instance methods (   t	   functoolst   partialt   _cache_wrapperR   t   wrapsR   (   R   t   objt   objtypet   return_func(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   __get__'   s    c         _   s   |  j  d | | Ž S(   s    Called for regular functions N(   R   t   None(   R   t   argst   kwargs(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   __call__0   s    c            sY  d j  t ‡  f d †  t ˆ  ƒ ƒ ƒ } d j  t d „  | ƒ ƒ | } | |  j k rw t j ƒ  t j ƒ  g |  j | <nF |  j d  k	 r½ t j ƒ  |  j | d |  j k r½ |  j	 | ƒ q½ n  |  j | d } | | k râ | | St
 | ƒ |  j k ry | j t ƒ Wqt k
 rqXn  | d  k	 r;| f | } n  |  j | ˆ  Ž  | | <| | S(   Nt    c            s,   t  |  ƒ t  t ˆ  |  ƒ ƒ t  ˆ  |  ƒ S(   N(   t   strt   type(   t   x(   R   (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   <lambda>;   s    c         S   s   t  t |  ƒ ƒ t  |  ƒ S(   N(   R   R   (   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR    >   s    i   i    (   t   joint   mapt   sortedR   R   R   R   R   R   R   t   lenR   t   popitemt   Falset   KeyErrorR   (   R   R   R   R   t
   kwargs_keyt   keyt   cur_caller_cache_dict(    (   R   sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR   7   s0    		N(   t   __name__t
   __module__R
   R   R   R   R   R   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR      s   					c            s   t  j |  ƒ ˆ  |  ˆ ˆ ƒ ƒ S(   N(   R   R   (   R   (   R   t   maxsizeR	   (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR    a   s   (   t   object(   R-   R	   (    (   R   R-   R	   sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR       s    Nt   Complexc           B   sÝ   e  Z d e d d d d  „ Z d „  Z e e d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z e d
 „ Z d „  Z e d d ƒ d „  ƒ Z e d d ƒ d „  ƒ Z e d d ƒ d „  ƒ Z d „  Z RS(   c         C   sù   | |  _  | |  _ | |  _ d |  _ d |  _ g  |  _ t | | | | | ƒ |  _ |  j | d | ƒ| rv d |  _	 n
 |  j
 ƒ  |  j j g  ƒ |  j d j |  j ƒ |  j j ƒ  |  _ d |  _ |  j ƒ  g  |  _ |  j j d ƒ |  j j d ƒ d  S(   Ni    t   symmetryi   (   t   dimt   boundsR0   t   gent
   perm_cyclet   Ht   VertexCachet   Vt   n_cubet   generation_cyclet   add_centroidt   appendt   C0t   homology_group_rankt   hgrt   hgrdt	   graph_mapt   performance(   R   R1   t   funct	   func_argsR0   R2   t   g_const   g_args(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR
   f   s&    						
	
	c         C   s   |  j  S(   N(   R5   (   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR      s    c         C   sf  t  t j | d t ƒƒ } | |  _ t  t j | d t ƒƒ } | |  _ t | ƒ } t | ƒ } | g } | rÔ t d d d |  j	 ƒ |  _
 |  j
 j |  j | ƒ d }	 |  j |	 | | ƒ |  j
 j |  j | ƒ n_ t d d | | ƒ |  _
 |  j
 j |  j | ƒ |  j
 j |  j | ƒ g  }
 |  j |
 | | ƒ | rbd GHx! |  j
 ƒ  D] } | j ƒ  qKWn  d S(   sw   
        Generate the simplicial triangulation of the n dimensional hypercube
        containing 2**n vertices
        t   dtypei    s   Initial hyper cube:N(   t   listt   npt   zerost   intt   origint   onest   supremumt   tuplet   SimplexR1   R<   t
   add_vertexR7   t   perm_symmetryt   Cellt   permt	   print_out(   R   R1   R0   t   printoutRK   RM   t   origintuplet   supremumtuplet	   x_parentst   i_st	   i_parentst   v(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR8   “   s,    			c         C   s  t  | ƒ } g  t |  j ƒ D] } | | k r | ^ q } xÜ | D]Ô } t j | ƒ } | j | ƒ t j | ƒ }	 d |	 | <t  |	 ƒ }
 |  j j |  j |
 ƒ |  j |
 j |  j | ƒ x) | D]! } |  j |
 j |  j | ƒ qÁ Wt j | ƒ } | j | ƒ |  j	 | | |	 ƒ qA Wd  S(   Ni   (
   RN   t   rangeR1   t   copyR;   R<   RP   R7   t   connectRS   (   R   RZ   RX   t   xit   xi_tR   t
   iter_ranget   it
   i2_parentst   xi2t   xi2_tt   x_ipt
   x_parents2(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRS   ·   s    .
c   	      C   sß   t  | ƒ } t j | ƒ } d | | <t  | ƒ } |  j j |  j | ƒ |  j | j |  j | ƒ x) | D]! } |  j | j |  j | ƒ qj Wt j | ƒ } | j | ƒ | d 7} | |  j k rÈ d  S|  j | | | ƒ d  S(   Ni   (	   RN   R]   R<   RP   R7   R^   R;   R1   RQ   (	   R   RY   RX   R_   R`   Rd   Re   Rf   Rg   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRQ   Õ   s    

c         C   sÜ   t  t j |  j ƒ t j |  j ƒ d ƒ |  _ |  j j |  j t	 |  j ƒ ƒ |  j |  j _ |  j t	 |  j ƒ j
 |  j t	 |  j ƒ ƒ xA |  j ƒ  D]3 } |  j t	 |  j ƒ j |  j t	 | j ƒ ƒ q˜ Wt |  _ d S(   sn   Split the central edge between the origin and supremum of
        a cell and add the new vertex to the complexg       @N(   RG   RH   t   arrayRK   RM   t   centroidR<   RP   R7   RN   t
   disconnectR^   R   t   Truet   centroid_added(   R   R[   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR:   ï   s    , -1	c         C   s·   |  j  r@ t j d |  j d d |  j d g d t ƒ|  _ n, t j d |  j d |  j g d t ƒ|  _ xD |  j j ƒ  D]3 } x* | j D] } d |  j | j	 | j	 f <qŒ Wq| Wd  S(   Ni   i   RF   (
   Rl   RH   RI   R1   RJ   t	   structuret   HCR<   t   nnt   index(   R   R[   t   v2(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt	   incidence  s    	( !c         C   s?   g  |  j  ƒ  D]% } g  | j D] } | j ^ q ^ q |  _ d S(   s©    Make a list of size 2**n + 1 where an entry is a vertex
        incidence, each list element contains a list of indexes
        corresponding to that entries neighboursN(   R<   Ro   Rp   t   graph(   R   R[   Rq   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR@     s    c         C   s%  t  | j ƒ } t | ƒ  ƒ d } y |  j | Wn! t k
 rT |  j j g  ƒ n Xg  } xR t | ƒ  d  ƒ D]= \ } } t  | j ƒ } | j |  j | | | | j	 ƒ ƒ qo WxY t |  j
 ƒ D]H \ } }	 | | k rÜ Pn  x) |	 D]! }
 | ƒ  | j | ƒ  |
 ƒ qã WqÀ W| |  j k	 r!~ n  | S(   sS   Subgenerate a cell `C_i` of generation `gen` and
        homology group rank `hgr`.i   iÿÿÿÿ(   RN   Ri   R$   R5   t
   IndexErrorR;   t	   enumerateR   t   construct_hypercubet   hg_nRs   Rj   R<   (   R   t   C_iR3   t
   origin_newt   centroid_indext   H_newRb   R[   RM   t   connectionst   j(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   sub_generate_cell   s&      #c         C   sŒ   t  } yY xR |  j |  j D]@ } |  j rC |  j | |  j d ƒ q |  j | |  j d ƒ q WWn t k
 rx t } n X|  j d 7_ | S(   sV   
        Run sub_generate_cell for every cell in the current complex self.gen
        i   (   R&   R5   R3   R0   t   split_simplex_symmetryR~   Rt   Rk   (   R   t	   no_splitst   c(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   split_generationC  s    	
c         C   s§  t  | | | | ƒ } t t j | ƒ t j | ƒ d ƒ | _ g  } x… t |  j ƒ  d  ƒ D]m \ } }	 |  j | |	 j ƒ }
 |  j	 | |	 j ƒ } |
 | } t | ƒ } | j
 |  j | ƒ | j | ƒ q[ W| j
 |  j | j ƒ | j | j ƒ xQ t |  j ƒ D]@ \ } } x1 | D]) } |  j | | j |  j | | ƒ qWqW| rd GHd j | ƒ GHd j | ƒ GHx | ƒ  D] }	 |	 j ƒ  qxWn  |  j | j | ƒ | S(   så   
        Build a hypercube with triangulations symmetric to C0.

        Parameters
        ----------
        origin : vec
        supremum : vec (tuple)
        gen : generation
        hgr : parent homology group rank
        g       @iÿÿÿÿs   A sub hyper cube with:s
   origin: {}s   supremum: {}(   RR   RN   RH   Rh   Ri   Ru   R<   t   generate_sub_cell_t1R   t   generate_sub_cell_t2RP   R7   R;   Rs   R^   t   formatRT   R5   (   R   RK   RM   R3   R>   RU   t   C_newt   V_newRb   R[   t   t1t   t2t   vecR|   R}   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRv   V  s0    &#
+c         C   s  y |  j  | Wn! t k
 r2 |  j  j g  ƒ n X| ƒ  } | d j } | d j } |  j t t j | ƒ t j | ƒ d ƒ } |  j | j |  j | ƒ x& | D] } | j	 |  j | j ƒ q¦ Wt
 | | j |  j |  j ƒ } | j | d ƒ | j | ƒ x" | d d !D] } | j | ƒ qWt
 | | j | j |  j ƒ }	 |	 j | |	 j d ƒ x" | d d !D] } |	 j | ƒ qlWxM t | d d !ƒ D]8 \ }
 } |
 | j k rÂ|	 j | ƒ q—|	 j | ƒ q—W|	 j | d ƒ |  j  | j | ƒ |  j  | j |	 ƒ d S(   sI  
        Split a hypersimplex S into two sub simplices by building a hyperplane
        which connects to a new vertex on an edge (the longest edge in
        dim = {2, 3}) and every other vertex in the simplex that is not
        connected to the edge being split.

        This function utilizes the knowledge that the problem is specified
        with symmetric constraints

        The longest edge is tracked by an ordering of the
        vertices in every simplices, the edge between first and second
        vertex is the longest edge to be split in the next iteration.
        i    iÿÿÿÿg       @i   N(   R5   Rt   R;   R   R7   RN   RH   Rh   Rj   R^   RO   Rw   R9   R1   RP   Ru   (   R   t   SR3   t   st   firstxt   lastxR‡   R[   t   S_new_lt   S_new_ut   k(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR   Œ  s:    	- R-   c         C   s8   |  j  | | ƒ } |  j | | ƒ } | | } t | ƒ S(   s-  
        Use the origin and supremum vectors to find a new cell in that
        subspace direction

        NOTE: NOT CURRENTLY IN USE!

        Parameters
        ----------
        origin : tuple vector (hashable)
        supremum : tuple vector (hashable)

        Returns
        -------

        (   Rƒ   R„   RN   (   R   RK   RM   t   v_x_tRˆ   R‰   RŠ   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   generate_sub_cell_2Ì  s    
c         C   s$   t  j | ƒ } | | t  j | ƒ S(   N(   RH   Rh   (   R   RK   t   v_xt   v_o(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRƒ   â  s    c         C   s    t  j | ƒ } | t  j | ƒ S(   N(   RH   Rh   (   R   RM   R”   t   v_s(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR„   è  s    c      	   C   sJ  d d l  m } |  j d k rØ| j ƒ  x|  j D]ú} xñ| D]é} xà| ƒ  D]Õ} |  j d k r€ t j | j	 d t
 ƒ} ns t j | j	 d t
 ƒ} xX t t |  j ƒ ƒ D]A } | | |  j | d |  j | d |  j | d | | <q® W| j | d g | d g d ƒ g  } g  } xò | j D]ç }	 |  j d k rZt j |	 j	 d t
 ƒ}
 ns t j |	 j	 d t
 ƒ}
 xX t t |  j ƒ ƒ D]A } |
 | |  j | d |  j | d |  j | d |
 | <qˆW| j |
 d ƒ | j |
 d ƒ | j | d ƒ | j | d ƒ q*W| j | | ƒ qP Wq@ Wq3 W|  j d k ri| j d d g ƒ | j d d g ƒ nb | j |  j d d d	 |  j d d d	 g ƒ | j |  j d d d	 |  j d d d	 g ƒ | j ƒ  nn|  j d
 k rA| j ƒ  } | j d d d ƒ} x)|  j D]} x| D]} x| ƒ  D]ù } g  } g  } g  } | j | j	 d ƒ | j | j	 d ƒ | j | j	 d ƒ x‰ | j D]~ }	 | j |	 j	 d ƒ | j |	 j	 d ƒ | j |	 j	 d ƒ | j | j	 d ƒ | j | j	 d ƒ | j | j	 d ƒ qW| j | | | d d ƒq/WqWqW| j ƒ  n d GHd S(   s«   
             Here C is the LIST of simplexes S in the
             2 or 3 dimensional complex

             To plot a single simplex S in a set C, use ex. [C[0]]
        iÿÿÿÿ(   t   pyploti   RF   i   i    t   og{®Gáz„¿g{®Gáz„?i   io   t
   projectiont   3dt   labelt   simplexs/   dimension higher than 3 or wrong complex formatNg)\Âõ(ð?g)\Âõ(ð?(   t
   matplotlibR—   R1   t   figureR5   R2   R   RH   Rh   R   t   floatR\   R$   t   plotRo   R;   t   ylimt   xlimt   showt   add_subplot(   R   R—   t   CR   R[   t   x_aRb   t   xlinest   ylinest   vnt   xn_at   figt   axR   t   yt   z(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   plot_complexî  sx    
!++%(    N(    (   R+   R,   R&   R   R
   R   R8   RS   RQ   R:   Rr   R@   R~   R‚   Rv   R   R    R“   Rƒ   R„   R¯   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR/   e   s"   	)	$						#	5	@t   VertexGroupc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s1   | |  _  | |  _ d  |  _ d  |  _ g  |  _ d  S(   N(   t   p_gent   p_hgrR   Rw   t   hg_dR¥   (   R   R±   R²   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR
   H  s
    				c         C   s   |  j  S(   N(   R¥   (   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR   S  s    c         C   s&   | |  j  k r" |  j  j | ƒ n  d  S(   N(   R¥   R;   (   R   R7   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRP   V  s    c         C   s5   |  j  d k r. t d „  |  j Dƒ ƒ |  _  n  |  j  S(   sF   
        Returns the homology group order of the current cell
        c         s   s!   |  ] } | j  ƒ  r d  Vq d S(   i   N(   t	   minimiser(   t   .0R[   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pys	   <genexpr>_  s    N(   Rw   R   t   sumR¥   (   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR=   Z  s    c         C   s,   |  j  d k r% |  j |  j |  _ n  |  j S(   su   
        Returns the difference between the current homology group of the
        cell and it's parent group
        N(   R³   R   Rw   R²   t   hgd(   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   homology_group_differentialc  s    c         C   s   d S(   s–   
        Returns the number of stationary points theoretically contained in the
        cell based information currently known about the cell
        N(    (   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   polytopial_sperner_lemmam  s    c         C   s"   x |  ƒ  D] } | j  ƒ  q
 Wd S(   s3   
        Print the current cell to console
        N(   RT   (   R   R[   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRT   t  s    (	   R+   R,   R
   R   RP   R=   R¸   R¹   RT   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR°   G  s   						
	RR   c           B   s   e  Z d  Z d „  Z RS(   sR   
    Contains a cell that is symmetric to the initial hypercube triangulation
    c         C   s8   t  t |  ƒ j | | ƒ | |  _ | |  _ d  |  _ d  S(   N(   t   superRR   R
   RK   RM   R   Ri   (   R   R±   R²   RK   RM   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR
     s    		(   R+   R,   t   __doc__R
   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRR   |  s   RO   c           B   s   e  Z d  Z d „  Z RS(   sq   
    Contains a simplex that is symmetric to the initial symmetry constrained
    hypersimplex triangulation
    c         C   s2   t  t |  ƒ j | | ƒ | d | d |  _ d  S(   Ni   (   Rº   RO   R
   R9   (   R   R±   R²   R9   R1   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR
     s    (   R+   R,   R»   R
   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRO   Š  s   t   Vertexc           B   sS   e  Z d d d d d d d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(	   c	         C   sj  | |  _  t | ƒ |  _ t j | d t ƒ}	 | d  k	 ry x= t | ƒ D], \ }
 \ } } |	 |
 | | | |	 |
 <qF Wn  |	 |  _ | d  k	 rt	 |  _
 | d  k	 r÷ xQ t | | ƒ D]= \ } } | |  j | Œ d k  r³ t j |  _ t |  _
 Pq³ q³ Wn  |  j
 r| |	 | Œ |  _ qn  | d  k	 r0| |  _ n t ƒ  |  _ d  |  _ t	 |  _ | d  k	 rf| |  _ n  d  S(   NRF   g        (   R   R¶   t   orderRH   Rh   RŸ   R   Ru   R¦   Rk   t   feasiblet   zipt   inft   fR&   Ro   t   sett   fvalt	   check_minRp   (   R   R   R2   RB   RC   RD   t   g_cons_argsRo   Rp   R¦   Rb   t   lbt   ubt   gR   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR
   —  s0    	!						c         C   s   t  |  j ƒ S(   N(   t   hashR   (   R   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   __hash__¼  s    c         C   su   | |  k	 rq | |  j  k rq |  j  j | ƒ | j  j |  ƒ |  j ƒ  r\ t | _ t | _ n  t |  _ t | _ n  d  S(   N(   Ro   t   addR´   R&   t   _minRÄ   Rk   (   R   R[   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR^   ¿  s    		c         C   sH   | |  j  k rD |  j  j | ƒ | j  j |  ƒ t |  _ t | _ n  d  S(   N(   Ro   t   removeRk   RÄ   (   R   R[   (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRj   Ì  s
    	c            s>   ˆ  j  r7 t ‡  f d †  ˆ  j Dƒ ƒ ˆ  _ t ˆ  _  n  ˆ  j S(   sB   Check whether this vertex is strictly less than all its neighboursc         3   s!   |  ] } ˆ  j  | j  k  Vq d  S(   N(   RÁ   (   Rµ   R[   (   R   (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pys	   <genexpr>Ö  s    (   RÄ   t   allRo   RÌ   R&   (   R   (    (   R   sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR´   Ó  s    	"c         C   s[   d j  |  j ƒ GHd } x' |  j D] } | d j  | j ƒ 7} q! W| GHd j  |  j ƒ GHd  S(   Ns
   Vertex: {}s   Connections: s   {} s
   Order = {}(   R…   R   Ro   R½   (   R   t   constrt   vc(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyRT   Û  s    N(    (    (	   R+   R,   R   R
   RÊ   R^   Rj   R´   RT   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR¼   –  s   $				R6   c           B   s,   e  Z d d d d e d  „ Z e d „ Z RS(   c         C   s^   i  |  _  | |  _ | |  _ | |  _ | |  _ | |  _ d |  _ d |  _ | rZ d |  _ n  d  S(   Ni    iÿÿÿÿ(	   t   cacheRB   RD   RÅ   RC   R2   t   nfevt   sizeRp   (   R   RB   RC   R2   RD   RÅ   t   indexed(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR
   æ  s    								c         C   sJ  y |  j  | SWn4t k
 rE| ry |  j d 7_ t | d |  j d |  j d |  j d |  j d |  j d |  j ƒ} n9 t | d |  j d |  j d |  j d |  j d |  j ƒ} | |  j  | <|  j d  k	 r:|  j d  k	 r| j
 r|  j d 7_ |  j d 7_ q7|  j d 7_ q:|  j d 7_ |  j d 7_ n  |  j  | SXd  S(   Ni   R2   RB   RC   RD   RÅ   Rp   (   RÑ   R'   Rp   R¼   R2   RB   RC   RD   RÅ   R   R¾   RÒ   RÓ   (   R   R   RÔ   t   xval(    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   __getitem__õ  s0    				(    N(    (   R+   R,   R   Rk   R
   RÖ   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyR6   å  s   	(   t   numpyRH   R]   R   R    t   ImportErrorR   R   R   R/   R.   R°   RR   RO   R¼   R6   (    (    (    sE   lib/python2.7/site-packages/scipy/optimize/_shgo_lib/triangulation.pyt   <module>   s   Xÿ ã5O