
    5i                     F   d Z ddlmZmZmZmZ ddlZddlmZ ddl	m
Z
mZ ddlZddlmZmZmZmZmZmZ ddlmZ d	 Zd
 Zd Zd Zd Zd Zd Z	 	 d dZ	 	 d!dZ G d d      Z G d d      Z  G d d      Z! G d d      Z" G d d      Z# G d d      Z$ G d d      Z%y)"z~
This file contains utility functions for interactive scripts such as
dx for tab-completion, resolving naming conflicts, etc.
    )print_functionunicode_literalsdivisionabsolute_importN)warn)
namedtupleOrderedDict   )get_first_pos_of_charget_last_pos_of_charclean_folder_pathresolve_pathsplit_unescapedResolutionError)fillc                       fdS )Nc                 &    | j                        S N)
startswith)stringtexts    v/home/marpiech/ifpan-abm-pgxpred/analysis/marpiech-gwas-test/venv/lib/python3.12/site-packages/dxpy/utils/completer.py<lambda>zstartswith.<locals>.<lambda>!   s    6,,T2      r   s   `r   r   r       s	    23r   c                 8    t        |       j                  dd      S )N/\/)escape_colonreplacer   s    r   escape_namer"   #   s    %%c511r   c                 &    | j                  dd      S )N:\:r!   r   s    r   r    r    &   s    <<U##r   c                 &    | j                  dd      S )Nr%   r$   r&   r   s    r   unescape_colonr(   )   s    <<s##r   c                     t        |       } t        |      }t        |      }|j                  d      sd|z   }|j                  d      s|dz   }| dz   |z   |z   S )Nr   r$   )r    r"   r   endswith)projectpathnames      r   	join_pathr.   ,   s^    7#GDtD??3Tz==cz3;tD  r   c                     t        d|       }t        d|       }| d | | |dz   | | |dz   d  }} }| dk(  rd} t        |      }t        |       } t        |      j                  dd      }|| |fS )Nr$   r   r
    r   )r   r   r(   r!   )r,   	colon_pos	slash_posr+   r-   s        r   
split_pathr3   6   s    %c40I$S$/Iz	*D1Y,GiXYklI[4TGrzW%G$D$''s3DD$r   c                 D   	 |j                  |d      d   }|D cg c]  }||j                  d      dz   d  }}| dk7  r|t        |       dz
  k7  r|ddgz  }| d|dz    }|D cg c]"  }||z   dz   j                  |       s||z   dz   $ c}S c c}w c c}w #  g cY S xY w)	a#  
    :param text: String to be tab-completed; still in escaped form
    :type text: string
    :param delim_pos: index of last unescaped "/" in text
    :type delim_pos: int
    :param dxproj: DXProject handler to use
    :type dxproj: DXProject
    :param folderpath: Unescaped path in which to search for folder matches
    :type folderpath: string
    :returns: List of matches
    :rtype: list of strings

    Members of the returned list are guaranteed to start with *text*
    and be in escaped form for consumption by the command-line.
    folders)folderonlyr   r
   Nr0   .z..)list_folderrfindlenr   )	r   	delim_posdxproj
folderpathr5   r-   folder_namesprefixfs	            r   get_folder_matchesrB   V   s     $$JY$G	R?FGtTZZ_q012GG2:)s4y1}4S$K'Lny1}%*6^Q6A:;K:W:WX\:]
S ^^	 H _	s-   B B+B %B
BB 
B Bc                 f   | |dz   d }|| dk7  r|t        |       dz
  k7  rd}nd}	 t        t        j                  |j	                         ||dz   dd||d	t        t        d
            |
            }| dk(  rdn| d|dz    }	|D 
cg c]  }
|	t        |
d   d         z    c}
S c c}
w #  g cY S xY w)aP  
    :param text: String to be tab-completed; still in escaped form
    :type text: string
    :param delim_pos: index of last unescaped "/" or ":" in text
    :type delim_pos: int
    :param dxproj: DXProject handler to use
    :type dxproj: DXProject
    :param folderpath: Unescaped path in which to search for data object matches
    :type folderpath: string
    :param classname: Data object class by which to restrict the search (None for no restriction on class)
    :type classname: string
    :param visibility: Visibility to constrain the results to; default is "visible" for empty strings, "either" for nonempty
    :type visibility: string
    :returns: List of matches
    :rtype: list of strings

    Members of the returned list are guaranteed to start with *text*
    and be in escaped form for consumption by the command-line.
    r
   Nr0   eithervisible*globFd   T)r-   )fields)
r+   r6   r-   	name_moderecurse
visibility	classnamelimitdescribetypenamerO   r-   )r;   listdxpyfind_data_objectsget_iddictr"   )r   r<   r=   r>   rM   typespecrL   unescaped_textresultsr@   results              r   get_data_matchesrZ   p   s    , )a-.)N2:)s4y1}4!J"Jt--fmmo5?3AC3G8>6;9C8A477;4T?7S7?	A 	B rztNY]';OVWVVJ%7%?@@WWW	s   A B* B%"B* %B* *B0c                    t        d|       }t        d|       }t        ||      }	g }
|dk(  r6|dkD  r1|t        |       dz
  k(  r t        j                  d| d|       | d	z   gS |dk  r|dk  r| d
k7  s|dk(  r|t        j
                  d|      }|s&|D cg c]  }|d   t        j                  k7  s| }}|
|D cg c].  }|d   d   j                  |       st        |d   d         dz   0 c}z  }
|dk(  r|
S |dk  r|dk\  rt        j                  }	 t        j                  t        j                        }t        |       \  }}|
t        | |||      z  }
|dk7  r3||D ]  }|
t        | ||||||      z  }
 n|
t        | |||||      z  }
|
S |
S 	 t        | d      \  }}}|D ]a  }	 t        j                  |      }|
t        | |	||      z  }
|dk7  r3||D ]  }|
t        | |	|||||      z  }
 n|
t        | |	||||      z  }
c |
S c c}w c c}w #  Y |
S xY w# t        $ r@}t        j                   j#                  dt%        t'        |            z          |
cY d}~S d}~ww xY w#  Y xY w)a  
    :param text: String to tab-complete to a path matching the syntax project-name:folder/entity_or_folder_name
    :type text: string
    :param expected: "folder", "entity", "project", or None (no restriction) as to the types of answers to look for
    :type expected: string
    :param classes: if expected="entity", the possible data object classes that are acceptable
    :type classes: list of strings
    :param perm_level: the minimum permissions level required, e.g. "VIEW" or "CONTRIBUTE"
    :type perm_level: string
    :param include_current_proj: Indicate whether the current project's name should be a potential result
    :type include_current_proj: boolean
    :param visibility: Visibility with which to restrict the completion (one of "either", "visible", or "hidden") (default behavior is dependent on *text*)

    Returns a list of matches to the text and restricted by the
    requested parameters.
    r$   r   r+   r   r
   TN)zero_okr-    r0   )rO   levelidrO   r-   r6   )rM   rV   rL   )rV   rL   )multi_projects
)r   maxr;   rR   find_one_projectfind_projectsWORKSPACE_IDr   r    get_handlerr   rB   rZ   r   r   sysstderrwriter   str)r   expectedclasses
perm_levelinclude_current_projrV   rL   r1   r2   r<   matchesrX   rr=   r>   entity_namerM   proj_idsdetailsprojs                       r   path_completerru      s   $ %S$/I$S$/IIy)I G9Q9D	A3M  D)4DEQ3J<1}Q
 2:Y.(($jIG'&-N4D<M<M1M1NN{ATUV`TabhTiTtTtuyTzQz]6%:;C?{{G9 1}a ())$*;*;<*;D*A'
