o
    Rŀg
                     @   sr   d Z ddlZddlmZ ddlmZ ddlmZ g dZdd Z	d	d
 Z
dd Zedkr7ddlmZ e  dS dS )z"Selection of atoms, residues, etc.    N)Atom)Entity)PDBException)ARCMSc                 C   s   t t| S )zZReturn a list of the unique items in the given iterable.

    Order is NOT preserved.
    )listset)items r   E/var/www/html/myenv/lib/python3.10/site-packages/Bio/PDB/Selection.py	uniqueify   s   r   c                 C   s   dd | D }t |S )zATranslate a list of entities to a list of their (unique) parents.c                 S   s   h | ]}|  qS r   
get_parent.0entityr   r   r   	<setcomp>   s    z%get_unique_parents.<locals>.<setcomp>)r
   )entity_listunique_parentsr   r   r   get_unique_parents   s   r   c                    s   |t vrt| d| g krg S t| ttfr| g} | d   t fdd| D s0tdt |}t  }||kr@| S | }||krXt||D ]}t	j
|}qKt|S t||D ]	}dd |D }q]t|S )a  Unfold entities list to a child level (e.g. residues in chain).

    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

    - entity_list - list of entities or a single entity
    - target_level - char (A, R, C, M, S)

    Note that if entity_list is an empty list, you get an empty list back:

    >>> unfold_entities([], "A")
    []

    z: Not an entity level.r   c                 3   s    | ]	}|   kV  qd S N)	get_levelr   levelr   r   	<genexpr><   s    z"unfold_entities.<locals>.<genexpr>zEntity list is not homogeneous.c                 S   s   i | ]}|  d qS r   r   r   r   r   r   
<dictcomp>M   s    z#unfold_entities.<locals>.<dictcomp>)entity_levelsr   
isinstancer   r   r   allindexrange	itertoolschainfrom_iterabler
   )r   target_leveltarget_indexlevel_indexentitiesir   r   r   unfold_entities!   s*   

r,   __main__)run_doctest)__doc__r$   Bio.PDB.Atomr   Bio.PDB.Entityr   Bio.PDB.PDBExceptionsr   r   r   r   r,   __name__
Bio._utilsr.   r   r   r   r   <module>   s   1
