ó
m™xTc           @   sÃ  d  Z  d d l m Z e a d „  Z e a d „  Z y d d l m	 Z	 Wn e
 k
 rg d d l	 Z	 n Xy d d l m Z Wn e
 k
 r› d d l Z n Xd e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e 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  e f d! „  ƒ  YZ e d" „ Z d# „  Z d$ „  Z d% „  Z d& „  Z d' „  Z e d( „ Z  e d) „ Z! d* „  Z" d+ „  Z# d, „  Z$ e d- „ Z% d. e f d/ „  ƒ  YZ& d0 „  Z' d1 „  Z( e) d2 „ Z* e) d3 „ Z+ d4 „  Z, d5 „  Z- d6 „  Z. d7 „  Z/ e0 d8 k r¿e. ƒ  e/ ƒ  n  d S(9   sÐ  
Note: this module can be used in isolation (without the rest of scitbx).
All external dependencies (other than plain Python) are optional.

The primary purpose of this module is to provide compact
implementations of essential matrix/vector algorithms with minimal
external dependencies. Optimizations for execution performance are
used only if compactness is not affected. The scitbx/math module
provides faster C++ alternatives to some algorithms included here.
iÿÿÿÿ(   t   divisionc           C   sA   t  t k r= y d d l m a  Wq= t k
 r9 d  a  q= Xn  t  S(   Niÿÿÿÿ(   t   flex(   t   _flex_importedt   Falset   scitbx.array_familyR   t   ImportErrort   None(    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt
   flex_proxy   s      c          C   sC   t  t k r? y d d  l }  Wn t k
 r5 d  a  q? X|  a  n  t  S(   Niÿÿÿÿ(   t   _numpy_importedR   t   numpy.linalgR   R   (   t   numpy(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   numpy_proxy   s      
	(   t   mathN(   t   randomt   recc           B   sP  e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z dU d	 „ Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d  „  Z% d! „  Z& e$ Z' e& Z( d" „  Z) dU d# „ Z* d$ „  Z+ d% „  Z, d& d' „ Z- d( „  Z. d) „  Z/ d* „  Z0 d+ „  Z1 e2 e2 d, „ Z3 e2 d- „ Z4 d. „  Z5 d/ „  Z6 d0 „  Z7 e2 d1 „ Z8 e2 d2 „ Z9 e2 d3 „ Z: e2 d4 „ Z; e2 d5 „ Z< d6 „  Z= e2 d7 „ Z> e2 d8 „ Z? e2 d9 „ Z@ d: d: d; „ ZA dU d< „ ZB dU d= „ ZC dU e2 d> „ ZD dU e2 d? „ ZE d@ „  ZF dA „  ZG dB „  ZH dC „  ZI dD „  ZJ dE „  ZK dF e2 dU dF e2 dG „ ZL dF e2 dU dF dH „ ZM dI „  ZN dJ „  ZO dK „  ZP dL „  ZQ dM „  ZR dN „  ZS dO „  ZT dV dW dQ „ ZU dR „  ZV dS „  ZW dT „  ZX RS(X   sü   
  Base rectangle object, used to store 2-dimensional data.

  Examples
  --------
  >>> from scitbx.matix import rec
  >>> m = rec((1, 2, 3, 4), (2, 2))
  >>> print m.trace()
  5
  >>> other = rec((1, 1, 1, 1), (2, 2))
  >>> print m.dot(other)
  10
  c         C   s|   t  | ƒ d k s t ‚ t | |  j ƒ s< |  j | ƒ } n  t  | ƒ | d | d k s` t ‚ | |  _ t | ƒ |  _ d  S(   Ni   i    i   (   t   lent   AssertionErrort
   isinstancet   container_typet   elemst   tuplet   n(   t   selfR   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __init__9   s    $	c         C   s   |  j  d S(   Ni    (   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   n_rowsA   s    c         C   s   |  j  d S(   Ni   (   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   n_columnsD   s    c         C   s'   t  g  |  j D] } | ^ q |  j ƒ S(   N(   R   R   R   (   R   t   e(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __neg__G   s    c         C   se   |  j  | j  k s t ‚ |  j } | j } t g  t t | ƒ ƒ D] } | | | | ^ q@ |  j  ƒ S(   N(   R   R   R   R   t   xrangeR   (   R   t   othert   at   bt   i(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __add__J   s    		c         C   se   |  j  | j  k s t ‚ |  j } | j } t g  t t | ƒ ƒ D] } | | | | ^ q@ |  j  ƒ S(   N(   R   R   R   R   R   R   (   R   R   R   R   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __sub__P   s    		c         C   s¤  t  | d ƒ s] t | t t f ƒ sN t g  |  j D] } | | ^ q1 |  j ƒ St | ƒ } n  |  j } |  j ƒ  } |  j	 ƒ  } | j } | j ƒ  | k rÄ t
 d t |  j ƒ t | j ƒ f ƒ ‚ n  | j	 ƒ  } | d k r÷ t d | | | | f ƒ Sg  } x{ t | ƒ D]m }	 xd t | ƒ D]V }
 d } x: t | ƒ D], } | | |	 | | | | | |
 7} q6W| j | ƒ qWq
W| | k r‘t | ƒ St | | | f ƒ S(   NR   s2   Incompatible matrices:
  self.n:  %s
  other.n: %si    (   i    (   t   hasattrR   t   listR   R   R   R   t   colR   R   t   RuntimeErrort   strR   t   appendt   sqr(   R   R   t   xR   t   art   acR   t   bct   resultR    t   kt   st   j(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __mul__V   s2    *		%*
c         C   s$   t  | t ƒ r | j |  ƒ S|  | S(   s   scalar * matrix(   R   R   R2   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __rmul__s   s    c      
   C   s×  |  j  } |  j ƒ  } |  j ƒ  } | d  k rÑ d g | | } d } x€ t | ƒ D]r } d } xY t | ƒ D]K }	 xB t | ƒ D]4 }
 | | c | | |	 | | |
 7<| d 7} q} Wqj W| | 7} qQ Wt | ƒ S| j  } | j ƒ  | k sø t d ƒ ‚ | j ƒ  } d g | | } d } d } xŠ t | ƒ D]| } d } xY t | ƒ D]K }	 xB t | ƒ D]4 }
 | | c | | |	 | | |
 7<| d 7} qZWqGW| | 7} | | 7} q.W| | k rÄt | ƒ St | | | f ƒ S(   Ni    i   s   Incompatible matrices.(   R   R   R   R   R   R)   R   R   (   R   R   R   R+   R,   R.   t   jacR1   t   ikR    R/   R   R-   t   jbc(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   transpose_multiplyy   s>    	$
	$

c         C   s*   t  g  |  j D] } | | ^ q |  j ƒ S(   N(   R   R   R   (   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __div__š   s    c         C   s*   t  g  |  j D] } | | ^ q |  j ƒ S(   N(   R   R   R   (   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __truediv__�   s    c         C   s*   t  g  |  j D] } | | ^ q |  j ƒ S(   N(   R   R   R   (   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __floordiv__    s    c         C   s*   t  g  |  j D] } | | ^ q |  j ƒ S(   N(   R   R   R   (   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __mod__£   s    c         C   s   |  j  | |  j ƒ  | S(   N(   R   R   (   R   t   irt   ic(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __call__¦   s    c         C   s   t  |  j ƒ S(   N(   R   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __len__©   s    c         C   s   |  j  | S(   N(   R   (   R   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __getitem__¬   s    c         C   s,   t  g  |  j D] } t | ƒ ^ q |  j ƒ S(   N(   R   R   t   floatR   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_float¯   s    c         C   s?   d d l  m } t g  |  j D] } | j | ƒ ^ q |  j ƒ S(   Niÿÿÿÿ(   t   rational(   t   boostRC   R   R   t   intR   (   R   RC   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_boost_rational²   s    c         C   sh   | r8 t  g  |  j D] } t t | ƒ ƒ ^ q |  j ƒ St  g  |  j D] } t | ƒ ^ qE |  j ƒ Sd  S(   N(   R   R   RE   t   roundR   (   R   t   roundingR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_int¶   s    2c         C   s7   t  ƒ  } | d  k	 s t ‚ | j |  j ƒ j |  j ƒ S(   N(   R   R   R   t   arrayR   t   reshapeR   (   R   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_numpy_array¼   s    	c         C   s,   t  g  |  j D] } t | ƒ ^ q |  j ƒ S(   N(   R   R   t   absR   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   each_absÁ   s    i   c            sH   ˆ d ‰  ‡  ‡ f d †  } t  g  |  j D] } | | ƒ ^ q) |  j ƒ S(   Ng       @c            sI   t  j |  ˆ ƒ } | ˆ  k  r, | ˆ 7} n | ˆ  k rE | ˆ 8} n  | S(   N(   R   t   fmod(   R   t   r(   t   halft   period(    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   mod_shortÆ   s      (   R   R   R   (   R   RR   RS   R   (    (   RQ   RR   sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   each_mod_shortÄ   s    
c         C   s?   d  } x2 |  j D]' } | d  k s. | | k r | } q q W| S(   N(   R   R   (   R   R.   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   minÍ   s
    c         C   s?   d  } x2 |  j D]' } | d  k s. | | k  r | } q q W| S(   N(   R   R   (   R   R.   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   maxÔ   s
    c         C   sY   d  } xL t t |  j ƒ ƒ D]5 } | d  k sH |  j | |  j | k r | } q q W| S(   N(   R   R   R   R   (   R   R.   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   min_indexÛ   s
    &c         C   sY   d  } xL t t |  j ƒ ƒ D]5 } | d  k sH |  j | |  j | k  r | } q q W| S(   N(   R   R   R   R   (   R   R.   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   max_indexâ   s
    &c         C   s(   d } x |  j  D] } | | 7} q W| S(   Ni    (   R   (   R   R.   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   sumé   s    c         C   s(   d } x |  j  D] } | | 9} q W| S(   Ni   (   R   (   R   R.   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   productï   s    c         C   sd   |  j  ƒ  |  j ƒ  k s t ‚ |  j  ƒ  } d } x- t | ƒ D] } | |  j | | | 7} q= W| S(   Ni    (   R   R   R   R   R   (   R   R   R.   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   traceõ   s    c         C   s,   d } x |  j  D] } | | | 7} q W| S(   Ni    (   R   (   R   R.   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   norm_sqý   s    c         C   s/   t  g  |  j D] } t | | ƒ ^ q |  j ƒ S(   N(   R   R   RG   R   (   R   t   digitsR*   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRG     s    c         C   s=   |  j  ƒ  d k s* |  j ƒ  d k s* t ‚ t j |  j ƒ  ƒ S(   Ni   (   R   R   R   R   t   sqrtR\   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __abs__  s    *c         C   s   |  t  |  ƒ S(   N(   RM   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   normalize  s    c         C   s·   d } |  j  } | d  k rS x• t t | ƒ ƒ D] } | | } | | | 7} q. Wn` t |  j  ƒ t | j  ƒ k sw t ‚ | j  } x0 t t | ƒ ƒ D] } | | | | | 7} q“ W| S(   Ni    (   R   R   R   R   R   (   R   R   R.   R   R    t   vR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   dot  s    	
$	c         C   s²   |  j  d d f k s t ‚ |  j  | j  k s3 t ‚ |  j } | j } t | d | d | d | d | d | d | d | d | d | d | d | d f |  j  ƒ S(   Ni   i   i   i    (   i   i   (   i   i   (   R   R   R   R   (   R   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   cross  s    		c         C   sE   |  j  d k r t d ƒ ‚ n  |  j ƒ  } | t d d ƒ j ƒ  d S(   Ni   s   Not a 3x3 matrix.R   g      à?(   i   i   (   R   R&   R7   t   identityR\   (   R   t   rtr(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   is_r3_rotation_matrix_rms(  s     g:Œ0âŽyE>c         C   s,   |  j  ƒ  | k  o+ t d |  j ƒ  ƒ | k  S(   Ni   (   Rf   RM   t   determinant(   R   t   rms_tolerance(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   is_r3_rotation_matrix-  s    c      
   C   s   |  j  d k S(   Ng      ð?g        (	   g      ð?g        g        g        g      ð?g        g        g        g      ð?(   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   is_r3_identity_matrix1  s    c         C   s   |  j  d k S(   s     Is the translation vector zero g        (   g        g        g        (   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   is_col_zero4  s    c         C   s2   t  g  |  j D] } | d k r d ^ q ƒ d k S(   s    Are all elements zero  i    i   (   R   R   (   R   R*   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   is_zero8  s    c         C   sñ   |  j  d d g k s t ‚ |  j \ } } } } t d | | | | d d | | | | d | | | | d | | | | d | | | | d d | | | | d | | | | d | | | | d | | | | d f	 ƒ S(   Ni   i   i   (   i   i   (   i   i   (   R   R   R   R)   (   R   t   q0t   q1t   q2t   q3(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt%   unit_quaternion_as_r3_rotation_matrix<  s    ==c      	   C   s‹  |  j  d
 k r t d ƒ ‚ n  |  j \	 } } } } } } }	 }
 } | d k rÐ t j | ƒ } | rs t j | } n  t j | t j | ƒ | t j | ƒ ƒ } t j | t j | ƒ | t j | ƒ ƒ } nv | d k rt j d } t j | | ƒ } d } nB | d k r:t j d } t j | | ƒ } d } n t d ƒ ‚ | rzd | t j d | t j d | t j f S| | | f Sd	 S(   s"  
    Get the rotation angles around the axis x,y,x for rotation r
    Such that r = Rx*Ry*Rz

    Note that typically there are two solutions, and this function will return
    only one. In the case that cos(beta) == 0 there are infinite number of
    solutions, the function returns the one where gamma = 0

    Args:
      deg : When False use radians, when True use degrees
      alternate_solution: return the alternate solution for the angles

    Returns:
      angles: containing rotation angles in the form
        (rotx, roty, rotz)
    i   s   Not a 3x3 matrix.i   iÿÿÿÿi   i    s   Can't calculate rotation anglesi´   N(   i   i   (   i   iÿÿÿÿ(	   R   R&   R   R   t   asint   pit   atan2t   cost   ArithmeticError(   R   t   degt   alternate_solutiont   Rxxt   Rxyt   Rxzt   Ryxt   Ryyt   Ryzt   Rzxt   Rzyt   Rzzt   betat   alphat   gamma(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt"   r3_rotation_matrix_as_euler_anglesD  s.     $-0		c   	      C   s  |  j  d d g k s t ‚ |  j \ } } } } t j d | | | | d d | d | d ƒ } t j d | | | | ƒ t j } t j d | | | | d d | d | d ƒ } | rö d | t j d | t j d | t j f S| | | f Sd S(   s,   Get euler angles from a unit quaternion.  Only one solution is available
        in contrast to r3_rotation_matrix_as_euler_angles.

    Args:
      deg : When False use radians, when True use degrees

    Returns:
      angles: containing rotation angles in the form
        (rotx, roty, rotz)
    i   i   i   i´   N(   i   i   (   i   i   (   R   R   R   R   Rt   Rr   Rs   (	   R   Rw   Rm   Rn   Ro   Rp   t   rotxt   rotyt   rotz(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   unit_quaternion_as_euler_anglesr  s    6&6c      	   C   s�  |  j  d	 k r t d ƒ ‚ n  |  j \	 } } } } } } } } }	 | | |	 }
 |
 d k r« d |
 d } | | } | d 9} | | | } | | | } | | | } nÎ| | k rÕ | |	 k rÌ d } qð d } n | |	 k rê d } n d } d } d } | d k r€d | | |	 } | | k  r5t | ƒ ‚ n  | d } | | } | d 9} | | | } | | | } | | | } nù | d k rd | | |	 } | | k  r¹t | ƒ ‚ n  | d } | | } | d 9} | | | } | | | } | | | } nu d |	 | | } | | k  r1t | ƒ ‚ n  | d } | | } | d 9} | | | } | | | } | | | } t | | | | f ƒ S(
   Ni   s   Not a 3x3 matrix.g      à?i   i    i   gš™™™™™é?s   Not a r3_rotation matrix.(   i   i   (   R   R&   R   R%   (   R   t   m00t   m01t   m02t   m10t   m11t   m12t   m20t   m21t   m22R[   t   wt   dR*   t   yt   zt   mxt   invalid_cutofft   invalid_messaget   x_sqt   y_sqt   z_sq(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt%   r3_rotation_matrix_as_unit_quaternionŒ  sd     $

 		 	 


 


 


c   
      C   sæ   |  j  d d g k s t ‚ | j  d d g k s6 t ‚ |  j \ } } } } | j \ } } } }	 t | | | | | | | |	 | | | | | |	 | | | | | |	 | | | | | |	 | | | | | | f ƒ S(   Ni   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   R   R%   (
   R   R   Rm   Rn   Ro   Rp   t   o0t   o1t   o2t   o3(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   unit_quaternion_productÀ  s    c         C   sI   |  j  d d g k s t ‚ |  j \ } } } } t | | | | f ƒ S(   Ni   i   (   i   i   (   i   i   (   R   R   R   R%   (   R   Rm   Rn   Ro   Rp   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   quaternion_inverseË  s    c   	      C   sË   |  j  d d	 g k s t ‚ |  j \ } } } } | d k rE d } n  | d k  rZ d } n  d t j | ƒ } | r‡ | d t j 9} n  t | | | f ƒ } | j ƒ  } | d k rÁ | | } n  | | f S(
   Ni   i   g      ð?g      ð¿g       @g     €f@i    (   i   i   (   i   i   (   R   R   R   R   t   acosRs   R%   t   length(	   R   Rw   Rm   Rn   Ro   Rp   t   angle_alphat   axist   axis_length(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt!   unit_quaternion_as_axis_and_angleÐ  s     	 	 c   	      C   s˜   |  j  d d f k s t ‚ | r5 | t j d 9} n  | d } t j | ƒ t j | ƒ } } |  j ƒ  j \ } } } t | | | | | | | f ƒ S(   Ni   i   i´   g      à?(   i   i   (   i   i   (	   R   R   R   Rs   Ru   t   sinR`   R   R%   (	   R   t   angleRw   t   ht   cR0   t   uRa   R“   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt!   axis_and_angle_as_unit_quaternionÝ  s     
c         C   s"   |  j  d | d | ƒ } | j ƒ  S(   NR«   Rw   (   R¯   Rq   (   R   R«   Rw   t   uq(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt$   axis_and_angle_as_r3_rotation_matrixå  s    c   
      C   s½   |  j  d d f k s t ‚ d } | rH | t j d 9} d t j } n  |  j ƒ  } t d d ƒ } | j | ƒ } t | j ƒ } t j	 | ƒ t j
 | ƒ } }	 | | |	 | |	 | | S(	   Ni   i   g      ð?i´   g     €f@R   (   i   i   (   i   i   (   R   R   R   Rs   R`   Rd   t   outer_productt   cross_product_matrixR   Ru   Rª   (
   R   R«   Rw   t	   prefactort	   unit_axist   I3t   OPt   CPR­   R0   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt)   axis_and_angle_as_r3_derivative_wrt_angleé  s      c         C   sj   |  j  d d f k s t ‚ | j  d d f k s6 t ‚ | |  j d | d | ƒ } t | |  | |  f ƒ S(	   Ni   i   R«   Rw   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   R±   t   rt(   R   t   pointR«   Rw   RP   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt#   rt_for_rotation_around_axis_throughö  s
    c         C   s¿   |  j  d d f k s t ‚ |  j \ } } } t | ƒ t | ƒ t | ƒ } } } | | k r | | k r t | | d f ƒ S| | k r« | | k r« t | d | f ƒ St d | | f ƒ S(   Ni   i   i    (   i   i   (   i   i   (   R   R   R   RM   R%   (   R   R*   R•   R–   R   R   R­   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   orthoý  s    &c         C   s°   |  j  d d f k s t ‚ | j  |  j  k s3 t ‚ | rM | t j d 9} n  | j ƒ  } |  } t j | ƒ t j | ƒ } } | | | | j | ƒ d | | j | ƒ | S(   Ni   i   i´   (   i   i   (   i   i   (	   R   R   R   Rs   R`   Ru   Rª   Rb   Rc   (   R   R§   R«   Rw   R   R*   R­   R0   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   rotate_around_origin  s     c         C   so   |  j  d k s t ‚ | r/ | t j d 9} n  t j | ƒ t j | ƒ } } t | | | | f ƒ } | |  S(   Ni   i   i´   (   i   i   (   (   i   i   (   R   R   R   Rs   Ru   Rª   R)   (   R   R«   Rw   R­   R0   t   rotmat(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   rotate_2d  s     c         C   sD   d d  l  } | j d d d t d d ƒ |  j d | d | d	 | ƒ S(
   Niÿÿÿÿt   messagesy   The .rotate() method has been renamed to .rotate_around_origin() for clarity. Please update the code calling this method.t   categoryt
   stackleveli   R§   R«   Rw   (   t   warningst   warnt   DeprecationWarningR¾   (   R   R§   R«   Rw   RÄ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   rotate  s    	g»½×Ùß|Û=c      
   C   s!  |  j  d d f k s t ‚ |  j \ } } } | | | | } t | | | d ƒ | k rl t d ƒ ‚ n  t j | ƒ } | | k  r§ | d k r� t d ƒ St d	 ƒ S| } | }	 | | }
 |	 | } d | } t | |
 |
 | |
 | | |	 |
 | | | | | | | |	 | | f	 ƒ S(
   Ni   i   s   self is not a normal vector.i    iÿÿÿÿ(   i   i   (   i   i   (	   i   i    i    i    i   i    i    i    i   (	   i   i    i    i    iÿÿÿÿi    i    i    iÿÿÿÿ(   R   R   R   RM   R&   R   R^   R)   (   R   t   sin_angle_is_zero_thresholdt   is_normal_vector_thresholdR*   R•   R­   t   xxyyR0   t   ust   vsR®   Ra   t   oc(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   vector_to_001_rotation"  s     




c         C   sÑ   | d  k r |  } n  |  j d d k sA |  j d d k sA t ‚ | j d d k sm | j d d k sm t ‚ g  } x6 |  j D]+ } x" | j D] } | j | | ƒ q� Wq} Wt | t |  j ƒ t | j ƒ f ƒ S(   Ni    i   (   R   R   R   R   R(   R   R   (   R   R   R.   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR²   6  s     	,,c         C   sl   |  j  ƒ  } | d k r | S| j  ƒ  } | d k r8 | S| | } | d k rR | S|  j | ƒ t j | ƒ S(   Ni    (   R\   Rb   R   R^   (   R   R   t   value_if_undefinedt   self_norm_sqt   other_norm_sqR”   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   cos_angle@  s      
 c         C   sa   |  j  d | ƒ } | d  k r" | St j t d t d | ƒ ƒ ƒ } | r] | d t j 9} n  | S(   NR   iÿÿÿÿi   i´   (   RÒ   R   R   R¤   RV   RU   Rs   (   R   R   RÏ   Rw   RÒ   R.   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR«   I  s     ! c         C   sq   |  j  d | ƒ } | d  k r" | S| d k  r; | d 9} n  t j t d | ƒ ƒ } | rm | d t j 9} n  | S(   NR   i    iÿÿÿÿi   i´   (   RÒ   R   R   R¤   RU   Rs   (   R   R   RÏ   Rw   RÒ   R.   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   accute_angleP  s       c         C   s   |  j  d |  j  d k S(   Ni    i   (   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   is_squareX  s    c         C   s@  |  j  ƒ  s t ‚ |  j } |  j d } | d k r< | d S| d k rh | d | d | d | d S| d k rì | d | d | d | d | d | d | d | d | d | d	 | d | d | d | d | d	 St ƒ  } | d  k	 r3| j | ƒ } | j | j |  j ƒ ƒ | j	 ƒ  St
 d
 |  ƒ S(   Ni    i   i   i   i   i   i   i   i   t   m(   RÔ   R   R   R   R   R   t   doublet   resizet   gridt   matrix_determinant_via_lut   determinant_via_lu(   R   RÕ   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRg   [  s    	 x	
c         C   sé  |  j  } | d k r( t d d d | ƒ S| d k rG t d d d | ƒ S|  j } | d k r� t d | d | d | d | d f d | ƒ S| d k rÇt d | d | d | d	 | d
 | d | d | d | d
 | d | d	 | d | d | d | d | d	 | d | d | d | d | d | d | d	 | d | d | d | d
 | d | d | d | d
 | d | d | d | d | d | d f	 d | ƒ S|  j ƒ  sÙt ‚ t d ƒ ‚ d  S(   Ni    R   R   i   i   i   i   i   i   i   i   s   Not implemented.(   i    i    (    (   i   i   (   i   (   i   i   (   i   i   (   R   R   R   RÔ   R   R&   (   R   R   RÕ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   co_factor_matrix_transposedn  s*    		1    ,c         C   s  |  j  ƒ  s t ‚ |  j } | d d k  rW |  j ƒ  } | d k sI t ‚ |  j ƒ  | St ƒ  } | d  k	 r± | j |  j ƒ } | j	 | j
 | ƒ ƒ | j ƒ  t d | d | ƒ St ƒ  } | d  k	 r| j |  j ƒ } | | _ | j | j j | ƒ ƒ } t d | d | ƒ St d |  ƒ S(   Ni    i   R   R   RÕ   (   RÔ   R   R   Rg   RÛ   R   R   RÖ   R   R×   RØ   t   matrix_inversion_in_placeR   R   t   asarrayt   shapet   ravelt   linalgt   invt   inverse_via_lu(   R   R   Rg   R   RÕ   R
   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   inverse…  s&    		
		c         C   su   g  } xM t  |  j ƒ  ƒ D]9 } x0 t  |  j ƒ  ƒ D] } | j |  | | ƒ ƒ q2 Wq Wt | |  j ƒ  |  j ƒ  f ƒ S(   N(   R   R   R   R(   R   (   R   R   R1   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt	   transposeš  s
    c
         C   s{  |  j  ƒ  }
 |  j ƒ  } |	 } |	 } | rS | | d 7} | d t | ƒ d 7} n  | | 7} | d k rsxt |
 ƒ D]ö } | | 7} xŸ t | ƒ D]‘ } | d  k rÁ | t |  | | ƒ ƒ 7} n | | |  | | ƒ 7} | d | k rõ | d 7} q“ | d |
 k st | ƒ d k r“ | | 7} q“ q“ W| d |
 k rv | | 7} | r_| d 7} | | 7} n  | d 7} qv qv Wn  | | S(   Nt   =t    i   i    s   , s   
(   R   R   R   R   R   R'   (   R   t
   outer_opent   outer_closet
   inner_opent   inner_closet   inner_close_followt   labelt   one_row_per_linet   formatt   prefixt   nrt   ncR0   t   indentR<   R=   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   _mathematica_or_matlab_form¡  s4    

 " 

t    c         C   sk   |  j  d d d d d d d d d d d	 | d
 | d | d | ƒ 	} | rU | d 7} n  | j d d ƒ } | S(   NRç   t   {Rè   t   }Ré   Rê   Rë   t   ,Rì   Rí   Rî   Rï   s   //MatrixFormR   s   *^(   Ró   t   replace(   R   Rì   Rí   Rî   Rï   t   matrix_formR.   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   mathematica_formÂ  s    		 c         C   s@   |  j  d d d d d d d d d	 d d
 | d | d | d | ƒ 	S(   NRç   t   [Rè   t   ]Ré   Rô   Rê   t   ;Rë   Rì   Rí   Rî   Rï   (   Ró   (   R   Rì   Rí   Rî   Rï   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   matlab_formÓ  s    	c         C   sn   |  j  \ } } |  j } t | ƒ d k r9 t | ƒ } n$ d t | d ƒ t | d ƒ f } d | | | f S(   Ni   s   (%s, ..., %s)i    iÿÿÿÿs   matrix.rec(elems=%s, n=(%d,%d))(   R   R   R   R'   (   R   t   n0t   n1R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __repr__à  s    	$c         C   s   |  j  d t ƒ S(   NRí   (   Rú   t   True(   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __str__é  s    c         C   sY   g  } |  j  \ } } x= t | ƒ D]/ } | j t |  j | | | d | !ƒ ƒ q" W| S(   Ni   (   R   R   R(   R$   R   (   R   R.   Rð   Rñ   R<   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_list_of_listsì  s
    -c         C   sp   |  j  d k s t ‚ |  j } | d | d | d | d | d d | d | d d | d	 | d
 d f S(   Ni   i    i   i   i   g       @i   i   i   i   (   i   i   (   R   R   R   (   R   RÕ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_sym_mat3ó  s    	c         C   s   |  j  d k s t ‚ |  j S(   Ni   (   i   i   (   R   R   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_mat3û  s    c         C   sJ   t  ƒ  } | d  k	 s t ‚ | j |  j ƒ } | j | j |  j ƒ ƒ | S(   N(   R   R   R   RÖ   R   RK   RØ   R   (   R   R   R.   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_flex_double_matrixÿ  s
    	c         C   sJ   t  ƒ  } | d  k	 s t ‚ | j |  j ƒ } | j | j |  j ƒ ƒ | S(   N(   R   R   R   RE   R   RK   RØ   R   (   R   R   R.   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_flex_int_matrix  s
    	i    c   	      C   só   d | d k o" |  j  d k n s- t ‚ d | d k oO |  j  d k n sZ t ‚ t | d | d | d ƒ } t | d | d | d ƒ } g  } x5 | D]- } x$ | D] } | j |  | | ƒ ƒ q° Wq£ Wt | t | ƒ t | ƒ f ƒ S(   Ni    i   (   R   R   t   rangeR(   R   R   (	   R   t   stopt   startt   stept   i_rowst   i_columsR.   R<   R=   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   extract_block  s    --c         C   s¦   |  | k r t  S| d  k r  t St t | ƒ t ƒ rE |  j | j k SxZ t |  j ƒ  ƒ D]F } x= t |  j	 ƒ  ƒ D]) } |  | | ƒ | | | f k rq t Sqq WqX Wt  S(   N(
   R  R   R   t
   issubclasst   typeR   R   R   R   R   (   R   R   R<   R=   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __eq__  s       c         C   s   |  j  | ƒ S(   N(   R  (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __ne__"  s    c         C   sP  |  j  \ } } d } x” t | ƒ D]† } d } xm t | ƒ D]_ } |  | | ƒ } t | t ƒ se t ‚ | d k r� | j  d } q; | j  d | k s; t ‚ q; W| | 7} q" Wd } x t | ƒ D]q } d }	 xX t | ƒ D]J } |  | | ƒ } | d k r	| j  d }	 qØ | j  d |	 k sØ t ‚ qØ W| |	 7} q¿ Wd g | | }
 d } x× t | ƒ D]É } d } xž t | ƒ D]� } |  | | ƒ } | j  \ } }	 d } xY t | ƒ D]K } | | | | } x0 t |	 ƒ D]" } | | |
 | | <| d 7} qÍWq¨W| |	 7} qqW| | k st ‚ | | 7} qXW| | k s7t ‚ t d |
 d | | f ƒ S(   Ni    i   R   R   (   R   R   R   R   R   (   R   Rð   Rñ   t	   result_nrR<   t   part_nrR=   t   partt	   result_nct   part_nct   result_elemst	   result_irt	   result_ict   i_partt   part_irt   i_resultt   part_ic(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   resolve_partitions%  sL      N(   i    i    (   i   i   (Y   t   __name__t
   __module__t   __doc__R   R   R   R   R   R   R!   R"   R2   R3   R   R7   R8   R9   R:   R;   R>   R?   R@   RB   RF   R  RI   RL   RN   RT   RU   RV   RW   RX   RY   RZ   R[   R\   RG   R_   t	   length_sqR¥   R`   Rb   Rc   Rf   Ri   Rj   Rk   Rl   Rq   R   R…   R‰   R�   R¢   R£   R©   R¯   R±   R¹   R¼   R½   R¾   RÀ   RÇ   RÎ   R²   RÒ   R«   RÓ   RÔ   Rg   RÛ   Rã   Rä   Ró   Rú   Rþ   R  R  R  R  R  R  R  R  R  R  R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   (   s¶   								!																								
					.	4			
	
							"										
	t   mutable_recc           B   s   e  Z e Z d  „  Z RS(   c         C   s   | |  j  | <d  S(   N(   R   (   R   R    R*   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __setitem__N  s    (   R!  R"  R$   R   R&  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR%  K  s   t	   row_mixinc           B   s   e  Z d  „  Z RS(   c         C   s)   t  t |  ƒ j | d t | ƒ f ƒ d  S(   Ni   (   t   superR'  R   R   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   S  s    (   R!  R"  R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR'  Q  s   t   rowc           B   s   e  Z RS(    (   R!  R"  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR)  V  s    t   mutable_rowc           B   s   e  Z RS(    (   R!  R"  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR*  W  s    t	   col_mixinc           B   s&   e  Z d  „  Z d „  Z e e ƒ Z RS(   c         C   s)   t  t |  ƒ j | t | ƒ d f ƒ d  S(   Ni   (   R(  R+  R   R   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   [  s    c         C   s5   t  j } |  g  t | ƒ D] } | | | ƒ ^ q ƒ S(   N(   R   t   uniformR   (   t   clsR   R   R   R,  R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   ^  s    	(   R!  R"  R   R   t   classmethod(    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR+  Y  s   		R%   c           B   s   e  Z d  Z RS(   s8  
    Class type built on top of rec and col_mixin, allows for single-dimensional
    vectors.  This is especially convenient when working with 3D coordinate
    data in Python.

    Examples
    --------
    >>> from scitbx.matrix import col
    >>> vector = col([3, 0, 4])
    >>> print abs(vector)
    5.0
    (   R!  R"  R#  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR%   c  s   t   mutable_colc           B   s   e  Z RS(    (   R!  R"  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR/  r  s    R)   c           B   s   e  Z d  „  Z RS(   c         C   sS   t  | ƒ } t | d d ƒ } | | | k s6 t ‚ t j |  | | | f ƒ d  S(   Ng      à?(   R   RE   R   R   R   (   R   R   t   lR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   v  s    (   R!  R"  R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR)   t  s   t   diagc           B   s   e  Z d  „  Z RS(   c         C   sy   t  | ƒ } g  t | | ƒ D] } d ^ q } x* t | ƒ D] } | | | | | d <q< Wt j |  | | | f ƒ d  S(   Ni    i   (   R   R   R   R   (   R   t
   diag_elemsR   R    R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   ~  s
    #(   R!  R"  R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR1  |  s   Rd   c           B   s   e  Z d  „  Z RS(   c         C   s   t  t |  ƒ j d | ƒ d  S(   Ni   (   i   (   R(  Rd   R   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   ‡  s    (   R!  R"  R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRd   …  s   t	   inversionc           B   s   e  Z d  „  Z RS(   c         C   s   t  t |  ƒ j d | ƒ d  S(   Niÿÿÿÿ(   iÿÿÿÿ(   R(  R3  R   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   Œ  s    (   R!  R"  R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR3  Š  s   t   symc           B   s   e  Z d d d  „ Z RS(   c         C   sŒ   | d  k s t d ƒ ‚ t | ƒ d k s0 t ‚ | } t j |  | d | d | d | d | d | d | d | d | d f	 d	 ƒ d  S(
   Ns   Not implemented.i   i    i   i   i   i   i   (   i   i   (   R   R   R   R   R   (   R   R   t   sym_mat3RÕ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   ‘  s    N(   R!  R"  R   R   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR4  �  s   c         C   sp   | r t  t } } n t t } } t |  t ƒ rC | d d |  ƒ S|  \ } } | d d | | d | | f ƒ S(   NR   i    R   (   i    (   i    (   R/  R%  R%   R   R   RE   (   R   t   mutablet   col_tt   rec_tRð   Rñ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   zeros™  s    c         C   s   t  |  d t ƒS(   NR6  (   R9  R  (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   mutable_zeros£  s    c         C   s7   t  |  ƒ } | j ƒ  } x | D] } | | 7} q W| S(   s+    The sum of the given sequence of matrices (   t   itert   next(   t   iterablet   sequenceR.   RÕ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRY   ¦  s
    c      
   C   s7   |  \ } } } t  d | | | d | | | d f	 ƒ S(   sÏ   Matrix associated with vector cross product:
  a.cross(b) is equivalent to cross_product_matrix(a) * b
Useful for simplification of equations. Used frequently in
robotics and classical mechanics literature.
i    (   R)   (   t   .0t   v0t   v1t   v2(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR³   ®  s
    

c         C   s¶   t  |  ƒ t  | ƒ k s t ‚ d  } x{ t |  | ƒ D]j \ } } | d k r_ | d k rž d  Sq4 | d k ro d  S| | } | d  k rŽ | } q4 | | k r4 d  Sq4 W| d  k r² d S| S(   Ni    (   R   R   R   t   zip(   t   vector_1t   vector_2R.   t   e1t   e2RÕ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt&   linearly_dependent_pair_scaling_factorº  s       
	c         C   s%  t  |  ƒ d k s t ‚ |  d |  d } |  d |  d } |  d |  d } | j | ƒ } | j ƒ  } | j | ƒ } | j ƒ  } | d k sœ | d k r  d  St d t d | j | ƒ | | d ƒ ƒ }	 t j	 |	 ƒ }
 | j | j | ƒ ƒ d k  r|
 d	 9}
 n  | r!|
 d
 t j
 9}
 n  |
 S(   Ni   i    i   i   i   g      ð¿g      ð?g      à?iÿÿÿÿi´   (   R   R   Rc   R$  R   RV   RU   Rb   R   R¤   Rs   (   t   sitesRw   t   d_01t   d_21t   d_23t   n_0121t   n_0121_normt   n_2123t   n_2123_normRÒ   R.   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   _dihedral_angleË  s$    ! c         C   sK   t  ƒ  } | d  k r( t d |  d | ƒ Sd d l m } | d |  d | ƒ S(   NRI  Rw   iÿÿÿÿ(   t   dihedral_angle(   R   R   RQ  t   scitbx.mathRR  (   RI  Rw   R   RR  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRR  Þ  s
    	c         C   sM   t  |  ƒ } t  | ƒ | } | j d | d | ƒ } | t  | ƒ | | j S(   sÆ   About 6 times slower than the implementation below.
     Interestingly, a C++ implementation is still 2 times slower than
     the implementation below, due to the tuple-vec3 conversion overhead.
  R«   Rw   (   R%   R±   R   (   t   axis_point_1t   axis_point_2R»   R«   Rw   t   pivotR§   RP   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   __rotate_point_around_axiså  s    
c         C   sF   | |  j  | |  ƒ } | \ } } } | j |  ƒ } | | | | f S(   N(   Rc   Rb   (   t   point_1t   point_2t   point_3R   R   R   R­   R”   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   plane_equationô  s    c   
   	   C   sÅ   t  | ƒ d k s t ‚ t d t | d ƒ d t | d ƒ d t | d ƒ ƒ \ } } } } |  \ } } } t j | d | d | d ƒ }	 |	 d k rŸ d St | | | | | | | ƒ |	 S(	   sÃ   
  http://mathworld.wolfram.com/Point-PlaneDistance.html
  Given three points describing a plane and a fourth point outside the plane,
  return the distance from the fourth point to the plane.
  i   RX  i    RY  i   RZ  i   N(   R   R   R[  R%   R   R^   R   RM   (
   t   xyzt   pointsR   R   R­   R”   R*   R•   R–   t   den(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   distance_from_planeû  s    # c         C   sZ   t  |  ƒ d k s t ‚ x; |  d D]/ } t d | d |  d  ƒ } | | k r# t Sq# Wt S(   Ni   R\  R]  (   R   R   R_  R   R  (   R]  t	   toleranceR»   R”   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   all_in_plane  s     c   +      C   sü  | r | t  j d 9} n  |  \ } } } | \ } }	 }
 | \ } } } | | |	 | |
 | } } } | d } | d } | d } | | | } | d } t  j | ƒ } t  j | ƒ | } d | | } | | | } | | | } | | | } | | | | | | } } } | | | } | | | }  | | | }! | | | }" | | | }# | | | }$ | | | }% | | | }& | | | }' | | | |  | |! | }( | |" | |# | |$ | }) | |% | |& | |' | }* |( |) |* f S(   s  
  Rotate a 3D coordinate about a given arbitrary axis by the specified angle.

  :param axis_point_1: tuple representing 3D coordinate at one end of the axis
  :param axis_point_2: tuple representing 3D coordinate at other end of the axis
  :param point: tuple representing 3D coordinate of starting point to rotate
  :param angle: rotation angle (defaults to radians)
  :param deg: Python boolean (default=False), specifies whether the angle is
    in degrees
  :returns: Python tuple (len=3) of rotated point
  g     €f@i   g      à?i   (   R   Rs   Ru   Rª   (+   RT  RU  R»   R«   Rw   t   xat   yat   zat   xbt   ybt   zbR*   R•   R–   t   xlt   ylt   zlt   xlsqt   ylsqt   zlsqt   dlsqt   dlt   cat   dsat   ocat   xlylot   xlzlot   ylzlot   xmat   ymat   zmat   m1t   m2t   m3t   m4t   m5t   m6t   m7t   m8t   m9t   x_newt   y_newt   z_new(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   rotate_point_around_axis  s>      



 Rº   c           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   sÅ  
  Object for representing associated rotation and translation matrices.  These
  will usually be a 3x3 matrix and a 1x3 matrix, internally represented by
  objects of type :py:class:`scitbx.matrix.sqr` and
  :py:class:`scitbx.matrix.col`.  Transformations may be applied to
  :py:mod:`scitbx.array_family.flex` arrays using the overloaded
  multiplication operator.

  Examples
  --------
  >>> from scitbx.matrix import rt
  >>> symop = rt((-1,0,0,0,1,0,0,0,-1), (0,0.5,0)) # P21 symop
  >>> from scitbx.array_family import flex
  >>> sites_frac = flex.vec3_double([(0.1,0.1,0.1), (0.1,0.2,0.3)])
  >>> sites_symm = symop * sites_frac
  >>> print list(sites_symm)
  [(-0.1, 0.6, -0.1), (-0.1, 0.7, -0.3)]
  c         C   s¦   t  | d d ƒ r, t | d j ƒ |  _ n t | d ƒ |  _ t  | d d ƒ rk t | d j ƒ |  _ n t | d ƒ |  _ |  j j ƒ  |  j j ƒ  k s¢ t ‚ d  S(   Ni    R   i   (   R#   R)   R   RP   R%   t   tR   R   (   R   t	   tuple_r_t(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR   V  s    c         C   sQ   t  | t ƒ r3 t |  j | j |  j | j f ƒ St |  j |  j | f ƒ Sd  S(   N(   R   Rº   RP   R†  (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR!   a  s    $c         C   sQ   t  | t ƒ r3 t |  j | j |  j | j f ƒ St |  j |  j | f ƒ Sd  S(   N(   R   Rº   RP   R†  (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR"   g  s    $c         C   sä  t  | t ƒ r: t |  j | j |  j | j |  j f ƒ St  | t ƒ rÄ | j |  j j k rx t |  j | |  j f ƒ S| j |  j j k rŸ |  j | |  j St d t |  ƒ t | ƒ f ƒ ‚ n  t |  j j	 ƒ } t  | t
 t f ƒ rpt | ƒ | k r|  j t | ƒ |  j St | ƒ | | k rKt |  j t | ƒ |  j f ƒ St d t |  ƒ t | ƒ f ƒ ‚ n  | d k r¾t ƒ  } | d  k	 r¾t  | | j ƒ r¾|  j j	 | |  j j	 Sn  t d t |  ƒ t | ƒ f ƒ ‚ d  S(   Ns@   cannot multiply %s by %s: incompatible number of rows or columnss9   cannot multiply %s by %s: incompatible number of elementsi   s   cannot multiply %s by %s(   R   Rº   RP   R†  R   R   t
   ValueErrort   reprR   R   R$   R   R%   R)   R   R   t   vec3_doublet	   TypeError(   R   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyR2   m  s0    + 	c         C   s'   |  j  j ƒ  } t | | |  j f ƒ S(   N(   RP   Rã   Rº   R†  (   R   t   r_inv(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRã   ‡  s    c         C   s'   |  j  j ƒ  } t | | |  j f ƒ S(   N(   RP   Rä   Rº   R†  (   R   RŒ  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   inverse_assuming_orthogonal_r‹  s    c         C   s"   t  |  j j ƒ  |  j j ƒ  f ƒ S(   N(   Rº   RP   RB   R†  (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRB   �  s    c         C   sÆ   |  j  j ƒ  |  j  j ƒ  k s$ t ‚ |  j  j ƒ  } g  } xN t | ƒ D]@ } | j |  j  j | | | d | !ƒ | j |  j | ƒ qF W| j d g | ƒ | j d ƒ t	 | | d | d f ƒ S(   Ni   i    (
   RP   R   R   R   R   t   extendR   R(   R†  R   (   R   R   R.   t   i_row(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   as_augmented_matrix’  s    $&(   R!  R"  R#  R   R!   R"   R2   Rã   R�  RB   R�  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRº   B  s   							c         C   s   g  |  D] } t  | ƒ ^ q S(   N(   R%   (   t   seqt   elem(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   col_list�  s    c         C   s   g  |  D] } t  | ƒ ^ q S(   N(   R)  (   R‘  R’  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   row_listž  s    c         C   sU  d } t  |  ƒ | | k s" t ‚ d g | } d g | d } x¡ t | ƒ D]“ } d } xQ t | ƒ D]C } |  | | | }	 |	 d k  r” |	 }	 n  |	 | k rf |	 } qf qf W| d k rÒ | rÎ t | ƒ ‚ n  d  Sd | | | <qM Wd }
 xdt | ƒ D]V} xu t | ƒ D]g } |  | | | } x: t | ƒ D], } | |  | | | |  | | | 8} q/W| |  | | | <q
Wd } x· t | | ƒ D]¦ } |  | | | } x: t | ƒ D], } | |  | | | |  | | | 8} q°W| |  | | | <| d k  r| } n  | | | }	 |	 | k r‹|	 } | }
 q‹q‹W| |
 k r³xN t | ƒ D]@ } |
 | | | | | } } |  | |  | |  | <|  | <qNW| | c d 7<| | | |
 <n  |
 | | <|  | | | d k rî| rêt | ƒ ‚ n  d  S| d | k  r÷ d |  | | | }	 x6 t | d | ƒ D] } |  | | | c |	 9<q(Wq÷ q÷ W| S(   Ns*   lu_decomposition_in_place: singular matrixg        i    i   g      ð?(   R   R   R   R&   R   (   R   R   t   raise_if_singulart   is_singular_messaget   vvt   pivot_indicesR    t   bigR1   t   dumt   imaxRY   R/   R5   t   jk(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   lu_decomposition_in_place   sh     
  * * 
!
#c   
      C   se  t  |  ƒ | | k s t ‚ | } x» t | ƒ D]­ } | | } | | k rd | r` t d ƒ ‚ n  t S| | } | | | | <| | k rÃ xG t | | ƒ D]$ }	 | |  | | |	 | |	 8} q˜ Wn | rÒ | } n  | | | <q/ Wx~ t | d d d ƒ D]f } | | } x9 t | d | ƒ D]$ }	 | |  | | |	 | |	 8} qW| |  | | | | | <q÷ Wt S(   Ns3   lu_back_substitution: pivot_indices[i] out of rangei   iÿÿÿÿ(   R   R   R   R&   R   R  (
   R   R   R˜  R   R•  t   iiR    t   pivot_indices_iRY   R1   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   lu_back_substitutionÑ  s.    

 %	
 "c      
   C   sî   |  j  ƒ  s t ‚ |  j d } | d k r5 t g  ƒ St |  j ƒ } t d | d | ƒ } d g | | } xw t | ƒ D]i } d g | } d | | <t d | d | d | d | ƒ x* t | ƒ D] } | | | | | | <qÀ Wqw Wt | ƒ S(   Ni    R   R   g        g      ð?R˜  R   (	   RÔ   R   R   R)   R$   R   R�  R   R   (   RÕ   R   R   R˜  RP   R1   R   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRâ   è  s     

c         C   s¸   |  j  ƒ  s t ‚ |  j d } | d k r/ d St |  j ƒ } t d | d | d t ƒ } | d  k ri d Sd } x* t | ƒ D] } | | | | | 9} q| W| d d r´ | } n  | S(   Ni    i   R   R   R•  iÿÿÿÿi   (	   RÔ   R   R   R$   R   R�  R   R   R   (   RÕ   R   R   R˜  R.   R    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyRÚ   ÷  s     
c    D         sÚ*  y d d l  m }  Wn+ t k
 rA d GHd  }  d „  ‰  t } n X|  j ‰  |  j } t d d ƒ } | j d(k sx t	 ‚ | j
 d)k s� t	 ‚ t d d ƒ } | j d*k s± t	 ‚ | j
 d+k sÆ t	 ‚ t d d ƒ } | j d,k sê t	 ‚ | j
 d-k sÿ t	 ‚ t d d.ƒ } | j d/k s#t	 ‚ | j
 d0k s8t	 ‚ t d d1ƒ } | j d2k s\t	 ‚ | j
 d3k sqt	 ‚ t d d4ƒ } | j
 d5k s•t	 ‚ t d6ƒ } d | d <t | ƒ d7k sÃt	 ‚ xV d8d9d:g D]E } t d;| ƒ } | j ƒ  d
 k s t	 ‚ | j ƒ  d k sÓt	 ‚ qÓWt t d d ƒ d<ƒ } t | ƒ d k sLt	 ‚ | d d k sbt	 ‚ | d	 j ƒ  d k s~t	 ‚ d | j ƒ  d k sšt	 ‚ x@ d=d d g g D], } | | j
 | t d>ƒ j
 k s­t	 ‚ q­Wt t d d ƒ d?ƒ } | j | ƒ d k st	 ‚ t d@ƒ j ƒ  d k s.t	 ‚ | | } t | dAf ƒ } | j ƒ  d k sct	 ‚ | j j ƒ  d k s~t	 ‚ | j j ƒ  d k s™t	 ‚ | t dBƒ } | j j ƒ  d k sÄt	 ‚ | j j ƒ  d k sßt	 ‚ | t dCƒ }	 |	 j j ƒ  d k s
t	 ‚ |	 j j ƒ  d k s%t	 ‚ | |	 } | j j ƒ  d k sJt	 ‚ | j j ƒ  d k set	 ‚ |	 | }	 |	 j j ƒ  d k sŠt	 ‚ |	 j j ƒ  d k s¥t	 ‚ |	 j ƒ  } | j j ƒ  d k sÌt	 ‚ | j j ƒ  d  k sçt	 ‚ |	 j ƒ  } | j ƒ  d! d" k st	 ‚ | j d# dDƒ j ƒ  d$ k s3t	 ‚ | j d# dEƒ j ƒ  d% k sWt	 ‚ | j d# dFƒ j ƒ  d k s{t	 ‚ | j d# dGƒ j ƒ  | j ƒ  k s¥t	 ‚ | j d# dHd& dIƒ j ƒ  d' k sÏt	 ‚ | j d( dJd# dKd& dLƒ j ƒ  d) k sÿt	 ‚ | j d( dMd# dNd& dOƒ j ƒ  d* k s/t	 ‚ x  t d	 ƒ D]’ }
 x‰ t d	 ƒ D]{ } t g  |
 d f ƒ } t g  d | f ƒ } | | } | j
 t d g |
 | ƒ k s¯t	 ‚ | j |
 | f k sOt	 ‚ qOWq<Wt d d+ ƒ }
 t d d ƒ } t d, d- ƒ } t d d ƒ } t |
 | f ƒ t | | f ƒ } | j j ƒ  d. k sKt	 ‚ | j j ƒ  d/ k sft	 ‚ | j j ƒ  } | j ƒ  d0 k s�t	 ‚ | j ƒ  } | j ƒ  d. k s±t	 ‚ | j j ƒ  } | j ƒ  d1 k sØt	 ‚ | j ƒ  } | j ƒ  d/ k süt	 ‚ t d g ƒ j ƒ  d k st	 ‚ t d	 d d2 d3 g ƒ j ƒ  d4 k sGt	 ‚ t d5 dPd dQƒ } | j ƒ  } | j dRk s}t	 ‚ t d g ƒ } | j ƒ  } | j ƒ  d6 k s°t	 ‚ t dSƒ } | j ƒ  } | j dTk sÝt	 ‚ ˆ  | dUdVdWdXf ƒ sþt	 ‚ t dYƒ } | j ƒ  d k s"	t	 ‚ | j ƒ  } | j ƒ  d> k sF	t	 ‚ | | j ƒ  d? k sb	t	 ‚ | | j ƒ  d? k s~	t	 ‚ t | dZf ƒ } | j ƒ  } | j j ƒ  | j ƒ  k s½	t	 ‚ | | j j ƒ  d? k sÜ	t	 ‚ | | j j ƒ  d? k sû	t	 ‚ | j j ƒ  j d@ dA ƒ dB k s"
t	 ‚ | | j j ƒ  dC k sA
t	 ‚ | | j j ƒ  dC k s`
t	 ‚ t t dD dE dF dG dH dI dJ dK dL g	 ƒ t d[ƒ f ƒ } ˆ  | j | j j ƒ  d\ƒ s¾
t	 ‚ | j ƒ  } | j  ƒ  } ˆ  | j | j ƒ sñ
t	 ‚ ˆ  | j | j ƒ st	 ‚ t d5 d]d d^ƒ } t d5 d_d d`ƒ } | | } | j | j | k s\t	 ‚ | j | j k stt	 ‚ | | } | | j | | j k sžt	 ‚ | | j
 } | j | j | k sÇt	 ‚ | j | j k sßt	 ‚ | | j
 } | | j | | j k st	 ‚ y | t d g ƒ WnI t! k
 rl} t" | ƒ j# dQ ƒ sNt	 ‚ t" | ƒ j$ dR ƒ sst	 ‚ n X| ‚ y | d g WnI t! k
 rÍ} t" | ƒ j# dQ ƒ s¯t	 ‚ t" | ƒ j$ dS ƒ sÔt	 ‚ n X| ‚ t% ƒ  } | d  k rñdT GHnL | | j& dadbg ƒ } t' | | j& ƒ s"t	 ‚ ˆ  | dcddg ƒ s=t	 ‚ y d d[ l( m) } Wn t k
 rdn7 Xˆ  t | j* d	 d ƒ d d\ f ƒ j ƒ  deƒ s›t	 ‚ ˆ  t dfƒ j+ ƒ  j
 dgdhdif ƒ sÈt	 ‚ t djƒ j, ƒ  j
 dkk sét	 ‚ ˆ  t dlƒ j- ƒ  dmƒ s
t	 ‚ t dnƒ j. ƒ  d	 k s(t	 ‚ t doƒ j/ ƒ  d k sFt	 ‚ t dpƒ j0 ƒ  d k sdt	 ‚ t dqƒ j1 ƒ  d k s‚t	 ‚ t drƒ j2 ƒ  de k s t	 ‚ t dsƒ j3 ƒ  duk s¾t	 ‚ t dvƒ j4 ƒ  d3 k sÜt	 ‚ t5 dwƒ j ƒ  df k sút	 ‚ ˆ  t dxƒ j6 t dyƒ ƒ d dg ƒ s(t	 ‚ ˆ  t dzƒ j7 t d{ƒ ƒ dh ƒ sRt	 ‚ ˆ  t d|ƒ j7 t d}ƒ di t8 ƒdj ƒ s‚t	 ‚ ˆ  t d~ƒ j7 t dƒ di t8 ƒd€ƒ s²t	 ‚ ˆ  t d�ƒ j9 t d‚ƒ di t8 ƒdj ƒ sât	 ‚ ˆ  t dƒƒ j9 t d„ƒ di t8 ƒdj ƒ st	 ‚ t d d d d d d d d d d d d d; d d	 d g ƒ } | j ƒ  }  ˆ  |  dl ƒ sot	 ‚ t dm dn do dp dq dr ds dt du g	 ƒ } | j dv dw dx dy dz t8 d{ d| ƒ d} k sÆt	 ‚ t g  ƒ } | j ƒ  d
 k sêt	 ‚ | j dz t8 ƒ d
 k st	 ‚ t d g ƒ } | j ƒ  d~ k s/t	 ‚ | j dz t8 d{ d ƒ d€ k sSt	 ‚ t t d d…ƒ d†ƒ } t t d d‡ƒ dˆƒ } ˆ  | j: | ƒ | j ƒ  | ƒ s«t	 ‚ ˆ  | j: | ƒ | j ƒ  | ƒ sÓt	 ‚ ˆ  | j: ƒ  | j ƒ  | ƒ søt	 ‚ ˆ  | j: | ƒ | j ƒ  | ƒ s t	 ‚ ˆ  | j: ƒ  | j ƒ  | ƒ sEt	 ‚ t d d d	 g ƒ } t; d+ d- g ƒ } | j< | ƒ j= ƒ  d+ d- g d- d� g d‚ dƒ g g k s¨t	 ‚ | j< ƒ  j= ƒ  d d d	 g d d d g d	 d d7 g g k sêt	 ‚ t> d„ t d ƒ ƒ } | j= ƒ  d d	 d g d	 d d g d d d g g k s;t	 ‚ ˆ  | j? ƒ  t d ƒ ƒ s\t	 ‚ | j@ ƒ  d‰k stt	 ‚ | d  k	 rÅ| jA ƒ  }	 |	 jB ƒ  | j k s§t	 ‚ ˆ  |	 | d… d† ƒsÅt	 ‚ n  xt d	 ƒ D]
}! t g  d d |! f ƒ}" tC |" ƒ d‡ |! k st	 ‚ t" |" ƒ d
 k s$t	 ‚ |" j ƒ  d k s<t	 ‚ |" j dz t8 ƒ d k sZt	 ‚ t g  d |! d f ƒ}" tC |" ƒ dˆ |! k sŽt	 ‚ t" |" ƒ d
 k s¦t	 ‚ |" j ƒ  d k s¾t	 ‚ |" j dz t8 ƒ d k sÒt	 ‚ qÒWt d g d dŠƒ}" tC |" ƒ d‰ k st	 ‚ t" |" ƒ dŠ k s%t	 ‚ |" j ƒ  d‹ k s=t	 ‚ |" j dz t8 ƒ d‹ k s[t	 ‚ t d‹ƒ }" tC |" ƒ dŒ k st	 ‚ t" |" ƒ d� k s—t	 ‚ |" j ƒ  dŽ k s¯t	 ‚ |" j dz t8 ƒ d� k sÍt	 ‚ t; dŒƒ }" tC |" ƒ d� k sñt	 ‚ t" |" ƒ d‘ k s	t	 ‚ |" j ƒ  d’ k s!t	 ‚ |" j dz t8 ƒ d’ k s?t	 ‚ t d�dŽƒ }" tC |" ƒ d“ k sft	 ‚ t" |" ƒ d” k s~t	 ‚ |" j ƒ  d• k s–t	 ‚ |" j dv d– dz t8 d{ d— ƒ d˜ k sÀt	 ‚ d�} d�} t | | ƒ } t | | ƒ } | | k süt	 ‚ | d  k	 rB| jD | ƒ } | jE | jF | ƒ ƒ | | k sBt	 ‚ n  tG d ƒ } xs t d ƒ D]e }# x\ t d ƒ D]N }$ |# |$ k r•| |# |$ ƒ d k sn|# |$ k r¶| |# |$ ƒ d k snt	 ‚ qnWq[WtH d ƒ } xs t d ƒ D]e }# x\ t d ƒ D]N }$ |# |$ k r| |# |$ ƒ d k sð|# |$ k r8| |# |$ ƒ d k sðt	 ‚ qðWqÝWt d’d”d–f ƒ }" |" d8 jI ƒ  d8 t d—d˜d™f ƒ k sŠt	 ‚ xJ dšd›dœd�g D]6 }" t |" ƒ }" ˆ  |" j |" jJ ƒ  ƒ d ƒ s�t	 ‚ q�Wt džƒ }" t dŸƒ } d tK jL d	 }% |" jM | |% ƒ }& | j+ ƒ  } |" | j |" ƒ | }' |& | j |& ƒ | }( ˆ  |' j7 |( ƒ |% ƒ sjt	 ‚ t d ƒ }" |" jM dœ t d¡ƒ d� dž di t8 ƒ }& ˆ  |& d¢ƒ s¯t	 ‚ ˆ  |" j7 |& di t8 ƒdž ƒ sÓt	 ‚ t d£ƒ } t d¤ƒ }" |" jM dœ | d� d¨ di t8 ƒ }& ˆ  tN |" ƒ d© ƒ s$t	 ‚ ˆ  tN |& ƒ d© ƒ s?t	 ‚ ˆ  |" j7 |& di t8 ƒdª ƒ sct	 ‚ ˆ  |& d¥ƒ sxt	 ‚ | jO d� d¨ di t8 ƒ }) ˆ  |) d¦ƒ s¥t	 ‚ |) jP ƒ  } ˆ  | |" |& ƒ sÊt	 ‚ ˆ  | jQ d� d¨ di t8 ƒ | ƒ sñt	 ‚ t d§ƒ }* |* jR dµ t d¨ƒ d� d¹ di t8 ƒ }+ ˆ  |+ t d©ƒ dªƒ s@t	 ‚ t d«ƒ jS ƒ  j
 d¬k sat	 ‚ t d­ƒ jS ƒ  j
 d®k s‚t	 ‚ ˆ  t d¯ƒ j+ ƒ  jS ƒ  d°ƒ s©t	 ‚ t; d±ƒ } t; d²ƒ } | jT | ƒ t; d³ƒ k sât	 ‚ t d´ƒ } t dµƒ } ˆ  | jT | ƒ tU | ƒ | ƒ s"t	 ‚ tV }	 ˆ  |	 dÎ d d d	 g dÏ d	 d d7 g ƒ d	 ƒ s^t	 ‚ ˆ  |	 dÎ d	 d d7 g dÏ d d d	 g ƒ d¶ƒ s”t	 ‚ |	 dÎ t d d d g ƒ dÏ d d d g ƒ d  k sÍt	 ‚ |	 dÎ d d d g dÏ t d d d g ƒ ƒ d  k st	 ‚ |	 dÎ t d d d g ƒ dÏ t d d d g ƒ ƒ d k sEt	 ‚ tW dÐ d·d¸g ƒ } x# | D] } t' | t ƒ sat	 ‚ qaWˆ  | d¹dºg ƒ s›t	 ‚ tX dÐ d»d¼g ƒ } x# | D] } t' | t; ƒ s·t	 ‚ q·Wˆ  | d½d¾g ƒ sñt	 ‚ dÑ „  }	 t d5 g  d d d g ƒ } |	 | ƒ d
 k s-t	 ‚ t d5 g  d d d g ƒ } |	 | ƒ d
 k s`t	 ‚ t d5 g  d d d g ƒ } |	 | ƒ d
 k s“t	 ‚ xÈ t g  ƒ t; g  ƒ g D]® } t d5 | g d d d g ƒ } |	 | ƒ d
 k sèt	 ‚ t d5 | | g d d d g ƒ } |	 | ƒ d
 k s!t	 ‚ t d5 | | g d d d g ƒ } |	 | ƒ d
 k s¬t	 ‚ q¬Wx\ t d g ƒ t; d g ƒ g D]< } t d5 | g d d d g ƒ } |	 | ƒ d~ k s}t	 ‚ q}Wt d5 t d d g ƒ t d	 d g ƒ g d d d g ƒ } |	 | ƒ dÒ k s t	 ‚ t d5 t d d g ƒ t d	 d g ƒ g d d d g ƒ } |	 | ƒ dÓ k s_ t	 ‚ t d5 t d d d	 d g ƒ t d d d d8 g ƒ g d d d g ƒ } |	 | ƒ dÔ k s¼ t	 ‚ t d5 t d d d	 d g ƒ t d d d d8 g ƒ g d d d g ƒ } |	 | ƒ dÕ k s!t	 ‚ t d5 t d d d	 d d d g d d¿ƒt d d8 g d dÀƒg d d d g ƒ } |	 | ƒ dÖ k s‚!t	 ‚ t d5 t d d d	 d d d g d dÁƒt d d8 d7 g d dÂƒg d d d g ƒ } |	 | ƒ d× k sî!t	 ‚ t d5 t d, de dØ dÙ d3 d< dÚ dÛ dÜ g	 ƒ t dÝ dÞ dß d: d dà dá dâ dã g	 ƒ t dä då dæ dç dè dé d¨ dê dë g	 ƒ t dì dí dî dï dj dð dñ dò dó g	 ƒ g d d d g ƒ } | jY ƒ  j dz t8 ƒ dô k s½"t	 ‚ t d5 t d d d	 d d d g d dÃƒt d d8 d7 d+ d, de dØ dÙ g d dÄƒt d3 d< dÚ dÛ dÜ d- dÝ dÞ dß g	 d dÅƒt d: d dà dá dâ dã d‚ dä då dæ dç dè g d dÆƒt dé d¨ dê g d dÇƒt dë d� dì dí g d dÈƒg d d	 d g ƒ } | jY ƒ  j dz t8 ƒ dõ k sÔ#t	 ‚ ‡  f dö †  }, |, t g  ƒ d ƒ |, t d g ƒ d ƒ |, t d g ƒ d ƒ |, t d g d ƒ d ƒ |, t d d d d g ƒ d+ ƒ |, t d g d7 ƒ d ƒ |, t dD dE dF dG dH dI dJ dK dL g	 ƒ d ƒ |, t d g d< ƒ d ƒ |, t dÉdÊdËdÌdÍdÎdÏdÐdÑdÒdÓdÔd d d d g ƒ dÕƒ tG d d	 ƒ } | jZ ƒ  s!%t	 ‚ | j[ ƒ  }- ˆ  |- dÖƒ sB%t	 ‚ t d d×d dØd dÙd f ƒ }) t dÚdÛdÜdÝdÞdßdàdádâf	 ƒ } ˆ  |) jP ƒ  | ƒ s¨%t	 ‚ | j[ ƒ  }- ˆ  |- |) ƒ sÉ%t	 ‚ xPt d+ ƒ D]B}. t j\ d d dü d dý d ƒ j+ ƒ  }/ t j\ d d dü d dý d ƒ j+ ƒ  }0 |/ jP ƒ  }1 |0 jP ƒ  }2 |/ j] |0 ƒ }3 |3 jP ƒ  }4 ˆ  |4 |1 |2 ƒ sp&t	 ‚ |0 j] |/ ƒ }5 |5 jP ƒ  }6 ˆ  |6 |2 |1 ƒ s¤&t	 ‚ xq |/ |1 f |0 |2 f |3 |4 f |5 |6 f g D]E \ }) } | jZ ƒ  sí&t	 ‚ | j[ ƒ  }- ˆ  |- jP ƒ  | ƒ sÏ&t	 ‚ qÏ&WqÖ%Wt dãƒ } ˆ  | j^ ƒ  dƒ sC't	 ‚ | jZ ƒ  sV't	 ‚ t däƒ }7 ˆ  |7 d t dåƒ ƒ s�'t	 ‚ t dæƒ }8 t" |8 j ƒ  j
 ƒ dk s®'t	 ‚ | d  k	 rä't" |8 j_ ƒ  j ƒ  j
 ƒ dk sä't	 ‚ n  t` dtW dçg d ƒ di ta ƒ d  k s(t	 ‚ tb dtW dèg d ƒ ƒ d  k s:(t	 ‚ tW dédêdëdìg ƒ }9 d}: ˆ  t` d|9 di t8 ƒ |: ƒ s|(t	 ‚ ˆ  tb d|9 di t8 ƒ |: ƒ s (t	 ‚ |  d  k	 r-)d dl  mc }; xn ta t8 g D]] }< |; d|9 d d|9 d dµ |9 d d� dØ di t8 ƒ jd }= ˆ  te |= �  tf |= �  ƒ sÉ(t	 ‚ qÉ(Wn  t díƒ }> t dîƒ }? t dïƒ }@ tg d |> d!|? d"|@ ƒ \ } } } } |@ |? |> d d }A ˆ  | |A d | |A d | |A d | d ƒ sÇ)t	 ‚ dð}B ˆ  d#th d$dñd%dòdódôg ƒ ƒ sú)t	 ‚ th d$dõd%död÷døg ƒ } | d  k s**t	 ‚ th d$dùd%dúdûdüg ƒ } ˆ  | d ƒ s]*t	 ‚ ti ƒ  }C |C d  k rz*d&GHnW t d5 t d ƒ d dýƒ } | jj ƒ  } | jk ƒ  d d d g d	 d d g g k sÑ*t	 ‚ d'GHd  S(þ  Niÿÿÿÿ(   t
   test_utilss0   INFO: libtbx not available: some tests disabled.c         S   s   t  S(   N(   R  (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   approx_equal  s    R   i    i   i   i   s   {}s   []i   i   s   {{3, 6}, {9, 12}, {15, 18}}iþÿÿÿs    {{-2, -4}, {-6, -8}, {-10, -12}}iýÿÿÿi[   i   i   s   {{-1, -2}, {-3, -4}, {-5, -6}}s)   {{9, 12, 15}, {19, 26, 33}, {29, 40, 51}}s   {{1}, {2}, {3}}i   s   {{4}, {7}, {9}}s   {{3}, {5}, {6}}s+   {{18, 24, 30}, {38, 52, 66}, {58, 80, 102}}s   {{7}, {12}, {15}}s2   {{-9, -12, -15}, {-19, -26, -33}, {-29, -40, -51}}s   {{-4}, {-7}, {-9}}sD   {{-9.0, -12.0, -15.0}, {-19.0, -26.0, -33.0}, {-29.0, -40.0, -51.0}}s   {{-4.0}, {-7.0}, {-9.0}}s)   {{-9, -12, -15, -4}, {-19, -26, -33, -7},s#    {-29, -40, -51, -9}, {0, 0, 0, 1}}R
  s   {{-9}}s   {{-9, -12}, {-19, -26}}R  s   {{-9, -15}, {-29, -51}}R  s   {{-26, -7}, {0, 1}}s   {{-19, -26, -33}, {0, 0, 0}}i
   i   i   s1   {{90, 96, 102}, {216, 231, 246}, {342, 366, 390}}s   {{33}, {79}, {125}}s1   {{90, 216, 342}, {96, 231, 366}, {102, 246, 390}}s   {{33, 79, 125}}iùÿÿÿi   i;   R   s   {{0.25}}i	   i   iûÿÿÿi   iüÿÿÿi   i÷ÿÿÿs<   {{7.0, -1.0, -3.0}, {12.0, -3.0, -5.0}, {33.0, -7.0, -14.0}}s3   {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}s   -0.0s   0.0s   {{0.0}, {-3.0}, {-5.0}}s   {{0.0}, {0.0}, {0.0}}g¢ó�=¾b¿?g¡wÖ;æ?gîLŽh:®æ¿g¯3i†ÇÊ?g{¶˜ëæ¿gb¤˜¬;Nå¿glCD:€ï¿g~/2Yl±¿gÍ-Ç´Ï×Í¿gÃõ(\�ÂÕ?gö(\�Âõè¿g…ëQ¸…Û?iúÿÿÿs   cannot multiply s(   : incompatible number of rows or columnss!   : incompatible number of elementss-   INFO: scitbx.array_family.flex not available.i¹  i'  i•  iM  i"  i÷  (   RC   g      ø?g      è?g      @g333333û¿gffffff@g333333@g333333Ó?gš™™™™™É¿gš™™™™™Ù?i   s!   {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}}g      à?gRDTû!é?Rw   i-   iZ   iµÿÿÿgŒÛh o�î¿g¥,CëâÎ?g¬Zd;Ç¿gÐDØðôJÑ?gåÐ"Ûù~Ú?gÆÜµ„|Ðë¿g&S£’:Á¿gÙ_vOì¿g¬‹Ûh oÝ¿Rì   t   rotationRî   s   %.6gRí   Rï   s     sv     rotation={{-0.9533, 0.2413, -0.1815},
            {0.2702, 0.414, -0.8692},
            {-0.1346, -0.8777, -0.4599}}s   {{1}}s   &$s   &${{1}}i(   i   i<   R5  t   epsgê-�™—q=s   matrix.rec(elems=(), n=(0,%d))s   matrix.rec(elems=(), n=(%d,0))s   matrix.rec(elems=(2,), n=(1,1))s   {{2}}s   [2]s$   matrix.rec(elems=(1, 2, 3), n=(3,1))s   {{1},
 {2},
 {3}}s	   [1; 2; 3]s   [1;
 2;
 3]s$   matrix.rec(elems=(3, 2, 1), n=(1,3))s   {{3, 2, 1}}s	   [3, 2, 1]s'   matrix.rec(elems=(1, ..., -3), n=(4,3))s2   {{1, 2, 3},
 {4, 5, 6},
 {7, 8, 9},
 {-1, -2, -3}}s'   [1, 2, 3; 4, 5, 6; 7, 8, 9; -1, -2, -3]RÕ   t   @s6   @m=[1, 2, 3;
@   4, 5, 6;
@   7, 8, 9;
@   -1, -2, -3]g{®Gáz„?g{®Gáz”?gü©ñÒMbP?R§   R«   iK   g        g�“Á}�Ð?g¿HGÝèî?gÔ1åDÀÕ?g€ ©Ç×¸?gŽ Â�A~ã¿g–o ÄÉã?gˆ°ÍÊjçÝ¿gêä—ôÞ¿i%   g�Ú¨.1<í?gd.V'«9@g“=tPñ‡Ñ?gb§Jæà*á¿g‚dLÅ÷úå¿g#7ÜªXî?gžŸäy™Ã?g?n¿|²b¦?gî¾[¤�Ñ¿gºI+G=@g+‡ÙÎHÀg/Ý$)R@R»   g×£p=
<@g¼t“HÀg²�ï§ÆëQ@gó¨†jûÙg@gF¶óýÔ<@gd;ßO�ÇGÀgZd;ß�Q@gÖ1Š¬ £:@gæ¦cR&HÀgR¶S8 R@gâ‡¥j7Ó¿g÷Ûä7÷è¿gÍÔ¯ñ�á¿g|C«bá?g\«1"Õ¿gÍÔ¯ñ�á?g\«1"Õ?gëG�\R–è¿gc-BXòö?g•R©ÍÓÀgªøš¬âlè¿g7�ŒËÖ?gCÎ¨IâÁý¿gPÜnø;!Ø?RD  RE  R‘  c         S   s   |  j  ƒ  j ƒ  S(   N(   R   Rú   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   f’  s    s   {{1, 3}, {2, 4}}s   {{1}, {2}, {3}, {4}}s   {{1, 2, 5, 6}, {3, 4, 7, 8}}s    {{1, 2}, {3, 4}, {5, 6}, {7, 8}}s   {{1, 2, 3, 7}, {4, 5, 6, 8}}s!   {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}i   i   i   i   i   i   i   i   i   i   i   i   i   i    i!   i"   i#   i$   i&   i'   i)   i*   i+   i,   i.   i/   i0   i1   s¡   {{11, 12, 13, 21, 22, 23},
 {14, 15, 16, 24, 25, 26},
 {17, 18, 19, 27, 28, 29},
 {31, 32, 33, 41, 42, 43},
 {34, 35, 36, 44, 45, 46},
 {37, 38, 39, 47, 48, 49}}s°   {{1, 2, 3, 7, 8, 9, 10},
 {4, 5, 6, 11, 12, 13, 14},
 {15, 16, 17, 24, 25, 26, 27},
 {18, 19, 20, 28, 29, 30, 31},
 {21, 22, 23, 32, 33, 34, 35},
 {36, 37, 38, 39, 40, 41, 42}}c            sé   ˆ  t  d |  ƒ | ƒ s t ‚ ˆ  |  j ƒ  | ƒ s9 t ‚ | d k rå t d |  ƒ } | j |  j k sl t ‚ ˆ  | |  t d |  j d ƒ ƒ s• t ‚ ˆ  |  | t d |  j d ƒ ƒ s¾ t ‚ t d | ƒ } ˆ  | |  ƒ så t ‚ n  d  S(   NRÕ   i    R   (   RÚ   R   Rg   Râ   R   Rd   (   RÕ   t   expectedt   mit   mii(   R¢  (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   checkÎ  s    ))iïÿÿÿiíÿÿÿiòÿÿÿiøÿÿÿg      @R   R   g¸…ëQ¸¾?g®Gázæ?gffffffæ¿gš™™™™™É?g¸…ëQ¸æ¿g…ëQ¸å¿g
×£p=
ï¿g¸…ëQ¸®¿gq=
×£pÍ¿gªsT/Ü�?gš™™™™™ñ?gš™™™™™Àgffffff@gÍÌÌÌÌÌü?s/   (0.5, -0.5, -0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)s#   (1/2, -1/2, -1/2, 0, 1, 0, 0, 0, 1)RI  g%�•C‹	ÀgX9´Èvþ?gB`åÐ"[@gHáz®Gÿ¿gZd;ßOõ?g)\�Âõ(@g®Gázð¿gmçû©ñÒ@gbX9´È@gú~j¼t“Ø?gh‘í|?5þ?gd;ßO�—	@g¥§À°ÉÆd@(   t
   group_argsRT  RU  i5   RX  RY  RZ  gµüÀUž @R\  R]  s   INFO: numpy not available.t   OK(   i    i   (    (   i   i   (   i    (   i   i   (   i    i    (   i    i    (   i    i    (    (   i   i    (   i   i    (    (   i   i   (   i    i    i    i    i    i    (   i    i    i    (   i    i   i    (   i    i    (   i   i    (   i    i   (    (   i   i   (   i   iýÿÿÿ(   i   iýÿÿÿ(   i   i   (   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i    (   i   i   (   i   i   (    (   i    i    (   i    i    (   i   i   iýÿÿÿi	   (   i   i   g      Ø?g«ªªªªªÊ¿g      À?gUUUUUU¥?(	   i   i   iüÿÿÿi   i   iÿÿÿÿi   i   i÷ÿÿÿ(   i   iþÿÿÿi   (   gÃõ(\�ÂÕ?gö(\�Âõè¿g…ëQ¸…Û?(	   i   i    i    i    i   i    i    i    i   (	   i   iüÿÿÿi   iþÿÿÿi   i	   iýÿÿÿi   i   (   i   i   (   i   iúÿÿÿi   (   i   i   (   iÿÿÿÿi   i   (   i   iýÿÿÿi   (   i¹  i'  i•  (   iM  i"  i÷  (   g      è?i   g      ø?(   iþÿÿÿi   iúÿÿÿg’$I’$IÒ¿gÛ¶mÛ¶mÛ?gÛ¶mÛ¶më¿(   iÿÿÿÿi   iýÿÿÿ(   i   i   i   (   g333333û¿gffffff@g333333@(   g333333Ó?gš™™™™™É¿gš™™™™™Ù?(   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   i   i   (	   i   i   i   i   i   i   i   i   i	   (   i   i   i   (   i   i    i    (   i   i   i    (   i   i    i    (   i   i   i    (   i   i    i    (   i   i   i    (   iÿÿÿÿi    i    (   i   i   i    i‡   (   i   i    i    (   i   i   i    (   iÿÿÿÿi    i    (   i   i   i    i   (   i   i   i   (   i   i   (	   i    i   i   i   i   i   i   i   i   (   i   i   (   i   i   i   (   i   i   i   (   i   i   i   i   i   i   i   i   i	   iÿÿÿÿiþÿÿÿiýÿÿÿ(   i   i   (   i   i   i   i   i   i   (   i   i   g      ø?g)\�Âõ(ø?g      ô?g®Gáz®ó?g      ö?gj¼t“ö?g      ø?g      ô?g      ö?(   i    i    i    (   i   iþÿÿÿi   (   iþÿÿÿi   i   (   i   i   iþÿÿÿ(   i   iþÿÿÿi   (   iþÿÿÿi   i   (   i    i   i    (   i   i    i    (   g        g�“Á}�Ð?g¿HGÝèî?(   gÔ1åDÀÕ?g€ ©Ç×¸?gŽ Â�A~ã¿(   g–o ÄÉã?gˆ°ÍÊjçÝ¿gêä—ôÞ¿(   g“=tPñ‡Ñ?gb§Jæà*á¿g‚dLÅ÷úå¿(   g#7ÜªXî?gžŸäy™Ã?g?n¿|²b¦?gî¾[¤�Ñ¿(   gºI+G=@g+‡ÙÎHÀg/Ý$)R@(   g×£p=
<@g¼t“HÀg²�ï§ÆëQ@(   gF¶óýÔ<@gd;ßO�ÇGÀgZd;ß�Q@(   gÖ1Š¬ £:@gæ¦cR&HÀgR¶S8 R@(   i    i    i   (	   i   i    i    i    i   i    i    i    i   (   i    i    iÿÿÿÿ(	   i   i    i    i    iÿÿÿÿi    i    i    iÿÿÿÿ(   i   i   iùÿÿÿ(	   gâ‡¥j7Ó¿g÷Ûä7÷è¿gÍÔ¯ñ�á¿g÷Ûä7÷è¿g|C«bá?g\«1"Õ¿gÍÔ¯ñ�á?g\«1"Õ?gëG�\R–è¿(   i   i    i    (   i    i   i    (   i    i    i   (   gc-BXòö?g•R©ÍÓÀgªøš¬âlè¿(   g7�ŒËÖ?gCÎ¨IâÁý¿gPÜnø;!Ø?gUUUUUUÕ?(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   gÁ¿g�6ÐiÍ¿gOè´�N«?g7Ði�6Ð¿gÞÝÝÝÝÝÝ?gÆ’_,ùÅÒ?gåK~±äÇ¿g¿Xò‹%¿Ø?gUUUUUUÕ?gÑ?gá¿gá?gOè´�N‹¿(   i   i    i    i    gªLXèz¶û?gªLXèz¶û?gªLXèz¶û?gUUUUUUÕ?gUUUUUUå?gUUUUUUå?gUUUUUUå?gUUUUUUÕ?gUUUUUUå¿gUUUUUUå¿gUUUUUUå?gUUUUUUÕ¿(	   g¸…ëQ¸¾?g®Gázæ?gffffffæ¿gš™™™™™É?g¸…ëQ¸æ¿g…ëQ¸å¿g
×£p=
ï¿g¸…ëQ¸®¿gq=
×£pÍ¿(   gš™™™™™ñ?gš™™™™™Àgffffff@(   gš™™™™™ñ?gÍÌÌÌÌÌü?g333333Ó?(	   i   i   i   i    i   i    i    i    i   (   i    i    i    (   i    i    i    (   g%�•C‹	ÀgX9´Èvþ?gB`åÐ"[@(   gHáz®Gÿ¿gZd;ßOõ?g)\�Âõ(@(   g®Gázð¿gmçû©ñÒ@gbX9´È@(   gú~j¼t“Ø?gh‘í|?5þ?gd;ßO�—	@(   i   i   i   (   i
   i   i   (   i   i5   i   (   i    i   i   (   i   i   i   (   i    i    i    (   i   i   i   (   iÿÿÿÿi   i   (   i    i    i   (   i    i    i    (   i    i    i    (   i    i   i    (   i    i    i   (   i    i    i    (   i   i    i    (   i    i   i    (   i   i   (l   t   libtbxR¡  R   R   R&   R¢  t   Exception_expectedR9  R   R   R   R/  R   R   Rú   Rþ   R	  R   R%   Rb   Rº   RP   R†  RB   R�  R  R   Rä   R)   Rg   Rã   Rø   R�  Rˆ  R'   t
   startswitht   endswithR   RŠ  R   RD   RC   RE   R`   RN   RT   RU   RV   RW   RX   RY   RZ   R[   R1  RÒ   R«   R  RÓ   R7   R)  R²   R  R4  R  R  R  t   allR‰  RÖ   RK   RØ   Rd   R3  RI   R½   R   Rs   R¾   RM   R¯   Rq   R±   R¼   RÎ   Rc   R³   RH  R“  R”  R   Ri   R�   R   R¢   Rf   RF   RQ  R   RR  R«  t   __dict__R…  RW  R[  R_  R   RL   t   tolist(D   R¡  R®  R   R   R‘  R   R­   R”   R   R¦  R+   R-   t   att   brt   btt   gt   grtt   grttt   gttt   gtttRÕ   R¨  R0   t   sit   mioRP   R†  t   grt   gtR   t   gvRC   t   mdR    R*   R<   R=   Rƒ   R•   t   x_perpt   y_perpR°   RV  t   raaRª  t   uqrt   i_trialt   uq1t   uq2t   r1t   r2t   uqp12t   rp12t   uqp21t   rp21Ra   t	   rational1RI  R§  R«  Rw   t   argsRX  RY  RZ  t   point_in_planeR\  R
   (    (   R¢  sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt
   exercise_1  sø   	
		
*


!!
&#"		!*!	!		%

    	  6-!!.*0000<		((%(%<B<!"	  	PP/($$$$	!!  !(6699?  	!!%99EEQT$$$*!'*3!
		$		$$7#  	.($$


	'6'	0c          C   s¯  d d d g d d d g d d d	 g d
 d d g d d d g d d d g d d d g d d d g d d d g d d d g d d  d! g d" d# d$ g d% d& d' g d( d) d* g d+ d, d- g g }  t  d. |  d/ d0 ƒ sÕ t ‚ d d d g d d d g d d d	 g d
 d d g d d d g d d d g d d d g d d d g d d1 d g d d d g d d  d! g d" d# d$ g d% d& d' g d( d) d* g d+ d, d- g g }  t  d. |  d/ d0 ƒ s«t ‚ d  S(2   NgÉv¾Ÿ�4@g�•C‹lç@gHáz®=@gHáz®5@gð§ÆK7‰@g�—nƒ =@gNbX95@g-²�ï§Æ@g#Ûù~jü>@g´Èv¾Ÿš5@gh‘í|?5@g×£p=
?@gã¥›Ä Ð5@gƒÀÊ¡E6@g�•C‹lÇ=@g¦›Ä °r5@g¦›Ä °r@g¶óýÔxé<@g-²�ïÇ4@g¶óýÔxé	@gHáz®@@gî|?5^ú4@g…ëQ¸@gNbX9¤@@gF¶óýÔx5@gßO�—n@gh‘í|?µ@@g /Ý$Æ5@g%�•C@gî|?5^*@@g}?5^ºI6@gÝ$�•C@g¼t“F@@gB`åÐ"{5@gV-²@gã¥›Ä ð;@g¤p=
×Ã4@g!°rh‘í	@gD‹lçû	A@gºI+g6@g/Ý$�@g‰A`åÐ²@@gTã¥›Ä€6@gáz®Ga@gö(\�ÂÕ?@R]  R`  g{®Gázt?g;ßO�—n’?(   Ra  R   (   R]  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt
   exercise_2K  s@    t   __main__(1   R#  t
   __future__R    R   R   R   R   R   t   stdlibR   R   R   t   objectR   R%  R'  R)  R*  R+  R%   R/  R)   R1  Rd   R3  R4  R9  R:  RY   R³   RH  RQ  RR  RW  R[  R_  Ra  R…  Rº   R“  R”  R  R�  R   Râ   RÚ   RÒ  RÓ  R!  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/__init__.pyt   <module>
   sn   		ÿ ÿ ÿ &
	

					
			+[		1			ÿ ÿ G	$