a
    af                     @   sp  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ ddlmZmZmZ ddlmZ ddlmZ dd	lmZmZ ed
dfejeeeedddZejeee eee eee dddZejeee eee eee dddZee eedddZee ee dddZ G dd deZ!ee ee dddZ"ejeee ee d d!d"Z#dS )#    N)partial)AnyIterableListOptionalSetTupleTypeformat_simplified   )parsesortingwrap)add_to_line)STATEMENT_DECLARATIONS)DEFAULT_CONFIGConfigpyimport)parsedconfig	extensionimport_typereturnc           %         s  | j dkrt| j| jS | j }dd  jD }t| j j	} j
ri i d| jd< d}|D ]Vdkrrd}q`| jd d	 | j d	i  | jd d
 | j d
i  q`|d }g }t }	d}
|D ]| j d	 } jstj | fdd jd}| j d
 } jstj | fdd jd} jrg }g }|D ]4}d| j d
 | v r||| n
|| qT|| }t|  |||}t|  |||}dg|r|r̈ jnd } jr|| | }n|| | } jrg }g }|D ]N}|sq|dr.|| n&|rJ|t|| g }n
|| qtj |ttj d jd}g }|D ]0}t|dd}|r|| |t | q~}| j!v }|rd|| j"v r|| j"|< q҈ j#|$ d}|r:||	vr: j%r|	&| d| }|| jdd vr:|'d| |
sF|sV|dg j( 7 }||7 }d}
q|
pn| }
q҈ j)rt*|}|r|d + dkr|,  q|r|d + dkr|,d q j-r -| j.|| / }d}| j | j0k r| j }|||d< |rh|t1| }dd |||d  D dgkrT|,| q$t1||krhd}||d }t2|D ]\} }t3j4|dt1| j5dd^}!}"}#|!s|+ r|+ drt1|| d kr|| d  + rqz|} q|"rz|} qqz j6dkr2dd t7 j6D ||d< n6|dkrZ|t8rZddg||d< ndg||d< | j"rg }$t2|D ]h\} }|$| || j9v r||$| j"| j9|   t1|| d ks|| d  + dkr||$d q||$}t|| jS )zAdds the imports back to the file.

    (at the index of the first import) sorted alphabetically and split between groups

    c                 S   s   g | ]}t |qS  r
   ).0Zremovalr   r   +lib/python3.9/site-packages/isort/output.py
<listcomp>       z"sorted_imports.<locals>.<listcomp>)straightfromno_sectionsr   FUTURE)r$   r!   r"   )r#   Fc                    s   t j|  ddS )NT)section_nameZstraight_importr   
module_keykeyr   sectionr   r   <lambda>7   s   z sorted_imports.<locals>.<lambda>r)   reversec                    s   t j|  dS )Nr%   r&   r(   r*   r   r   r,   B   r    * r   #)r   commentsz# r   c                 S   s   g | ]}|  qS r   )strip)r   	characterr   r   r   r      s   N)in_quoteindexsection_commentsZneeds_importc                 S   s   g | ]}d qS )r1   r   r   liner   r   r   r      s   Zpyi):Zimport_index_output_as_stringZlines_without_importsline_separatorcopyremove_imports	itertoolschainsectionsZforced_separater#   importsupdategetsetonly_sectionsr   sortreverse_sortZ
star_firstappend_with_straight_imports_with_from_importsZlines_between_typesZ
from_firstZforce_sort_within_sections
startswith_LineWithCommentsr   Zsection_keygetattrextendstrno_lines_beforeZplace_importsZimport_headingslowerZdedup_headingsaddinsertZlines_between_sectionsZensure_newline_before_comments_ensure_newline_before_commentr4   popZformatting_functionjoin
splitlinesZoriginal_line_countlen	enumerater   Z	skip_liner8   Zlines_after_importsranger   Zimport_placements)%r   r   r   r   Zformatted_outputr>   rA   Zbase_sectionsoutputZseen_headingsZpending_lines_beforestraight_modulesfrom_modulesZstar_modulesZother_modulesmoduleZstraight_importsfrom_importsZlines_betweenZsection_outputcomments_aboveZnew_section_outputr:   r3   r%   rQ   Zsection_titleZsection_commentZ	output_atZimports_tailZnext_constructtailr7   Zshould_skipr6   _Znew_out_linesr   r*   r   sorted_imports   sJ   

$
	






rd   )r   r   r^   r+   r>   r   r   c                    sL  g }|D ]<v rqd d| dt j d  }jrVjrzjvrzjsztj|fddjd}rfdd|D }fd	d|D }fd
dt	||D  j
rnd|v rԈjsnjs D ]}	jst |	  |	< qt|D ]d}
|
 v r||
}j d  |
 rT |
||d |d < n |
|||d < qd}jd d}jd d d }|r|r|| d }d|v rjrtttt |pd djjdj} fdd|D }d}njrhjvrhd}|r2|d}
t||
 jjd}jd i |
d }|r||rdpj d| 7 }|
 v rFj d  |
 r|s|t|j jd  d|
 js"|fddt |
 D  n"|fdd |
 D  n|t|j d }q.n|r|d  v r|d}
jst |
  |
< jd  d|
 pg j d  |
 r8|s8jd i |
d }|r
| |tt|
 jjdj g  |
 D ]^}	jd i |	d }|rn| |tt|	 jjdj g q@qhd|v r|ttg  djjd |d t|D ]}
jd i |
d }|r||
 |r$g }n|}d }t||
 jjd}||rRdpVj d| 7 }|t|j qg }|r|d  vsj
rʈj d  |
 r||d qj
