B
    d              	   @   s   d dl mZmZmZ d dlZd dlmZ d dlmZ dddZ	dd Z
dd
dZedkrd dlZd ZdZxjeddD ]\Ze ZeedZed9 Zee7 Zedeeeeed e e f  eeeksttqtW dS )    )absolute_importdivisionprint_functionN)product)rangec             #   sb   t |  t }|d kr|n|}x<tt||dD ](}t||kr2t  fdd|D V  q2W d S )N)repeatc             3   s   | ]} | V  qd S )N ).0i)poolr   n/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/iotbx/pdb/utils.py	<genexpr>   s    z!__permutations.<locals>.<genexpr>)tuplelenr   r   )iterablernindicesr   )r   r   __permutations   s    r   c              C   s   t jt j } t j}t| dd}t| |}t|| }t|dd}dd | D dd |D  dd |D  dd |D  dd |D  dd |D  }|S )	aJ  
  Test is in
  iotbx/regression/tst_all_chain_ids.py
  There should not be leading whitespace for one letter chain ids.

  Returns all possible 2 character chain IDs for PDB format files.
  In general, returns single character chains first.
  Also tries to use all combinations of uppercase/numbers before going to lower case.
     )r   r   c             S   s   g | ]}|qS r   r   )r	   cr   r   r   
<listcomp>   s    z!all_chain_ids.<locals>.<listcomp>c             S   s   g | ]}d  |qS ) )join)r	   pr   r   r   r       s    c             S   s   g | ]}d  |qS )r   )r   )r	   r   r   r   r   r   !   s    c             S   s   g | ]}d  |qS )r   )r   )r	   r   r   r   r   r   "   s    c             S   s   g | ]}d  |qS )r   )r   )r	   r   r   r   r   r   #   s    )stringascii_uppercasedigitsascii_lowercaser   r   )charsZ
lowercharsZboth_char_upperZsecond_char_lowerZfirst_char_lowerZboth_char_lowerresultr   r   r   all_chain_ids   s    


Dr!      c             C   sN   t j}dd |D }x4td| d D ]"}t||d}|dd |D 7 }q$W |S )Nc             S   s   g | ]}d  |qS )r   )r   )r	   r   r   r   r   r   (   s    z&all_label_asym_ids.<locals>.<listcomp>r      )r   r   c             S   s   g | ]}d  |qS )r   )r   )r	   r   r   r   r   r   +   s    )r   r   r   r   )maximum_lengthr   rcr   Z
char_upperr   r   r   all_label_asym_ids&   s    r&   __main__r#      )r$      z%7d %7d %7d %5s %0.3fs)N)r"   )
__future__r   r   r   r   	itertoolsr   	six.movesr   r   r!   r&   __name__timelr   r   t0r%   printr   AssertionErrorr   r   r   r   <module>   s"   


&