K-dIvzRRx'*)0 OI#'7i8BiAICM(O OGO  #3D)V4>?I$K K< N7N-	0<TRV0W-Hj+  	D))$/-dIvzRRx'*)0 bI#'7i8BiAIV`(b bGb
  #3D)V4>?I$K K	" Nm O{44 N)  	JJTDW$667N	$sP   H/H:HHA:H H *AI*H	I''5I"I'"I'*I.c                   .    e Zd ZdZ	 	 ddZd Zd Zd Zy)DXPathCompleterz
    This class can be used as a tab-completer with the readline module
    Note that to tab-complete data object names with spaces, the delimiters
    set for the completer must not include spaces.
    Nc                 X    g | _         || _        || _        || _        || _        || _        y r   )ro   rk   rl   rV   rn   rL   )selfrk   rl   rV   rn   rL   s         r   __init__zDXPathCompleter.__init__   s-      $8!$r   c                     t        || j                  | j                  | j                  | j                  | j
                        | _        y )N)rV   rn   rL   )ru   rk   rl   rV   rn   rL   ro   )ry   r@   s     r   _populate_matchesz!DXPathCompleter._populate_matches	  s4    %fdmmT\\/3}};?;T;T15Br   c                 <    | j                  |       | j                  S r   r|   ro   ry   linepointr@   suffixs        r   get_matcheszDXPathCompleter.get_matches      v&||r   c                 ~    |dk(  r| j                  |       |t        | j                        k  r| j                  |   S y Nr   r|   r;   ro   ry   r   states      r   completezDXPathCompleter.complete  s:    A:""4(3t||$$<<&&r   )NNNFN)__name__
