a
    a                  	   @   s   d dl Z d dlZd dlmZmZmZ ddlmZmZ ddl	m
Z ddl	mZ ddedfeee ee eeee ed	d
dZefeeeedddZeZdS )    N)ListOptionalSequence   )DEFAULT_CONFIGConfig)	WrapModes)formatter_from_string 
)import_startfrom_importscommentsline_separatorconfigmulti_line_outputreturnc                 C   s.  t |p
|jj}dt| d  }|j}|jp0|j}	|| t||||	|||j|j	|j
d
}
|jr|
|}t|}t|dkrtdd |dd D }nd}|
}t|d |k rt||kr|	d	kr|}
|	d8 }	|| t||||	|||j|j	|j
d
}||}q|
|dkr*t|
||S |
S )
zHReturns a multi-line wrapped form of the provided from import statement. r   )
	statementZimportsZwhite_spaceindentline_lengthr   r   comment_prefixinclude_trailing_commaZremove_commentsc                 s   s   | ]}t |V  qd S )N)len).0liner
   r
   )lib/python3.9/site-packages/isort/wrap.py	<genexpr>'       z#import_statement.<locals>.<genexpr>Nr   
   )r	   r   namer   r   wrap_lengthr   copyr   r   Zignore_commentsZbalanced_wrappingsplitmincount
_wrap_line)r   r   r   r   r   r   	formatterZdynamic_indentr   r   r   linesZ
line_countZminimum_lengthZnew_import_statementr
   r
   r   import_statement
   sT    	
*r*   )contentr   r   r   c              
   C   s  |j }t| |jkr|tjkr| }d}d| v rB| dd\}}dD ]8}dt| d }t||rF|	 
|sFt||}|r|jrd|v s|jr|jr| dsdnd}	|d	 	  |	 |j | |d	< g }
t| d
 |jp|jkr|r|
|  ||} q| s&|
 } t|j||
  ||}|jrf|dkrj|  | |  }n|jr||s|dnd}|tjtjfv r|}nd}d}|rd|v r|j | }| }|jrdnd}|  | d| | | | | d	}||}|j|d	 v rX|d	 drX|d	 |jd\} }| d |j |dd	  |d	< ||  S |  | d| |   S qFn6t| |jkr|tjkrd| vr|  |j dS | S )zAReturns a line wrapped to the specified line-length, if possible.N#r   )zimport .as z\bZnoqa, r      r.   ()\z# NOQAz NOQA)r   r   r   ModesZNOQAr$   reescapesearchstrip
startswithZuse_parenthesesr   rstripendswithr   r"   appendpopjoinr'   r   lstripZVERTICAL_HANGING_INDENTZVERTICAL_GRID_GROUPED)r+   r   r   Z	wrap_modeZline_without_commentZcommentZsplitterZexpZ
line_partsZ_comma_maybeZ	next_lineZ	cont_lineoutputZ_commaZ
_separatorZ_commentr)   r
   r
   r   r   @   s    




 &r   )r#   r6   typingr   r   r   Zsettingsr   r   Z
wrap_modesr   r5   r	   strr*   r   r'   r
   r
   r
   r   <module>   s(   6K