ó
ÊïLc           @   sZ   d  Z  d d l m Z d d l m Z d d d d d g Z d	 „  Z d
 „  Z d „  Z d S(   s"   Selection of atoms, residues, etc.iÿÿÿÿ(   t   Entity(   t   PDBExceptiont   At   Rt   Ct   Mt   Sc         C   s   t  t |  ƒ ƒ S(   sZ   Return a list of the unique items in the given iterable.

    Order is NOT preserved.
    (   t   listt   set(   t   items(    (    s2   C:\Python27\Lib\site-packages\Bio\PDB\Selection.pyt	   uniqueify   s    c         C   s)   g  |  D] } | j  ƒ  ^ q } t | ƒ S(   sA   Translate a list of entities to a list of their (unique) parents.(   t
   get_parentR
   (   t   entity_listt   entityt   parents(    (    s2   C:\Python27\Lib\site-packages\Bio\PDB\Selection.pyt   get_unique_parents   s    c   	      C   sZ  | t  k r t d | ƒ ‚ n  t |  t ƒ r: |  g }  n  |  d j ƒ  } x/ |  D]' } | j ƒ  | k sQ t d ƒ ‚ qQ qQ Wt  j | ƒ } t  j | ƒ } | | k rª |  S| | k r x t | | ƒ D]3 } g  } x |  D] } | | j ƒ  } qÙ W| }  qÆ WnV xS t | | ƒ D]B } g  } x' |  D] } | j ƒ  } | j	 | ƒ q#Wt
 | ƒ }  qW|  S(   s-  
    Unfold a list of entities to a list of entities of another 
    level.  E.g.:

    list of atoms -> list of residues
    list of modules -> list of atoms
    list of residues -> list of chains

    o entity_list - list of entities or a single entity
    o target_level - char (A, R, C, M, S)
    s   %s: Not an entity level.i    s   Entity list is not homogeneous.(   t   entity_levelsR   t
   isinstanceR    t	   get_levelt   indext   ranget   get_listR   t   appendR
   (	   R   t   target_levelt   levelR   t   target_indext   level_indext   it   new_entity_listt   parent(    (    s2   C:\Python27\Lib\site-packages\Bio\PDB\Selection.pyt   unfold_entities   s2    N(	   t   __doc__t   Bio.PDB.EntityR    t   Bio.PDB.PDBExceptionsR   R   R
   R   R   (    (    (    s2   C:\Python27\Lib\site-packages\Bio\PDB\Selection.pyt   <module>   s   		