ó
n™xTc           @   s#  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z d  d l m Z d  d l Z d  d l Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z e d k re e j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   flex(   t   iso_surface(   t   approx_equal(   t   format_cpu_times(   t   sin(   t   matrixNt   triangulation_test_casec           B   s&   e  Z d  „  Z d d „ Z d „  Z RS(   c         C   s+  | |  _  | \ } } } |  _ | |  _ | rO d | d | d | f |  _ n* d | d d | d d | d f |  _ |  j \ }	 }
 } t j t j | ƒ ƒ } t j d | ƒ } xT | j ƒ  s| ƒ  } | | d |	 | d |
 | d | f ƒ | | <| j	 ƒ  q¸ W| |  _
 | |  _ | |  _ d S(   s2    Construct a map of func with the given grid_size i   t   endi    i   N(   t   funct	   grid_sizet   periodict	   grid_cellR   t   doublet   gridt   nested_loopt   overt   incrt   mapt   lazy_normalst   descending_normals(   t   selfR	   R
   R   R   R   t   nxt   nyt   nzt   hxt   hyt   hzR   t   loopt   p(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyt   __init__   s     		!*	1		i    c   "      C   sâ  |  j  } | r! d | j j GHn  t j ƒ  } t j |  j | d d d | d | d |  j d |  j d |  j	 ƒ} | |  _ t j ƒ  } | r› d	 | | GHn  | j
 j ƒ  d
 k s¶ t ‚ g  | j
 D]. }	 | j |	 k oã | j k n sÀ |	 ^ qÀ }
 |
 st ‚ t j ƒ  } x8 | j
 D]- }	 | |	 ƒ } | j t | | | ƒ ƒ qW| d k j t ƒ d
 k sit ‚ g  } x¦ | j D]› \ } } } | | k r¬| | k r¬| | k s²t ‚ x_ | | f | | f | | f f D]< \ } } | j
 | | j
 | k rÔ| j | | f ƒ qÔqÔWqyW| r8| r8d | GH| GHq8n  | |  _ i  } i  } x¯ | j D]¤ \ } } } | j i d | 6d | 6d | 6ƒ xp | | f | | f | | f f D]M \ } } | | k  rÑ| | f } n | | f } | j | d
 ƒ d | | <qªWqWWt | ƒ t | j
 ƒ k s t ‚ g  t t | j
 ƒ ƒ D] } | | k r6| ^ q6} | sgt | ƒ ‚ t t j |  j ƒ ƒ } g  } x× | j ƒ  D]É \ } } | j
 | d
 | j
 | d } } t t j | ƒ t j | ƒ ƒ } | | k s
