ó
’™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 Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d l Z d	 Z d
 Z d „  Z d „  Z e e d „ Z d „  Z d Z d Z d Z e d k rõ e e j d ƒ d GHn  d S(   iÿÿÿÿ(   t   division(   t   cif(   t
   validation(   t   smart_load_dictionaryN(   t   Exception_expected(   t   URLError(   t   StringIOs#   ftp://ftp.iucr.org/pub/cif_core.dics!   ftp://ftp.iucr.org/pub/cif_mm.dicc         C   sˆ   d d  l  } | j ƒ  d  k r. | j d ƒ n  d |  k } d |  k } y t d | d | ƒ Wn t k
 ru d GHn Xt ƒ  t ƒ  d  S(   Niÿÿÿÿi   s   --show_timingss   --exercise_urlt   show_timingst   exercise_urlsB   Skipping tst_validation.exercise_smart_load() because of URLError.(   t   sockett   getdefaulttimeoutt   Nonet   setdefaulttimeoutt   exercise_smart_loadR   t   exercise_dictionary_mergingt   exercise_validation(   t   argsR	   R   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyt   exercise   s    	c       
   C   sr  t  j d d ƒ }  t |  j ƒ  t  j ƒ s0 t ‚ |  j ƒ  |  k sH t ‚ t |  j ƒ  t  j ƒ sf t ‚ |  j ƒ  |  k s~ t ‚ t j d t	 ƒ j
 ƒ  } t ƒ  } | j |  d | ƒt |  j j j ƒ  ƒ d d d d d	 d
 d d d g	 k sñ t ‚ t |  j j j ƒ  ƒ d d d g k st ‚ t j d t ƒ j
 ƒ  } |  j j ƒ  t ƒ  } | j |  d | ƒt |  j j j ƒ  ƒ d k sƒt ‚ t |  j j j ƒ  ƒ d k s§t ‚ t  j d d ƒ } t j d t ƒ j
 ƒ  } t ƒ  } | j | d | ƒt | j j j ƒ  ƒ d d d d d d d d
 d g	 k s,t ‚ | j j d k sDt ‚ t | j j j ƒ  ƒ d d g k snt ‚ d  S(   Nt   names   cif_core.dict   input_stringt   outiÑ  iÒ  i5  i6  iÅ	  iÇ	  iÈ	  iÉ	  iÊ	  ié  iê  ië  i    s
   cif_mm.dici™  iš  i›  iý  i   (   R   R   t
   isinstancet   deepcopyt
   dictionaryt   AssertionErrort   copyR   t   readert   cif_invalidt   modelR   t   validatet   sortedt   errt   errorst   keyst   warningst	   cif_validt   resett   lent   cif_invalid_2t   error_count(   t   cdt
   cm_invalidt   st   cm_validt   cd2t   cm_invalid_2(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyR      s2    	*-	$$	*c         C   sð  d d l  m } d d l m } d d  l } d d  l } d d  l } d d g d } t t g d } | d ƒ j	 ƒ  }	 t
 j d | ƒ }
 |	 j ƒ  | r¦| ƒ  } | j j d	 d
 d d ƒ } | j j | | ƒ d } | j | j j | | ƒ d | ƒ | d ƒ j	 ƒ  } t
 j d | d | ƒ }
 | j ƒ  | d ƒ j	 ƒ  } t
 j d | d t d | ƒ }
 | j ƒ  | d ƒ j	 ƒ  } t
 j d | j j | | ƒ ƒ }
 | j ƒ  n  |  rì| j GH|	 j ƒ  GH| rì| j ƒ  GH| j ƒ  GH| j ƒ  GHqìn  d  S(   Niÿÿÿÿ(   t   open_tmp_directory(   t   time_logs   cif_core.dics
   cif_mm.dici    s   from gzR   t   module_namet   iotbxt   paths   cif/dictionariess   .gzs   from urlt   urlt	   store_dirs   url to filet
   save_locals	   from filet	   file_path(   t   libtbx.test_utilsR.   t   libtbx.utilsR/   t   libtbxt   ost   shutilt   cif_core_dic_urlt   cif_mm_dic_urlt   startR   R   t   stopt   envt
   under_distR2   t   joinR   t   Truet   legendt   report(   R   R   R.   R/   R9   R:   R;   R   R3   t   gz_timerR(   t   tempdirR4   R6   t	   url_timert   url_to_file_timert
   file_timer(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyR   8   s@    
	#
	
!c          C   sŽ  d „  }  t  j d d ƒ j ƒ  } |  d ƒ } |  d ƒ } |  d ƒ } |  d ƒ } | j | ƒ y  | j ƒ  j d | d	 d
 ƒ Wn t k
 r‘ n Xt ‚ | j ƒ  } | j d | d	 d ƒ | d d d k sÔ t ‚ | d d d k sî t ‚ | j | d t ƒ  ƒj	 d k st ‚ | j ƒ  } | j d | d	 d ƒ | d d d k sQt ‚ | d d d k skt ‚ | j | ƒ j	 d k s‰t ‚ | j ƒ  } | j d | d	 d ƒ | d d d k sÅt ‚ | d d d k sßt ‚ | j | ƒ j	 d k sýt ‚ | j ƒ  } | j d | d	 d ƒ d | d k s5t ‚ | d d d k sOt ‚ | j | ƒ j	 d k smt ‚ | j ƒ  }	 |	 j d | d	 d ƒ |	 d d d k s©t ‚ | j |	 ƒ j	 d k sÇt ‚ | j ƒ  }	 |	 j d | d	 d ƒ | j |	 ƒ }
 d „  }  |  d ƒ } |  d ƒ } |  d ƒ } | j ƒ  | k s=t ‚ | j
 ƒ  | k sUt ‚ y | j ƒ  j | d	 d
 ƒWn t k
 r…n Xt ‚ | j ƒ  } | j | d	 d ƒ| | k s½t ‚ | j ƒ  } | j | d	 d ƒ| d d d  d! k sút ‚ d" | d d k st ‚ d# | d d k s.t ‚ xY d% D]Q } | j ƒ  } | j | d	 | ƒd | d k spt ‚ d$ | d k s5t ‚ q5Wd  S(&   Nc         S   s)   d } t  j t j d | |  ƒ j ƒ  ƒ S(   NsX   
    data_on_this_dictionary
    _dictionary_name dummy
    _dictionary_version 1.0
    R   (   R   R   R   R   R   (   t   stringt   on_this_dict(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyt   cif_dic_from_strb   s    R   s   
  data_test
  _dummy 1234.5
  sa   
  data_dummy
  _name '_dummy'
  _type numb
  _enumeration_range 0: # i.e. any positive number
  sF   
  data_dummy_modified
  _name '_dummy'
  _enumeration_range 0:1000
  s:   
  data_dummy
  _name '_dummy'
  _type_extended integer
  s.   
  data_dummy
  _name '_dummy'
  _type char
  t   othert   modet   strictt   overlayt   dummyt   _typet   numbt   _enumeration_ranges   0:1000R   i   t   dummy_modifieds   0:i    t   _type_extendedt   integert   replacet   charc         S   s)   d } t  j t j d | |  ƒ j ƒ  ƒ S(   Nsb  data_test.dic
    _dictionary.title           test.dic
    _dictionary.version         1

    loop_
    _item_type_list.code
    _item_type_list.primitive_code
    _item_type_list.construct
    _item_type_list.detail
               code      char
               '[_,.;:"&<>()/\{}'`~!@#$%A-Za-z0-9*|+-]*'
;              code item types/single words ...
;
R   (   R   R   R   R   R   (   RK   t   header(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyRM   ¥   s    sÀ   
save_fred
    _category.description       'a description'
    _category.id                  fred
    _category.mandatory_code      no
    _category_key.name          'fred.id'
     save_
    sø   
save_fred
    _category.id                  fred
    _category.mandatory_code      yes
    _category_key.name          'fred.id'
    loop_
    _category_group.id           'inclusive_group'
                                 'atom_group'
     save_
sŠ   
save_bob
    _category.id                  bob
    _category.mandatory_code      yes
    _category_key.name          'bob.id'
     save_
s   test.dict   freds   _category.mandatory_codet   yess   _category.descriptions   _category_group.idt   bob(   s   stricts   replaceRQ   (   R   R   R   R   R   t   updateR   R   R   R'   R   (   RM   t   test_cift   dict_officialt   dict_at   dict_bt   dict_ct   dict_oat   dict_aot   dict_obt   dict_ocR    t   dic_at   dic_bt   dic_ct   dic_abRO   t   dic_ac(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyR   ^   sŽ    						   '		
		  s#  data_1
_made_up_name a                            # warning 1001
_space_group_IT_number b                   # error 2001
_diffrn_reflns_number 2000(1)              # error 2002
_refine_ls_abs_structure_Flack -0.3        # error 2101
_diffrn_radiation_probe rubbish            # error 2102
_symmetry_cell_setting Monoclinic          # warning 1002

loop_
_cell_length_a 10 10                       # error 2501

loop_
_atom_site_label
_atom_site_chemical_conn_number            # error 2504
_atom_site_refinement_flags                # warning 1003
O1 1 P

loop_                                      # error 2503
_atom_site_aniso_label
N1
N2

loop_                                      # error 2505
_space_group_symop_operation_xyz
x,y,z
-x,-y,-z

_atom_site_adp_type Uani                   # error 2506
sâ  data_1
_space_group_IT_number 2
_diffrn_reflns_number 2000
_refine_ls_abs_structure_Flack 0.3
_diffrn_radiation_probe x-ray
_cell_length_a 10
_space_group_crystal_system monoclinic

loop_
_atom_site_label
_atom_site_chemical_conn_number
_atom_site_adp_type
O1 1 Uani
N1 2 Uani
N2 3 Uani

loop_
_chemical_conn_atom_number
_chemical_conn_atom_type_symbol
1 O
2 N
3 N

loop_
_atom_site_aniso_label
N1
N2

loop_
_space_group_symop_id
_space_group_symop_operation_xyz
1 x,y,z
2 -x,-y,-z
s^  data_2
_made_up.name a                            # warning 1001
_space_group.IT_number b                   # error 2001
_diffrn_reflns_number 200.32               # error 2001
_refine.ls_abs_structure_Flack -0.3        # error 2101
_diffrn_radiation.probe rubbish            # error 2102
_symmetry.cell_setting Monoclinic          # warning 1002

loop_
_cell.length_a 10 10                       # error 2203, 2301

loop_
_atom_site.id
_atom_site.chemical_conn_number            # error 2504
O1 1

loop_                                      # error 2503
_atom_site_anisotrop.id
_atom_site_anisotrop.U[1][1]               # error 2301
_atom_site_anisotrop.B[1][1]               # error 2201
_atom_site_anisotrop.U[1][2]_esd           # error 2202
N1 1
N2 2

loop_                                      # error 2203
_space_group_symop.operation_xyz
x,y,z
-x,-y,-z
t   __main__i   t   OK(   t
   __future__R    R1   R   t	   iotbx.cifR   t   iotbx.cif.validationR   t   libtbx.load_envR9   R7   R   t   urllib2R   t	   cStringIOR   t   sysR<   R=   R   R   t   FalseR   R   R   R#   R&   t   __name__t   argv(    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/tests/tst_validation.pyt   <module>   s(   		&	¥#