U
    e                     @   sh   d dl Z d dlmZmZ d dlmZ d dlmZmZ dd Z	dd Z
d	d
 ZdeeeeedddZdS )    N)Paralleldelayed)Manager)DNAFASTAFormatDNAIteratorc                 C   s   t |  }||kS N)sumZdegenerates)seqnum_degeneratesZdegenerates_in_seq r   Mlib/python3.8/site-packages/rescript-2024.2.0-py3.8.egg/rescript/screenseq.py_filt_seq_with_degenerates   s    r   c                 C   s2   |d }d| }dd t |t| D }t|S )N   z([ACGTURYSWKMBDHVN])\1{%s,}c                 S   s   g | ]}|qS r   r   ).0pr   r   r   
<listcomp>   s     z'_filter_homopolymer.<locals>.<listcomp>)refinditerstrany)r	   homopolymer_lengthZnhlZ	regex_strZhomopolymersr   r   r   _filter_homopolymer   s    r   c              	   C   sP   t | |}|sLt| |}|sL|  t|d}| | W 5 Q R X |  dS )zProcess a single sequenceza+N)r   r   acquireopenwriterelease)Zseq_objr
   r   lockZ	result_fpZdegenZpolyoutr   r   r   _filter_seq   s    

r         r   )	sequencesr
   r   n_jobsreturnc                    s@   t  t }| t|dd}| fdd| D  S )NZloky)r"   Zbackendc                 3   s&   | ]}t t| tV  qd S r   )r   r   r   )r   r	   r   Zmylockr
   resultr   r   	<genexpr>0   s   zcull_seqs.<locals>.<genexpr>)r   r   ZLockr   )r!   r
   r   r"   ZmanagerZparallelr   r$   r   	cull_seqs)   s    r'   )r   r    r   )r   Zjoblibr   r   Zmultiprocessingr   Zq2_types.feature_datar   r   r   r   r   intr'   r   r   r   r   <module>	   s         