B
    3Rc                 @   s@   d dl mZ G dd deZeje_dddZedkr<e  dS )	    )VLibNodec               @   s"   e Zd ZdZdddZdd ZdS )
OutputNodea   base class for nodes which dump output

    Assumptions:

      - destination supports a write() method

      - strFunc, if provided, returns a string representation of
        the input

      - inputs (parents) can be stepped through in lockstep


    Usage Example:
    
      >>> from rdkit.VLib.Supply import SupplyNode
      >>> supplier = SupplyNode(contents=[1,2,3])
      >>> from io import StringIO
      >>> sio = StringIO()
      >>> node = OutputNode(dest=sio,strFunc=lambda x:'%s '%(str(x)))
      >>> node.AddParent(supplier)
      >>> node.next()
      1
      >>> sio.getvalue()
      '1 '
      >>> node.next()
      2
      >>> sio.getvalue()
      '1 2 '

    Nc             K   s   t j| f| || _|| _d S )N)r   __init___dest_func)selfdestZstrFunckwargs r
   0lib/python3.7/site-packages/rdkit/VLib/Output.pyr   )   s    zOutputNode.__init__c             C   sb   |   }tdd |D }t|dkr.|d }| jr^| jd k	rJ| |}nt|}| j| |S )Nc             S   s   g | ]}|  qS r
   )next).0parentr
   r
   r   
<listcomp>0   s    z#OutputNode.next.<locals>.<listcomp>   r   )Z
GetParentstuplelenr   r   strwrite)r   parentsargsZoutpr
   r
   r   r   .   s    
zOutputNode.next)NN)__name__
__module____qualname____doc__r   r   r
   r
   r
   r   r   	   s   
r   Nc             C   s2   dd l }dd l}|j|j| d\}}|| d S )Nr   )Zoptionflagsverbose)doctestsysZtestmodELLIPSISexit)r   r   r   Zfailed_r
   r
   r   _runDoctestsC   s    r!   __main__)N)Zrdkit.VLib.Noder   r   r   __next__r!   r   r
   r
   r
   r   <module>   s
   3