r|pg t jd  dd }t|d| jjd}|s d}d}j}|rBt||krBd}t|jkrdt|dkrdd}t|jkrt|dkrjtj j!tj j"fvrd}|rtj#||jd}jtj j!krtj#||jtj j$d }t%d!d |&jD jkr|}|s2t|jkr2t|j}|r|| qq|S )"Nzfrom  r"   c                    s   t j|  d jdS )NTr/   )r   r'   Z'force_alphabetical_sort_within_sectionsr(   r*   r   r   r,      s   z$_with_from_imports.<locals>.<lambda>r-   c                    s"   g | ]}  d | vr|qS .r   r9   )r_   r>   r   r   r     s   z&_with_from_imports.<locals>.<listcomp>c                    s   g | ]}  d | qS rf   r   r   from_import)r_   r   r   r     r    c                    s<   i | ]4\ }|j d  v r  fddj d  | D qS )r"   c                    s   g | ]}  d | qS ) as r   )r   Z	as_moduleri   r   r   r     s   z1_with_from_imports.<locals>.<dictcomp>.<listcomp>as_map)r   Z
sub_moduler   rk   r   
<dictcomp>  s
   z&_with_from_imports.<locals>.<dictcomp>r0   r   Fr   aboveZremovedcomment_prefixc                    s   g | ]}| v r|qS r   r   rh   )
as_importsr   r   r   -  s   Tr1   r   nested;r!   rg   c                 3   s2   | ]*}t t| j  j jd V  qdS rq   Nwith_commentsr   r:   r<   ignore_commentsrr   r   	as_importr   from_commentsimport_startr   r   r   	<genexpr>O  s   	z%_with_from_imports.<locals>.<genexpr>c                 3   s2   | ]*}t t| j  j jd V  qdS rv   rw   rz   r|   r   r   r   \  s   	z.__combined_as__, )r~   r`   r3   r<   r   )r~   r`   r3   r<   r   multi_line_outputc                 s   s   | ]}t |V  qd S N)rY   )r   Zimport_liner   r   r   r      s   )'listrB   Zno_inline_sortZforce_single_lineZsingle_line_exclusionsrF   r   rG   rH   zipZcombine_as_importsZcombine_starr=   r7   rV   categorized_commentsrO   r   r:   rx   _with_star_commentsry   rr   r<   rD   rI   removerW   force_grid_wraprY   Zline_lengthr   ZModesZGRIDZVERTICALimport_statementZVERTICAL_GRIDmaxsplit)r   r   r^   r+   r>   r   r\   r`   Zsub_modulesr{   ri   idxZonly_show_as_importsr3   above_commentsr   Zsingle_import_lineZcommentZspecific_commentZuse_commentsZfrom_import_sectionZdo_multiline_reformatr   Zother_import_statementr   )rs   r   r}   r~   r_   r   r>   r+   r   rK      s   









	
	












	
rK   )r   r   r]   r+   r>   r   r   c                    s  g }t fdd|D } jr|s|s,g S g }g }	|D ]Rjd d v rh|jd d  jd v r8|	jd   q8d|}
|	rd|	}nd}|| |r| d|
 d|  n| d|
  |S |D ]̉|v rqg }jd v rdj| d  r>| d f |fd	djd  D  n| d f jd d d }|r|| | fd
d|D  q|S )Nc                 3   s   | ]}| j d  v V  qdS )r!   Nrl   )r   r_   rn   r   r   r     r    z)_with_straight_imports.<locals>.<genexpr>rp   r!   r   re   r1   z  # c                 3   s0   | ](}  d  d|  d| fV  qdS )re   rj   Nr   rz   )r   r_   r   r   r   B  s   c                 3   s2   | ]*\}}t jd  || j jdV  qdS )r!   rq   N)rx   r   rD   ry   rr   )r   ZidefZimodule)r   r   r   r   r   L  s   )	anyZcombine_straight_importsr   rO   rV   rW   rI   rm   rB   )r   r   r]   r+   r>   r   r\   rs   r   Zinline_commentsZcombined_straight_importsZcombined_inline_commentsZimport_definitionra   r   )r   r   r_   r   r   rJ     sR    






rJ   )linesr<   r   c                 C   s   | t| S r   )rW   _normalize_empty_lines)r   r<   r   r   r   r;   Y  s    r;   )r   r   c                 C   s.   | r | d   dkr | d q | d | S )Nr   r1   )r4   rV   rI   )r   r   r   r   r   ]  s    
r   c                       s>   e Zd ZU ee ed< ed  eee d d fddZ  Z	S )rM   r3   )clsvaluer3   r   c                    s   t  | |}||_|S r   )super__new__r3   )r   r   r3   instance	__class__r   r   r   h  s    z_LineWithComments.__new__)
__name__
__module____qualname__r   rP   __annotations__r	   r   r   __classcell__r   r   r   r   rM   e  s   
rM   )r\   r   c                 C   sb   g }t t tddd}t| d g|  D ]4\}}||rR|dkrR||sR|d || q(|S )N)r:   r   c                 S   s   | r|  dS dS )Nr2   F)rL   )r:   r   r   r   
is_comments  s    z2_ensure_newline_before_comment.<locals>.is_commentr1   )r   rP   boolr   rI   )r\   Z
new_outputr   r:   Z	prev_liner   r   r   rU   p  s    
rU   )r   r_   r3   r   c                 C   s,   | j d |i dd }|r(||g S |S )Nrt   r0   )r   rD   rV   )r   r_   r3   Zstar_commentr   r   r   r   }  s    
r   )$r=   r?   	functoolsr   typingr   r   r   r   r   r   r	   Zisort.formatr   r1   r   r   r   r3   r   rx   Zidentifyr   Zsettingsr   r   ZParsedContentrP   rd   rK   rJ   r;   r   rM   rU   r   r   r   r   r   <module>   sT   $ U  1J