ó
a#nSc           @   sv   d  d l  Z  d  d l m Z d e f d „  ƒ  YZ d „  Z e d k rr d  d l  Z  e ƒ  \ Z Z e  j e ƒ n  d S(   iÿÿÿÿN(   t   VLibNodet   TransformNodec           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s   base class for nodes which filter their input

  Assumptions:

    - transform function takes a number of arguments equal to the
      number of inputs we have.  We return whatever it returns

    - inputs (parents) can be stepped through in lockstep

  Usage Example:
    >>> from rdkit.VLib.Supply import SupplyNode
    >>> def func(a,b):
    ...   return a+b
    >>> tform = TransformNode(func)
    >>> suppl1 = SupplyNode(contents=[1,2,3,3])
    >>> suppl2 = SupplyNode(contents=[1,2,3,1])
    >>> tform.AddParent(suppl1)
    >>> tform.AddParent(suppl2)
    >>> v = [x for x in tform]
    >>> v
    [2, 4, 6, 4]
    >>> tform.reset()
    >>> v = [x for x in tform]
    >>> v
    [2, 4, 6, 4]

    If we don't provide a function, just return the inputs:
    >>> tform = TransformNode()
    >>> suppl1 = SupplyNode(contents=[1,2,3,3])
    >>> suppl2 = SupplyNode(contents=[1,2,3,1])
    >>> tform.AddParent(suppl1)
    >>> tform.AddParent(suppl2)
    >>> v = [x for x in tform]
    >>> v
    [(1, 1), (2, 2), (3, 3), (3, 1)]

  c         K   s   t  j |  | � | |  _ d  S(   N(   R    t   __init__t   _func(   t   selft   funct   kwargs(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/VLib/Transform.pyR   0   s    c         C   sž   d } |  j  ƒ  d } g  } y. x' |  j  ƒ  D] } | j | j ƒ  ƒ q, WWn t k
 rc t ‚ n Xt | ƒ } |  j d  k	 r” t |  j | ƒ } n | } | S(   Ni    (   t
   GetParentst   appendt   nextt   StopIterationt   tupleR   t   Nonet   apply(   R   t   donet   parentt   argst   res(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/VLib/Transform.pyR	   4   s    
N(   t   __name__t
   __module__t   __doc__R   R   R	   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/VLib/Transform.pyR   
   s   %c          C   s,   d d  l  }  d d  l } |  j | j d ƒ S(   Niÿÿÿÿt   __main__(   t   doctestt   syst   testmodt   modules(   R   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/VLib/Transform.pyt   _testJ   s    R   (	   R   t   rdkit.VLib.NodeR    R   R   R   t   failedt   triedt   exit(    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/VLib/Transform.pyt   <module>   s   @	