ó
`xTc           @   sT   d  d l  m Z d  d l Z d  d l Z d  d l Z d Z d e f d     YZ d S(   i˙˙˙˙(   t   divisionNs   
Chirikjian, G. Stochastic models, information theory, and Lie groups.
Volume 2, pp 39-40.
Applied and Numerical Harmonic Analysis, Birkhauser
t   elementc           B   sś   e  Z d  Z e j j d  e j j d  e j j d  g Z d   Z e d    Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z e d    Z e d    Z RS(   s)   
  An element of the Lie algebra so(3)
  i    i˙˙˙˙i   c         C   s   | |  _  d  S(   N(   t   vector(   t   selfR   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   __init__   s    c         C   s<   t  t j g  t |  j |  j  D] \ } } | | ^ q  S(   N(   t   reducet   operatort   addt   zipR   t   BASES(   R   t   xt   e(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   matrix   s    c         C   s   |  j  j   } d | k  r[ t j |  } t j |  | } d t j |  | | } n d } d } |  j } t j j d  | | | | | S(   Ni    g      đ?g      ŕ?i   (	   R   t	   length_sqt   matht   sqrtt   sint   cosR   t   scitbxt   identity(   R   t   x2R
   t   a1t   a2R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   exponential$   s    	c         C   s   |  j  d |  j |  S(   NR   (   t	   __class__R   (   R   t   value(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   scalar_multiplied9   s    c         C   s   d |  j  j   S(   Ni   (   R   t   norm_sq(   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyR   =   s    c         C   s   |  j  d |  j | j  S(   NR   (   R   R   (   R   t   other(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   __add__A   s    c         C   s   |  j  d |  j | j  S(   NR   (   R   R   (   R   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   __sub__E   s    c         C   s)   t  | t t f  r% |  j d |  St S(   NR   (   t
   isinstancet   floatt   intR   t   NotImplemented(   R   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   __mul__I   s    c         C   s)   t  | t t f  r% |  j d |  St S(   NR   (   R   R    R!   R   R"   (   R   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   __rmul__P   s    c         C   s(   d d  l  } |  j d | j j |   S(   Ni˙˙˙˙R   (   t   scitbx.matht   from_lie_matrixR   t   r3_rotation_matrix_logarithm(   t   clsR   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   from_rotation_matrixW   s    	c         C   sO   |  t  j j | d | d d | d | d d | d | d d f   S(   Ni   i   g       @i   i   i   i   (   R   R   t   col(   R(   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyR&   _   s
    	(	   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    (   t   __name__t
   __module__t   __doc__R   R   t   sqrR	   R   t   propertyR   R   R   R   R   R#   R$   t   classmethodR)   R&   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyR      s   								(	   t
   __future__R    t   scitbx.matrixR   R   R   R-   t   objectR   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/so3_lie_algebra.pyt   <module>   s
   