__module____qualname____doc__rz   r|   r   r   r   r   r   rw   rw      s&    
 Y^ %Br   rw   c                   &    e Zd ZddZd Zd Zd Zy)DXAppCompleterNc                      g | _         || _        y r   )ro   	installed)ry   r   s     r   rz   zDXAppCompleter.__init__  s    "r   c                 v   	 d }t        |      dkD  rL|j                  d      rt        |      dkD  r	|dd  dz   }n$t        |      dkD  sdj                  |      s|dz   }t        j                  |ddd| j                  d udi	      D cg c],  }| j                  | j                  |d
   d   k(  s%|d
   d   . }}|D cg c]  }|j                  |      s| c}| _        |dk7  rf|j                  dd t        |             rH|D cg c]  }d|z   	 }}| xj
                  |D cg c]  }|j                  |      s| c}z  c_        y y y c c}w #  t        j                  d      D cg c],  }| j                  | j                  |d
   d   k(  s%|d
   d   . nc c}w }}Y xY wc c}w c c}w c c}w )Nr   zapp-   rF   rG   rI   T)r-   r   )r-   rJ   rO   rO   r   r-   )rO   r0   )r;   r   rR   	find_appsr   ro   )ry   r@   
name_queryrY   appnamesr-   appnames_with_prefixs          r   r|   z DXAppCompleter._populate_matches   sM   
	qJ6{Q$$V,Vq!'c!1J[1_F,=,=f,E!'#JAEU_kq  ~F  QU  ei  es  es  {  e  HA  }B  BC  Uv  GK  GU  GU  G]  bf  bp  bp  tz  {E  tF  GR  tS  bSz*62  UH  U *2MT__V5LMR<F--f\c&k.BC@H#IVd]#I #ILL.B^ddooV\F]T^^L D< U	qAEY]A^  qvbfbpbpbx  ~B  ~L  ~L  PV  Wa  Pb  cn  Po  ~oz*62  q  qH  qM#I^sT   BE 	&E0
E:E  F,F,	F1'F6>F6E F).&F 
F F)c                     t        d|      |dz
  k7  rt        d|d |       d   }d|v rg S | j                  |       | j                  S Nr]   r
   r$   )r   r   r|   ro   r   s        r   r   zDXAppCompleter.get_matches1  sT      T*eai7$S$v,7;F &=Iv&||r   c                 ~    |dk(  r| j                  |       |t        | j                        k  r| j                  |   S y r   r   r   s      r   r   zDXAppCompleter.complete=  :    A:""4(3t||$$<<&&r   r   r   r   r   rz   r|   r   r   r   r   r   r   r     s    #_"
r   r   c                   $    e Zd Zd Zd Zd Zd Zy)LocalCompleterc                     g | _         y r   )ro   )ry   s    r   rz   zLocalCompleter.__init__G  s	    r   c                 8    ddl m}  |       } ||      | _        y )Nr   )FilesCompleter)argcomplete.completersr   ro   )ry   r@   r   	completers       r   r|   z LocalCompleter._populate_matchesJ  s    9"$	 (r   c                 <    | j                  |       | j                  S r   r~   r   s        r   r   zLocalCompleter.get_matchesO  r   r   c                 ~    |dk(  r| j                  |       |t        | j                        k  r| j                  |   S y r   r   r   s      r   r   zLocalCompleter.completeS  r   r   Nr   r   r   r   r   r   F  s    )
r   r   c                       e Zd Zd Zd Zy)NoneCompleterc                     g S r   r   r   s        r   r   zNoneCompleter.get_matches]  s    	r   c                      y r   r   r   s      r   r   zNoneCompleter.complete`  s    r   N)r   r   r   r   r   r   r   r   r   r   \  s    r   r   c                   $    e Zd Zd Zd Zd Zd Zy)ListCompleterc                      || _         g | _        y r   )completionsro   )ry   r   s     r   rz   zListCompleter.__init__d  s    &r   c                 p    | j                   D cg c]  }|j                  |      s| c}| _        y c c}w r   )r   r   ro   )ry   r@   anss      r   r|   zListCompleter._populate_matchesh  s(    '+'7'7R3>>&;QRRs   33c                 n   t        d|      |dz
  k7  rt        d|d |       d   }| j                  |       |j                  d      dk7  rat	        t        | j                              D ]@  }| j                  |   | j                  |   j                  d      dz   d  | j                  |<   B | j                  S r   )r   r   r|   r:   ranger;   ro   )ry   r   r   r@   r   is         r   r   zListCompleter.get_matchesk  s      T*eai7$S$v,7;Fv&<<"3t||,- S"&,,q/$,,q/2G2G2Lq2P2Q"RQS ||r   c                 ~    |dk(  r| j                  |       |t        | j                        k  r| j                  |   S y r   r   r   s      r   r   zListCompleter.completew  r   r   Nr   r   r   r   r   r   c  s    S
r   r   c                   $    e Zd Zd Zd Zd Zd Zy)MultiCompleterc                      || _         g | _        y r   )
completersro   )ry   r   s     r   rz   zMultiCompleter.__init__  s    $r   c           	          g | _         | j                  D ])  }| xj                   |j                  dd|d      z  c_         + | j                   S )Nr0   r   ro   r   r   )ry   r@   r   s      r   r|   z MultiCompleter._populate_matches  sG     	EILLI11"aDDL	E||r   c           	          g | _         | j                  D ])  }| xj                   |j                  ||||      z  c_         + | j                   S r   r   )ry   r   r   r@   r   r   s         r   r   zMultiCompleter.get_matches  sI      	OILLI11$vvNNL	O||r   c                 ~    |dk(  r| j                  |       |t        | j                        k  r| j                  |   S y r   r   r   s      r   r   zMultiCompleter.complete  r   r   Nr   r   r   r   r   r     s    r   r   c                      e Zd Z edd      Z edd      Z edd      Z e       Zg  eddd	d
       edddd       edddd       edddd       edddd       edddd       eddd	d        ed!ddd"       ed#ddd$       ed%ddd&       ed'd(d)d*       ed+d,d-d.       ed/d0d1d2       ed3d4d5d6       ed7d8d9d:       ed;dd	d<       ed=ddd>       ed?ddd@       edAdddB       edCdddD       edEdddF       edGdddH       edIdddJ       edKdddL       edMdd)dN       edOd(d1dP       edQd,dd       edRd0d9dS       edTd4dUdV       edWddd        edXddd"       edYddd$       edZdd)d&       ed[d(d1d*       ed\d,d5d.       ed]d0d9d2       ed^d4dUd6       ed_d8d`d:       edaddd<       edbddd>       edcddd@       edddd)dB       eded(d1df       edgd,d5dh       edid0d9dj       edkd4dUdl       edmdddH       edndddJ       edodd)dL       edpdd1dN       edqd(d9dP       edrd,dUd       edsd0d`dt       edud4dvdV       edwddd        edxddd"       edydd)d$       edzdd1d&       ed{d(d9d*       ed|d,dUd.       ed}d0d`d2       ed~d4dvd6       edd8dd:       edddd       edddd&       edddd*       edddd2       edd(dd:       edd0dd       edddd       edddd       eddd)d       eddd-d       eddd5d       edd,dUd       edd4dvd       edd8ddh      D ]  Z	e	ee	j                  <     e       Z edddd(       edddd0       edddd8       edddd       edddd8       edddd8       edddd8       edddd       edddd       edddd8       edddd8       edddd       edddd       edddd@       edddd8       edddd8       edddd       edddd       edd(ddū       edd0ddȫ       edd8dd˫      fD ]  Z	e	ee	j                  <     e       Zg  edddd
       edddd       edddd       edddd       edddd       edddd<       edddd>       edddd@       eddddB       eddddD       eddddH       eddddJ       eddddL       eddddN       edd(ddP       eddddH       eddddJ       eddddL       eddddN       edd(ddP       edddd       edddd&       edddd*       edddd2       edd(dd:       edddd       edddd       edddd       edddd       edddd       edd(dd      D ]  Z	e	ee	j                  <     e       Zg  eddd)ddd       edd(d1ddd       edd(d1ddd       edd0d9ddd       edd0d9ddd       edd,d5ddd)       edd,d5ddd)       eddddd d       eddddd d       eddd)dNd d       edd(d1dd d       edd0d9d*d d       edd,d5d2dd-       ed	d4dUd2dd-       ed
ddvd:dd5       edddddd       edddddd       eddd)dNdd       edd(d1ddd       edd0d9ddd       edd,d5ddd-       edd4dUddd-       edddvddd5       eddd1dNdd       edd(d9ddd       edd0dddd)       edddӐdd d       ed!dd"d#d$d       ed%dd&dd'd       ed(d,d)d*d+d)       ed,d-d.d*d/d       ed0d1d2d3d4d5      D ]  Z	e	ee	j                  <     e       Z ed6dd9d7d       ed8d,d`dd       ed9dd:dd      fD ]  Z	e	ee	j                  <     e       Zg  ed;dd<d(       ed=dd>d?       ed@ddAd<       edBddCd>       edDd(dEd@       edFddd       edGdd<d<       edHdd>d>       edIddAd@       edJddCdB       edKddEdD       edLdd>d(       edMddAd?       edNddCd<       edOddd<       edPddd>       edQdddB       edRdd)df       edSdTdUdt       edVd0d9dj       edWddAd(       edXddd?       edYddd<       edZddd>       ed[d(dd@       ed\ddd]       ed^ddd_       ed`dddt       edad(ddb       edcdddd       ededd>d       edfddAd]       edgddCd_       edhddEdt       edidd	d       edjddd       edkddd]       edlddd_       edmdddV       edndddo       edpd4d5dq       edrddsd<       edtdddu       edvdd<dw       edxdd>dy       edzddAdu       ed{ddd|       ed}ddd~       edddd       edddd       eddddu       edddd       edddd|       eddd)d~      D ]  Z	e	ee	j                  <    ed   Z e       Zej%                  e       ej%                  e       ej%                  e       ej%                  e        e       Zej%                  e       ej%                  e       ej%                  e        eej+                               Zd Zd Zy(  InstanceTypesCompleterInstanceTypeSpec)Name	CPU_Cores
Memory_GiB
Storage_GBGpuInstanceTypeSpec)r   r   r   r   GPUGPU_Memory_GiBFpgaInstanceTypeSpec)r   r   r   r   FPGAmem1_ssd1_v2_x2   g      @2   mem1_ssd1_v2_x4r   g       @rH   mem1_ssd1_v2_x8   g      0@   mem1_ssd1_v2_x16   g      @@i  mem1_ssd1_v2_x36$   g      R@i  mem1_ssd1_v2_x72H   g      b@i  mem1_ssd2_v3_x2v   mem1_ssd2_v3_x4   mem1_ssd2_v3_x8i  mem1_ssd2_v3_x16i  mem1_ssd2_v3_x32    g      P@il  mem1_ssd2_v3_x480   g      X@i"  mem1_ssd2_v3_x64@   g      `@i  mem1_ssd2_v3_x96`   g      h@iD  mem1_ssd2_v3_x128   g      p@i  mem1_ssd2_v2_x2   mem1_ssd2_v2_x4i@  mem1_ssd2_v2_x8i  mem1_ssd2_v2_x16i   mem1_ssd2_v2_x36i@  mem1_ssd2_v2_x72i  mem2_ssd1_v2_x2K   mem2_ssd1_v2_x4   mem2_ssd1_v2_x8i,  mem2_ssd1_v2_x16iX  mem2_ssd1_v2_x32i  mem2_ssd1_v2_x48mem2_ssd1_v2_x64i`	  mem2_ssd1_v2_x96g      x@i  mem2_ssd2_v3_x2mem2_ssd2_v3_x4mem2_ssd2_v3_x8mem2_ssd2_v3_x16mem2_ssd2_v3_x32mem2_ssd2_v3_x48mem2_ssd2_v3_x64mem2_ssd2_v3_x96mem2_ssd2_v3_x128g      @mem2_ssd2_v2_x2mem2_ssd2_v2_x4mem2_ssd2_v2_x8mem2_ssd2_v2_x16mem2_ssd2_v2_x32i 
  mem2_ssd2_v2_x48i   mem2_ssd2_v2_x64i   mem2_ssd2_v2_x96i8  mem3_ssd1_v2_x2mem3_ssd1_v2_x4mem3_ssd1_v2_x8mem3_ssd1_v2_x16mem3_ssd1_v2_x32mem3_ssd1_v2_x48mem3_ssd1_v2_x64i  mem3_ssd1_v2_x96g      @mem3_ssd2_v3_x2mem3_ssd2_v3_x4mem3_ssd2_v3_x8mem3_ssd2_v3_x16mem3_ssd2_v3_x32mem3_ssd2_v3_x48mem3_ssd2_v3_x64mem3_ssd2_v3_x96mem3_ssd2_v3_x128g      @mem3_ssd2_v2_x2g     .@i  mem3_ssd2_v2_x4g     >@mem3_ssd2_v2_x8g     N@mem3_ssd2_v2_x16g     ^@mem3_ssd2_v2_x32g     n@mem3_ssd2_v2_x64g     ~@i`;  mem3_ssd3_x2i  mem3_ssd3_x4i	  mem3_ssd3_x8i  mem3_ssd3_x12   iL  mem3_ssd3_x24   i:  mem3_ssd3_x48i0u  mem3_ssd3_x96i`  mem4_ssd1_x128g     @zazure:mem1_ssd1_x2g333333@zazure:mem1_ssd1_x4g333333@zazure:mem1_ssd1_x8gffffff/@zazure:mem1_ssd1_x16gffffff?@   zazure:mem2_ssd1_x1r
   g      @zazure:mem2_ssd1_x2g      @zazure:mem2_ssd1_x4g      ,@zazure:mem2_ssd1_x8g      <@zazure:mem2_ssd1_x16g      L@i   zazure:mem3_ssd1_x2zazure:mem3_ssd1_x4zazure:mem3_ssd1_x8zazure:mem3_ssd1_x16g      \@zazure:mem3_ssd1_x20   g     a@zazure:mem4_ssd1_x2zazure:mem4_ssd1_x4zazure:mem4_ssd1_x8zazure:mem4_ssd1_x16g      l@zazure:mem4_ssd1_x32g      |@i   zazure:mem5_ssd2_x64g      @i    zazure:mem5_ssd2_x128g     h@i @  zoci:mem1_ssd1_v3i_x2zoci:mem1_ssd1_v3i_x4zoci:mem1_ssd1_v3i_x8g333333/@zoci:mem1_ssd1_v3i_x16gL?@zoci:mem1_ssd1_v3i_x36g33333Q@zoci:mem1_ssd2_v3i_x2zoci:mem1_ssd2_v3i_x4zoci:mem1_ssd2_v3i_x8zoci:mem1_ssd2_v3i_x16zoci:mem1_ssd2_v3i_x36zoci:mem2_ssd1_v3i_x2zoci:mem2_ssd1_v3i_x4zoci:mem2_ssd1_v3i_x8zoci:mem2_ssd1_v3i_x16g     @O@zoci:mem2_ssd1_v3i_x32g     @_@zoci:mem3_ssd1_v3i_x2zoci:mem3_ssd1_v3i_x4zoci:mem3_ssd1_v3i_x8zoci:mem3_ssd1_v3i_x16zoci:mem3_ssd1_v3i_x32g     @o@zoci:mem3_ssd2_v3i_x2zoci:mem3_ssd2_v3i_x4zoci:mem3_ssd2_v3i_x8zoci:mem3_ssd2_v3i_x16zoci:mem3_ssd2_v3i_x32zoci:mem3_ssd3_v3i_x2zoci:mem3_ssd3_v3i_x4zoci:mem3_ssd3_v3i_x8zoci:mem3_ssd3_v3i_x12g33333sW@zoci:mem3_ssd3_v3i_x24g     pg@zoci:mem3_ssd3_v3i_x32i N  mem2_ssd1_gpu_x16   z1 NVIDIA T4mem2_ssd1_gpu_x32mem2_ssd1_gpu1_x32mem2_ssd1_gpu_x64mem2_ssd1_gpu1_x64mem2_ssd1_gpu_x48z4 NVIDIA T4mem2_ssd1_gpu4_x48mem2_ssd2_gpu1_x4   z1 NVIDIA A10Gg      8@mem2_ssd2_gpu1_x8i  mem2_ssd2_gpu1_x16mem2_ssd2_gpu1_x32mem2_ssd2_gpu1_x64mem2_ssd2_gpu4_x48z4 NVIDIA A10Gmem2_ssd2_gpu4_x96mem2_ssd2_gpu8_x192   z8 NVIDIA A10Gmem2_ssd2_gpu1_v2_x4z1 NVIDIA L4mem2_ssd2_gpu1_v2_x8mem2_ssd2_gpu1_v2_x16mem2_ssd2_gpu1_v2_x32mem2_ssd2_gpu1_v2_x64iX  mem2_ssd2_gpu4_v2_x48i  z4 NVIDIA L4mem2_ssd2_gpu4_v2_x96mem2_ssd2_gpu8_v2_x192i`  z8 NVIDIA L4mem3_ssd1_gpu1_x16mem3_ssd1_gpu1_x32zazure:mem3_ssd2_gpu4_x64zoci:mem2_ssd1_GPU_v2_x24i  z1 NVIDIA P100zoci:mem3_ssd1_GPU_v3_x12gU@   z1 NVIDIA V100zoci:mem3_ssd1_GPU_v3_x24ge@z2 NVIDIA V100zoci:mem3_ssd1_GPU_v3_x48gu@i  z4 NVIDIA V100zoci:mem3_ssd2_GPU_vA10_x30   gLm@z1 NVIDIA A10zoci:mem3_ssd2_GPU_vA10_x60<   gL}@i  z2 NVIDIA A10g      H@mem3_ssd2_fpga1_x24i  mem3_ssd2_fpga2_x48mem3_ssd2_fpga8_x192g      @mem1_ssd1_x2gffffff@mem1_ssd1_x4g      @P   mem1_ssd1_x8g      .@mem1_ssd1_x16g      >@mem1_ssd1_x32g      N@mem1_ssd1_x36mem1_ssd2_x2mem1_ssd2_x4mem1_ssd2_x8mem1_ssd2_x16mem1_ssd2_x36mem2_ssd1_x2mem2_ssd1_x4mem2_ssd1_x8mem2_ssd2_x2mem2_ssd2_x4mem2_ssd2_x8mem2_ssd2_x16mem2_ssd2_x40(   g      d@mem2_ssd2_x64mem3_ssd1_x2mem3_ssd1_x4mem3_ssd1_x8mem3_ssd1_x16mem3_ssd1_x32mem3_ssd2_x4i   mem3_ssd2_x8i@  mem3_ssd2_x16mem3_ssd2_x32i   mem1_hdd1_x2g      @mem1_hdd1_x4mem1_hdd1_x8mem1_hdd1_x16mem1_hdd1_x36mem1_hdd1_v2_x2mem1_hdd1_v2_x4mem1_hdd1_v2_x8mem1_hdd1_v2_x16mem1_hdd1_v2_x36mem1_hdd1_v2_x72i   mem1_hdd1_v2_x96i%  mem1_hdd2_x1g333333?mem1_hdd2_x8i  mem2_hdd2_x1i  mem2_hdd2_x2iH  mem2_hdd2_x4mem2_hdd2_v2_x2i  mem2_hdd2_v2_x4i  mem3_hdd2_x2g1@i  mem3_hdd2_x4gA@iR  mem3_hdd2_x8gQ@mem3_hdd2_v2_x2i  mem3_hdd2_v2_x4mem3_hdd2_v2_x8c                 @    	 | j                   |   S # t        $ r Y y w xY wr   )instance_type_names
IndexErrorr   s      r   r   zInstanceTypesCompleter.complete  s*    	++E22 		s    	c                 d    | j                   D cg c]  }|j                  |      s| c}S c c}w r   )r  r   )ry   r@   parsed_argskwargsr-   s        r   __call__zInstanceTypesCompleter.__call__  s'    !%!9!9UT__V=TUUUs   --N)r   r   r   r   r   r   r   r	   aws_preferred_instance_typesr   r   azure_preferred_instance_typesoci_preferred_instance_typesgpu_instance_typesfpga_instance_typesaws_other_instance_typesdefault_instance_typestandard_instance_typesupdateinstance_typesrQ   keysr  r   r  r   r   r   r   r     sX   !"46gh$%:  =G  H%&<>wx $/= VE0!S"= VE0!S#>VE0!T3?VE 12tSAVE 12tSA	VE
 12udCVE 0!S#>VE 0!S#>VE 0!T3?VE 12tSAVE 12tTBVE 12tTBVE 12udCVE 12udCVE 2CEVE" 0!S#>#VE$ 0!S#>%VE& 0!T3?'VE( 12tTB)VE* 12tTB+VE, 12udC-VE0 0!S"=1VE2 0!T3?3VE4 0!T3?5VE6 12tSA7VE8 12udC9VE: 12udC;VE< 12udC=VE> 12udC?VEB 0!S#>CVED 0!T3?EVEF 0!T3?GVEH 12tSAIVEJ 12udCKVEL 12udCMVEN 12udCOVEP 12udCQVER 2CESVEV 0!S#>WVEX 0!T3?YVEZ 0!T3?[VE\ 12tTB]VE^ 12udC_VE` 12udCaVEb 12udCcVEd 12udCeVEh 0!T2>iVEj 0!T3?kVEl 0!T3?mVEn 12ucBoVEp 12udCqVEr 12udCsVEt 12udCuVEv 12udCwVEz 0!T3?{VE| 0!T3?}VE~ 0!T3?VE@ 12ucBAVEB 12udCCVED 12udCEVEF 12udCGVEH 12udCIVEJ 2CFKVEN 0!UC@OVEP 0!T3?QVER 0!T4@SVET 12udCUVEV 12udCWVEX 12ueDYVE\ ~q$=]VE^ ~q$=_VE` ~q$=aVEb D$?cVEd E5AeVEf E5AgVEh E5AiVEl /fdCmVE W1n 01$QVV,oW1t &1]"3QR@3QR@3QcB4b$D3QSA3QSA3QcB3QcB4b$D3QcB3QcB3QcB4b%E4b%E3QcB3QcB3QsC4b%E4b%F4b&$G5sFEJ1L 32 23&qvv.338 $/= #K5q#rB #K5q#sC#K5q$D#K 6D#F#K 6D#F	#K 5q#sC#K 5q#sC#K 5q$D#K 6D$G#K 6D$G#K 5q#rB#K 5q$D#K 5q$D#K 6D#F#K  6E4H!#K$ 5q$C%#K& 5q$D'#K( 5q$D)#K* 6E3G+#K, 6E4H-#K0 5q$D1#K2 5q$D3#K4 5q$E5#K6 6E4H7#K8 6E4H9#K< 5q$E=#K> 5q$E?#K@ 5q$EA#KB 6D$GC#KD 6E5IE#KF 6E5IG#K $1H 01$QVV,I$1L %#h!"5r4mUYZ #h!"5r5#}VZ[#h!"6E3W[\#h ""5r5#}VZ[#h ""6E3W[\	#h
 ""5r5#}VZ[#h ""6E3W[\#h ""5q$_VZ[#h ""5q$_VZ[#h ""6D#X\]#h ""6E3Y]^#h ""6E4Z^_#h ""6E4Z^_#h ""6E4Z^_#h ""7eT?\ab#h" ""8!T3W[\##h$ ""8!T3W[\%#h& ""92tS-Y]^'#h( ""92uc=Z^_)#h* ""92udM[_`+#h, ""92udM[_`-#h. ""92udM[_`/#h0 "":Cm]bc1#h2 ""6E3W[\3#h4 ""6E3W[\5#h8 ""<b%}^bc9#h< ""<b$_^bc=#h> ""<b$_^bc?#h@ ""<b%o_cdA#hB ""<b%o_cdC#hD "">E3P^`deE#hF "">E4Q_aefG#h $'H &'166"I$'L &-"#8"eS!L"#8"eT1M"#93aPR ( '(AFF#(
  +}AB~q#r: AB~q#r:AB~q$<AB D#>AB D#>	AB
 D#>AB ~q#s;AB ~q#s;AB ~q$<AB D$?AB D$?AB ~q#r:AB ~q$;AB ~q$<AB" ~q#s;#AB$ ~q$<%AB& ~q$='AB( D$?)AB* E4@+AB, E4@-AB0 ~q$;1AB2 ~q$;3AB4 ~q$<5AB6 E3?7AB8 E3?9AB< ~q$<=AB> ~q$=?AB@ E4@AABB E4@CABF ~q$<GABH ~q#s;IABJ ~q$<KABL D$?MABN D$?OABR 0!S#>SABT 0!S#>UABV 0!T3?WABX 12tTBYABZ 12tTB[AB\ 12udC]AB^ 12udC_ABb ~q#s;cABd ~q#t<eABh ~q#s;iABj ~q#s;kABl ~q$=mABp 0!S$?qABr 0!T4@sABv ~q$<wABx ~q$<yABz ~q$={AB~ 0!T3?AB@ 0!T4@AABB 0!T4@CAB B-D ,- (EB-H 99JK)m""#?@""#AB""#?@""#;< ]N12,--.~2245Vr   r   )NNN)NNNFNN)&r   
__future__r   r   r   r   rg   argcompleter   collectionsr   r	   rR   resolverr   r   r   r   r   r   printingr   r   r"   r    r(   r.   r3   rB   rZ   ru   rw   r   r   r   r   r   r   r   r   r   <module>r     s   "
 S R 
  / 9 9 42$$!	@4 EI/3,\ BFIMZx B) )V ,  : 8mV mVr   