B
    d                 @   sh  d dl mZmZmZ d dlZd dlZd dlZd dlZd dlZd dl	m
Z
 edejejB ejB ZdddZedZy
ejZW n ek
r   Y nX y
ejZW n ek
r   Y nX ed	re  G d
d deZe ZG dd deZejjZe Zeed kst dd Z!e!dZ"G dd deZ#dd Z$dd Z%dd Z&dddZ'e' Z(G dd dZ)dS )     )absolute_importdivisionprint_functionN)cpp_function_namez$[Ss]ymbol[ ]not[ ]found: \s* (\w+) $Fc       	   
   C   s4  |  d}t|dkr,td|d d  d }tjdrNt }td yt| }W n t	k
r } z|rtd S t
|}t|}|r|d |d t|d ||dd   }t	dd| |f dgd	d
 tjD  W d d }~X Y nX x |dd  D ]}t||}qW |d k	r0t| |S )N.   linuxi  z
  z__import__("%s"): %sz	sys.path:c             S   s   g | ]}d | qS )z   ).0pr
   r
   y/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/boost_adaptbx/boost/python.py
<listcomp>!   s    zimport_ext.<locals>.<listcomp>)splitlen
__import__joinsysplatform
startswithgetdlopenflagssetdlopenflagsImportErrorstrsymbol_not_found_patsearchstartr   Zdemanglegroupendpathgetattr)	nameoptional
componentsZprevious_dlopenflagsmodeZ	error_msgmcompr
   r
   r   
import_ext   s0    

  
4(

r(   Zboost_python_meta_extZBOOST_ADAPTBX_ENABLE_TRACEc               @   sX   e Zd ZddiZdd Zdd Zef e Zdd Zef e Zd	d
 Zef e ZdS )floating_point_exceptions_typeinitialisedFc             C   s\   | j | _| jsXttd| j}ttd| j}ttd| j}t	
||| d| _d S )NZBOOST_ADAPTBX_TRAP_FPEZBOOST_ADAPTBX_TRAP_INVALIDZBOOST_ADAPTBX_TRAP_OVERFLOWT)-_floating_point_exceptions_type__shared_state__dict__r*   boolosgetenvdivision_by_zero_trappedinvalid_trappedoverflow_trappedexttrap_exceptions)selfdivision_by_zeroinvalidoverflowr
   r
   r   __init__5   s    z'floating_point_exceptions_type.__init__c              C   s   dd } dd }t  S )Nc             S   s   t  S )N)r3   is_division_by_zero_trapped)r5   r
   r
   r   fget?   s    zEfloating_point_exceptions_type.division_by_zero_trapped.<locals>.fgetc             S   s&   || j krd S tj|| j| jd d S )N)r6   r7   r8   )r0   r3   r4   r1   r2   )r5   flagr
   r
   r   fsetA   s
    
 zEfloating_point_exceptions_type.division_by_zero_trapped.<locals>.fset)locals)r;   r=   r
   r
   r   r0   >   s    z7floating_point_exceptions_type.division_by_zero_trappedc              C   s   dd } dd }t  S )Nc             S   s   t  S )N)r3   is_invalid_trapped)r5   r
   r
   r   r;   J   s    z<floating_point_exceptions_type.invalid_trapped.<locals>.fgetc             S   s(   ||   krd S tj| j|| jd d S )N)r6   r7   r8   )r;   r3   r4   r1   r2   )r5   r<   r
   r
   r   r=   L   s
     z<floating_point_exceptions_type.invalid_trapped.<locals>.fset)r>   )r;   r=   r
   r
   r   r1   I   s    z.floating_point_exceptions_type.invalid_trappedc              C   s   dd } dd }t  S )Nc             S   s   t  S )N)r3   is_overflow_trapped)r5   r
   r
   r   r;   U   s    z=floating_point_exceptions_type.overflow_trapped.<locals>.fgetc             S   s(   ||   krd S tj| j| j|d d S )N)r6   r7   r8   )r;   r3   r4   r2   r1   )r5   r<   r
   r
   r   r=   W   s
     z=floating_point_exceptions_type.overflow_trapped.<locals>.fset)r>   )r;   r=   r
   r
   r   r2   T   s    z/floating_point_exceptions_type.overflow_trappedN)	__name__
__module____qualname__r+   r9   r0   propertyr1   r2   r
   r
   r
   r   r)   2   s   				r)   c               @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )trappinga'   Synopsis:

      >>> import boost_adaptbx.boost.python as bp
      >>> from scitbx.array_family import flex
      >>> a = flex.double((0, 0, 0))
      >>> with bp.trapping(division_by_zero=False):
      >>>   b = 1/a
      >>> tuple(b)
      (inf, inf, inf)
      >>> 1/a
      ... CRASH ...
  Tc             C   s0   t  | _t  | _t  | _t ||| d S )N)r3   r:   r6   r?   r7   r@   r8   r4   )r5   r6   r7   r8   r
   r
   r   r9   o   s    


