
    G@d                     V    d Z ddlZddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ d Zd ZdS )z$
Utils to handle Switcher elements.
    N)_)	iteritems)imac                   	
 | dd         } g 	t          j        t          j        |                     }t          t	          | |                    D ]\  }\  }}|r(	                    t          d                     d| |<   2t          j        t          j        |                    \  }}	                    |t           j        z              d |	                    t           j                  D             | |<   	
fd
 
d t          |           D                        |rg }	D ]}|
                    t          j                  	                    |          }t          |          dk    r/|                    d                    |d                              v|                    |           nd	 	D             }|S )
aL  
    Takes a list of paths and tries to "intelligently" shorten them all. The
    aim is to make it clear to the user where the paths differ, as that is
    likely what they care about. Note that this operates on a list of paths
    not on individual paths.

    If the path ends in an actual file name, it will be trimmed off.
    Nzunsaved filec                     g | ]}||S  r   ).0parts     5lib/python3.11/site-packages/spyder/utils/switcher.py
<listcomp>z!shorten_paths.<locals>.<listcomp>/   s    JJJdTJTJJJ    c                   	
 t           j        }t          |                                           sd S t	          |                                           d         		sdnEt          	          D ]5\  
t          
fd|                                 D                       s n6dk    rd}nfdk    r		d         }n,dk    r	d         |z   	d         z   }nd|z   	dz
           z   }| D ](}|xx         ||z   z  cc<   | |         d          | |<   )| rpd| c}	 fd|                                D             }|r	dk    r|}npt          t          |                    \  }		fd	|                                D             }t          |          t          |          k    sdk    r|}dz  nnt          t          |                    \  }	dk    rd}nDdk    r		d         }n5dk    r	d         |z   	d         z   }n	d         dz   |z   	dz
           z   }|                                D ] }|xx         |dk    r|ndz   z  cc<   | |= ! fd
|                                D                        | nd S d S )Nr   c              3   V   K   | ]#}t          |          k    o|         k    V  $d S Nlen)r	   tokss
sample_vals     r   	<genexpr>z7shorten_paths.<locals>.recurse_level.<locals>.<genexpr>?   sO       ; ;# t99q=BT!W
-B ; ; ; ; ; ;r          z...Tc                 B    i | ]\  }}t          |          k    ||S r   r   r	   idxr   ks      r   
<dictcomp>z8shorten_paths.<locals>.recurse_level.<locals>.<dictcomp>V   s8     %I %I %I939<Ta &)$9Gr   c                 @    i | ]\  }}|                  k    ||S r   r   )r	   r   r   r   sample_tokss      r   r   z8shorten_paths.<locals>.recurse_level.<locals>.<dictcomp>^   s>     %C %C %C93(,Q;q>(A(A &)$(A(A(Ar   c                 ,    i | ]\  }}||d          S r   r   r   s      r   r   z8shorten_paths.<locals>.recurse_level.<locals>.<dictcomp>r   s'    HHHYS$3QRRHHHr   )ossepanyvalueslist	enumerateallitemsnextr   r   keys)	level_idxr#   
short_formr   groupprospective_groupr   r   r   r    r   new_path_listrecurse_levels          @@@@r   r1   z$shorten_paths.<locals>.recurse_level1   s   f 9##%%&& 	F 9++--..q1 	AA!*;!7!7  : ; ; ; ; ;'0'7'7'9'9; ; ; ; ; E
 66JJAvv(^

a(^c1KNB

"S[;qs+;;
  4 4c"""j3&66"""!*3!3	#   	J)HAu%I %I %I %I(-%I %I %I!$ Avv 1!%i&6&6!7!7;%C %C %C %C %C(-%C %C %C! ())SZZ77166-EFAA#$ ")E"2"233NA{Avv

a(^

a(^c1KNB

(^e3c9K!<LL
zz|| # #c"""j1q55CCb&II"""cNNMHHHH%++--HHHIIIA   	J  	J  	J  	J  	Jr   c                     i | ]
\  }}|||S r   r   )r	   ipls      r   r   z!shorten_paths.<locals>.<dictcomp>t   s#    AAAUQbA1bAAAr   r   z...{}c                 L    g | ]!}|                     t          j                  "S r   )rstripr"   r#   )r	   paths     r   r   z!shorten_paths.<locals>.<listcomp>   s&    FFFBF++FFFr   )ospdirnamecommonprefixr'   zipappendr   
splitdriver#   splitr7   r"   r   format)	path_list
is_unsavedcommon_prefixiir8   is_unsavdriveresult_pathspath_elementsr0   r1   s            @@r   shorten_pathsrI      s    !!!IMK 0 ; ;<<M )#i*D*D E E K KT8 	K  >!2!2333 IbMM.T):):;;KE4  111JJdjj.A.AJJJIbMMAJ AJ AJ AJ AJ AJF MAAi	&:&:AAABBB 	G! 	* 	*D KK//55mDDM=!!A%%##GNN=3D$E$EFFFF##D))))	* GFFFFr   c                 |    t           j        dk    rd}nt          j        dk    rd}nd}t	          j        | |          S )zGet icon for file by extension.darwing?ntg?g333333?)sysplatformr"   namer   get_icon_by_extension_or_type)r8   scale_factors     r   get_file_iconrR      sB     |x	D,T<@@@r   )__doc__r"   os.pathr8   r9   rM   spyder.config.baser   spyder.py3compatr   spyder.utils.icon_managerr   rI   rR   r   r   r   <module>rX      s    
 
			       



 !           & & & & & & ) ) ) ) ) )k k k\
A 
A 
A 
A 
Ar   