t | | d d ƒs
t ‚ | d k st ‚ |  j  | | ƒ s’| d k r[| j | d
 | d f ƒ q[q’q’W| slt ‚ t | j! ƒ t | j
 ƒ k s�t ‚ xKt" t t | j
 ƒ ƒ | j
 | j! ƒ D]"\ } }	 } t j |	 ƒ t j | ƒ }	 } t | ƒ } | d
 k r(xÙ | D] } | | k rPqqWd ‚ q¸t t | ƒ d ƒ d k  sJt ‚ |	 d | }  |	 d | }! | j# r¦| |  ƒ | k o’| |! ƒ k n sÚt | ƒ ‚ q¸| |  ƒ | k  oÉ| |! ƒ k  n s¸t | ƒ ‚ q¸Wd S(   s>    Test triangulation of the iso-surface at the given iso-level s
   Testing %st
   map_extenti   t	   from_heret   to_thereR   R   t   ascending_normal_directions&   iso-surface triangulation per se: %f si    gìQ¸…ë±?s*   Degenerate edges for the isosurface of %s:t   epsgü©ñÒMbP?i   s;   zero normal not on a vertex at the end of a degenerate edgegê-�™—q=gš™™™™™©?N(   i   i   i   (   i   i   ($   R	   t	   __class__t   __name__t   timeR   t   triangulationR   R   R   R   t   verticest   sizet   AssertionErrorR    R!   R   R   t   appendt   abst   countt   Truet	   trianglest   degenerate_edgest   updatet
   setdefaultt   lent   xrangeR   t   colR   t	   iteritemsR   t   is_near_boundaryt   normalst   zipR"   ("   R   t	   iso_levelR    R!   t   verboset   ft   t0t   st   t1t   vt   outsidet   deltast   valt   degeneratest   v1t   v2t   v3t   at   bt   edgesR(   t   et   it   missingt   dt   bad_edge_multiplicitiesR   t   v0t   d1t   nt   abs_nt   edget   outwardt   inward(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyt   run%   s’    				.!*. 		". "!4#"'%$7 	"	7c         C   s¦   t  j |  j ƒ } |  j j \ } } x{ t | | | | | ƒ D]a \ } } } }	 }
 | | k rd q= n  |
 d 7}
 t | | ƒ |
 k  sš t | |	 ƒ |
 k  r= t Sq= Wt S(   NgVçž¯Ò<(	   R   R5   R   R'   t   boundsR9   R,   R.   t   False(   R   RE   RF   t   deltat   lowert   highert   c1t   c2t   lt   hR#   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyR7   ƒ   s    . 
, (   R%   t
   __module__R   RW   R7   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyR      s   	]t   ellipticc           B   s   e  Z d  „  Z RS(   c         C   s/   | \ } } } | | d | | d | | S(   Ni   i   (    (   R   R   t   xt   yt   z(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyt   __call__�   s    (   R%   Ra   Rf   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRb   �   s   t
   hyperbolicc           B   s   e  Z d  „  Z RS(   c         C   s'   | \ } } } | | | | | | S(   N(    (   R   R   Rc   Rd   Re   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRf   •   s    (   R%   Ra   Rf   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRg   “   s   t
   sinusoidalc           B   s   e  Z d  „  Z RS(   c         C   s-   | \ } } } t  | | | | | | ƒ S(   N(   R   (   R   R   Rc   Rd   Re   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRf   ›   s    (   R%   Ra   Rf   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRh   ™   s   R   c           B   s   e  Z d  „  Z RS(   c         C   su   | \ } } } | d ;} | d ;} | d ;} d | d d | d d | d d | d d | d d | d S(   Ni   i   i   i   gUUUUUU@(    (   R   R   Rc   Rd   Re   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRf   ¡   s
    


(   R%   Ra   Rf   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyR   Ÿ   s   c      	   C   sA  d |  k } d } t  t ƒ  | d t d t d t ƒ} | j d d	 d
 d d d d | ƒ t  t ƒ  | d t d t d t ƒ} | j d d d
 d  d d  d | ƒ | j d g k s¶ t ‚ | j d d d
 d  d d! d | ƒ | j g  k sí t ‚ | j d d d
 d" d d# d | ƒ | j g  k s$t ‚ t  t ƒ  | d t d t d t ƒ} | j d d d
 d  d d  d | ƒ | j g  k st ‚ t  t	 ƒ  | d t d t d t ƒ} | j d d d
 d  d d  d | ƒ | j g  k sÚt ‚ t  t
 ƒ  | d t d t d t ƒ} | j d d d
 d  d d  d | ƒ | j g  k s5t ‚ t ƒ  GHd  S($   Ns	   --verbosei2   i(   i   R   R   R   R:   g¢E¶óýÔÈ?R    g      à¿R!   g      ø?R;   i   i�  i`  gÍÌÌÌÌÌô?g333333Ó?gš™™™™™É?gš™™™™™Ù?gffffffæ?gš™™™™™é?g333333ã?gffffffö?g333333Ó¿gš™™™™™ù?(   i2   i(   i   (   g      à¿g      à¿g      à¿(   g      ø?g      ø?g      ø?(   i�  i`  (   g333333Ó?gš™™™™™É?gš™™™™™Ù?(   gffffffæ?gš™™™™™é?g333333ã?(   g333333Ó¿gš™™™™™É?gš™™™™™Ù?(   gffffffæ?gš™™™™™é?gš™™™™™ù?(   R   R   R.   RY   RW   Rb   t   NoneR0   R*   Rg   Rh   R   (   t   argsR;   R
   t   test(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyRW   ©   sJ    		"	"	"	"t   __main__i   (   t
   __future__R    t   scitbx.array_familyR   t   scitbxR   t   libtbx.test_utilsR   t   libtbx.utilsR   t   mathR   R   t   sysR&   t   objectR   Rb   Rg   Rh   R   RW   R%   t   argv(    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/iso_surface/tst_iso_surface.pyt   <module>   s    �
	1