ztrapping.__init__c             C   s   | S )Nr
   )r5   r
   r
   r   	__enter__v   s    ztrapping.__enter__c             C   s   t | j| j| j d S )N)r3   r4   r6   r7   r8   )r5   exc_typeexc_valexc_tbr
   r
   r   __exit__y   s    ztrapping.__exit__N)TTT)rA   rB   rC   __doc__r9   rF   rJ   r
   r
   r
   r   rE   b   s   
rE   c             C   sF   d|  }x(t  D ]}||rP qW td| t|t|d  S )Nzsizeof(%s) = z!bp.platform_info: "%s" not found.)platform_info
splitlinesr   RuntimeErrorintr   )typenamepatternliner
   r
   r   c_sizeof   s    
rS   zvoid*c               @   s(   e Zd Zdd Zdd ZeZdd ZdS )gcc_versionc             C   sf   d}t d|fd  tt jt jB t jB }|s@d\| _| _| _n"t	dd |
 D \| _| _| _d S )Nz \s* = \s* (\d+) \s+z4__GNUC__ %s __GNUC_MINOR__ %s __GNUC_PATCHLEVEL__ %s   )NNNc             S   s   g | ]}t |qS r
   )rO   )r   xr
   r
   r   r      s    z(gcc_version.__init__.<locals>.<listcomp>)rer   rL   XMSmajorminor
patchleveltuplegroups)r5   patr&   r
   r
   r   r9      s    
zgcc_version.__init__c             C   s
   | j d k	S )N)r[   )r5   r
   r
   r   __bool__   s    zgcc_version.__bool__c             C   s    | rd| j | j| jf S dS d S )Nz%i.%i.%izGCC, it is not)r[   r\   r]   )r5   r
   r
   r   __str__   s    zgcc_version.__str__N)rA   rB   rC   r9   ra   __nonzero__rb   r
   r
   r
   r   rT      s   rT   c             G   sJ   xD|D ]<}x6|j  D ](\}}|dkr|dks2|rt| || qW qW dS )a  Add entries from python class dictionaries to a boost extension class.

      It is used as follows:

            class _():
              def method(...):
                ...
            bp.inject(extension_class, _)

      instead of the previous mechanism of

            class _(bp.injector, extension_class):
              def method(...):
                ...

      which does not work in python 3.
   )r9   __del__rB   __file__r,   rK   N)r,   itemssetattr)target_classmixin_classesr&   keyvaluer
   r
   r   inject   s
    
rl   c                s    fdd}|S )zAdd entries from python class dictionaries to a boost extension class.

     It is used as follows:

           @bp.inject_into(extension_class)
           class _():
             def method(...):
               ...
  c                sL   t | rt| f   n,t| j|  G dd d}t|f   d S )Nc               @   s   e Zd ZdS )z1inject_into.<locals>._inject.<locals>.empty_classN)rA   rB   rC   r
   r
   r
   r   empty_class   s   rm   )inspectisclassrl   rg   rA   )crm   )ri   rh   r
   r   _inject   s
    
zinject_into.<locals>._injectr
   )rh   ri   rq   r
   )ri   rh   r   inject_into   s    
rr   c                s(   t |   fdd}t|  | d S )Nc                 s"   t jdj dtdd | |S )NzBThe method {method_name} is deprecated and will be removed shortly)method_name   )
stacklevel)warningswarnformatDeprecationWarning)argskwargs)rs   original_methodr
   r   deprecation_helper   s    z,deprecate_method.<locals>.deprecation_helper)r    rg   )Zboost_objectrs   r}   r
   )rs   r|   r   deprecate_method   s    

r~   BOOST_ADAPTBX_DOCSTRING_OPTIONSc          
   C   s   t j| }|d krd S ytd| i dtjiS  tk
rD    Y nZ tk
r } z<ddlm	} t
d| ||f dt|  d d|   W d d }~X Y nX d S )	Nzdocstring_options(%s)docstring_optionsr   )show_stringzError processing %s=%s
z  Exception: %s
z  Valid example:
z5    %s="show_user_defined=True,show_signatures=False")r.   environgetevalr3   r   KeyboardInterrupt	Exceptionlibtbx.str_utilsr   rN   r   )env_varfrom_envr%   r   r
   r
   r   process_docstring_options   s      r   c               @   s   e Zd Zdd ZdS )py3_make_iteratorc             C   s   |   S )N)next)objr
   r
   r   __next__   s    zpy3_make_iterator.__next__N)rA   rB   rC   r   r
   r
   r
   r   r      s   r   )F)r   )*
__future__r   r   r   rn   r.   rW   r   rv   libtbxr   compilerX   rY   rZ   r   r(   r3   Z	streambufAttributeErrorostreamr/   Z$enable_signals_backtrace_if_possibleobjectr)   Zfloating_point_exceptionsrE   Zholder	__class__Z
meta_classrL   r   AssertionErrorrS   Zsizeof_void_ptrrT   rl   rr   r~   r   r   r   r
   r
   r
   r   <module>   sF   
 
  
 
-	
