Format: application/x-python-code
⬇ Download File (24.9 KB)
   1  o
   2  
   3  ��h�f�@s�dZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
   4  mZmZm
   5  Z
   6  mZmZmZmZmZmZmZmZmZejdkrNddlmZnddl
   7  mZGdd	�d	e�ZGd
   8  d�de�Zd[dededededef
   9  dd�Z deeeefdeefdd�Z!d\dedededefdd�Z"e�#d �Z$d!edefd"d#�Z%d!edefd$d%�Z&d&edefd'd(�Z'd]d&ed*edeefd+d,�Z(d&edefd-d.�Z)d/edefd0d1�Z*Gd2d3�d3e�Z+Gd4d5�d5e�Z,Gd6d7�d7e,�Z-	
  10  d^d8eed9ed:edeeefd;d<�Z.d=eed:ed>ed?edeeeff
  11  d@dA�Z/edB�Z0dCee0dDedEe0de0fdFdG�Z1	
  12  	d_dHd)dI�dJeed:edKeed>ed?ede
  13  eeeeeefffdLdM�Z2	
  14  	N	)	
  15  d`dJeed:edOed?edPedefdQdR�Z3	dadUeedVedWedXedef
  16  dYdZ�Z4dS)bz~
  17  Utilities for working with strings and text.
  18  
  19  Inheritance diagram:
  20  
  21  .. inheritance-diagram:: IPython.utils.text
  22     :parts: 3
  23  �N)�	Formatter)�Path)�List�Dict�Tuple�Optional�cast�Sequence�Mapping�Any�Union�Callable�Iterator�TypeVar)��)�Selfc@s�eZdZUdZeeed<eed<eeed<deefdd�Ze	e�Z
  24  Zdefdd	�Ze	e�Z
  25  Zdefd
  26  d�Ze	e�ZZdeefdd
  27  �Ze	e�ZZdS)�LSStringa`String derivative with a special access attributes.
  28  
  29      These are normal strings, but with the special attributes:
  30  
  31          .l (or .list) : value as list (split on newlines).
  32          .n (or .nlstr): original value (the string itself).
  33          .s (or .spstr): value as whitespace-separated string.
  34          .p (or .paths): list of path objects (requires path.py package)
  35  
  36      Any values which require transformations are computed only once and
  37      cached.
  38  
  39      Such strings are very useful to efficiently interact with the shell, which
  40      typically only understands whitespace-separated options for commands.�_LSString__list�_LSString__spstr�_LSString__paths�returncCs.z|jWSty|�d�|_|jYSw�N�
  41  )r�AttributeError�split��self�r�Hc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/utils/text.py�get_list<�
  42  �zLSString.get_listcCs0z|jWSty|�dd�|_|jYSw)Nr� )rr�replacerrrr�	get_spstrEs
  43  �zLSString.get_spstrcC�|S�Nrrrrr�	get_nlstrN�zLSString.get_nlstrcCs8z|jWStydd�|�d�D�|_|jYSw)NcS� g|]}tj�|�rt|��qSr��os�path�existsr��.0�prrr�
  44  <listcomp>W� z&LSString.get_paths.<locals>.<listcomp>r)rrrrrrr�	get_pathsSs
  45  �zLSString.get_pathsN)�__name__�
  46  __module__�__qualname__�__doc__r�str�__annotations__rr �property�l�listr$�s�spstrrr'�n�nlstrr3r0�pathsrrrrr(s
  47  rc	@seZdZUdZeed<eed<eeed<defdd�Z	e
  48  e	�ZZdefdd	�Z
  49  e
  50  e
  51  �ZZdefd
  52  d�Ze
  53  e�ZZdeefdd
  54  �Ze
  55  e�ZZ		ddeeeegejedBffdedeedefdd�Zdeedeeefdd�Z		ddeeededefdd�Z dS)�SLista�List derivative with a special access attributes.
  56  
  57      These are normal lists, but with the special attributes:
  58  
  59      * .l (or .list) : value as list (the list itself).
  60      * .n (or .nlstr): value as a string, joined on newlines.
  61      * .s (or .spstr): value as a string, joined on spaces.
  62      * .p (or .paths): list of path objects (requires path.py package)
  63  
  64      Any values which require transformations are computed only once and
  65      cached.�
  66  _SList__spstr�
  67  _SList__nlstr�
  68  _SList__pathsrcCr%r&rrrrrr zr(zSList.get_listcC�.z|jWStyd�|�|_|jYSw)Nr")rCr�joinrrrrr$r!zSList.get_spstrcCrFr)rDrrGrrrrr'�r!zSList.get_nlstrcCs2z|jWStydd�|D�|_|jYSw)NcSr)rr*r.rrrr1�r2z#SList.get_paths.<locals>.<listcomp>)rErrrrrr3�s
  69  �zSList.get_pathsFN�pattern�prune�fieldcsndtdtf�fdd��t�t�r�fdd��n��|s)t|���fdd�|D��St|���fd	d�|D��S)
  70  a�Return all strings matching 'pattern' (a regex or callable)
  71  
  72          This is case-insensitive. If prune is true, return all items
  73          NOT matching the pattern.
  74  
  75          If field is specified, the match must occur in the specified
  76          whitespace-separated field.
  77  
  78          Examples::
  79  
  80              a.grep( lambda x: x.startswith('C') )
  81              a.grep('Cha.*log', prune=1)
  82              a.grep('chm', field=-1)
  83          r=rcs8�dur|S|��}z|�}|WStyYdSw)N�)r�
  84  IndexError)r=�partsZtgt�rJrr�match_target�s�z SList.grep.<locals>.match_targetcst��|tj�Sr&)�re�search�
  85  IGNORECASE��x)rHrr�<lambda>�szSList.grep.<locals>.<lambda>csg|]
  86  }��|��r|�qSrr�r/�el�rO�predrrr1��zSList.grep.<locals>.<listcomp>csg|]
  87  }��|��s|�qSrrrVrXrrr1�rZ)r8�
  88  isinstance�type)rrHrIrJr)rJrOrHrYr�grep�s
  89  
  90  z
  91  SList.grep�fieldsc
  92  Gs~t|�dkr
  93  dd�|D�St�}dd�|D�D]%}g}|D]}z	|�||�Wqty1Yqw|r<|�d�|��q|S)a{Collect whitespace-separated fields from string list
  94  
  95          Allows quick awk-like usage of string lists.
  96  
  97          Example data (in var a, created by 'a = !ls -l')::
  98  
  99              -rwxrwxrwx  1 ville None      18 Dec 14  2006 ChangeLog
 100              drwxrwxrwx+ 6 ville None       0 Oct 24 18:05 IPython
 101  
 102          * ``a.fields(0)`` is ``['-rwxrwxrwx', 'drwxrwxrwx+']``
 103          * ``a.fields(1,0)`` is ``['1 -rwxrwxrwx', '6 drwxrwxrwx+']``
 104            (note the joining by space).
 105          * ``a.fields(-1)`` is ``['ChangeLog', 'IPython']``
 106  
 107          IndexErrors are ignored.
 108  
 109          Without args, fields() just split()'s the strings.
 110          rcS�g|]}|���qSr�rrVrrrr1��z SList.fields.<locals>.<listcomp>cSr_rr`)r/�frrrr1�rar")�lenrB�appendrLrG)rr^�resrWZ	lineparts�fdrrrr^�s��zSList.fields�numsc	s��dur�fdd�|D�}ndd�|D�}|rFtt|��D](}d�dd�||dD��}zt|�}Wnty>d}Ynw|||d<q|��t|�dd�|D��S)	z�sort by specified fields (see fields())
 111  
 112          Example::
 113  
 114              a.sort(1, nums = True)
 115  
 116          Sorts a by second field, in numerical order (so that 21 > 3)
 117  
 118          Ncs g|]}t|g����|g�qSr)rBr^�r/�linerNrrr1�r2zSList.sort.<locals>.<listcomp>cSsg|]}||g�qSrrrhrrrr1�rarKcSsg|]}|��r|�qSr)�isdigit)r/�chrrrr1��rcSsg|]}|d�qS)�r)r/�trrrr1ra)�rangercrG�int�
 119  ValueError�sortr\)rrJrgZdsu�iZnumstrr?rrNrrr�s�z
 120  SList.sort�FN)NF)!r4r5r6r7r8r9rrrr r:r;r<r$r=r>r'r?r@r3r0rArr
 121  rrP�Match�boolrrpr]r^rrrrrrrBisD
 122  ����
 123  �(&�
 124  ���rB�F�instr�nspaces�ntabs�flattenrcCsr|durdSd|d|}|rt�dtj�}nt�dtj�}t�|||�}|�tj|�r7|dt|��S|S)a�Indent a string a given number of spaces or tabstops.
 125  
 126      indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
 127  
 128      Parameters
 129      ----------
 130      instr : basestring
 131          The string to be indented.
 132      nspaces : int (default: 4)
 133          The number of spaces to be indented.
 134      ntabs : int (default: 0)
 135          The number of tabs to be indented.
 136      flatten : bool (default: False)
 137          Whether to scrub existing indentation.  If True, all lines will be
 138          aligned to the same indentation.  If False, existing indentation will
 139          be strictly increased.
 140  
 141      Returns
 142      -------
 143      str : string indented by ntabs and nspaces.
 144  
 145      N�	r"z^\s*�^)rP�compile�	MULTILINE�sub�endswithr+�lineseprc)rxryrzr{�ind�patZoutstrrrr�indentsr��argcCst|t�r|gS|S)a�Always return a list of strings, given a string or list of strings
 146      as input.
 147  
 148      Examples
 149      --------
 150      ::
 151  
 152          In [7]: list_strings('A single string')
 153          Out[7]: ['A single string']
 154  
 155          In [8]: list_strings(['A single string in a list'])
 156          Out[8]: ['A single string in a list']
 157  
 158          In [9]: list_strings(['A','list','of','strings'])
 159          Out[9]: ['A', 'list', 'of', 'strings']
 160      )r[r8)r�rrr�list_strings=s
 161  r�rK�N�*�txt�width�markcCsR|s
 162  ||d|�S|t|�dt|�d}|dkrd}||}d|||fS)a�Return the input string centered in a 'marquee'.
 163  
 164      Examples
 165      --------
 166      ::
 167  
 168          In [16]: marquee('A test',40)
 169          Out[16]: '**************** A test ****************'
 170  
 171          In [17]: marquee('A test',40,'-')
 172          Out[17]: '---------------- A test ----------------'
 173  
 174          In [18]: marquee('A test',40,' ')
 175          Out[18]: '                 A test                 '
 176  
 177      N�rz%s %s %s�rc)r�r�r�ZnmarkZmarksrrr�marqueeUsr�z^(\s+)�strngcCs*tjddtd�t�|�}|r|��SdS)z/Return the number of initial spaces in a stringz�`num_ini_spaces` is Pending Deprecation since IPython 8.17.It is considered for removal in in future version. Please open an issue if you believe it should be kept.r���
 178  stacklevel�categoryr)�warnings�warn�PendingDeprecationWarning�
 179  ini_spaces_re�match�end)r�Z
 180  ini_spacesrrr�num_ini_spacesqs�
 181  r�cCst�dtj�}|�d|�}|S)zTFormat a string for screen printing.
 182  
 183      This removes some latex-type format codes.z\\$rK)rPr~rr�)r�Zpar_rerrr�
 184  format_screen�sr��textcCsV|�d�r
 185  t�|�S|�dd�}t|�dkrt�|�S|\}}t�|�}d�||g�S)z�Equivalent of textwrap.dedent that ignores unindented first line.
 186  
 187      This means it will still dedent strings like:
 188      '''foo
 189      is a bar
 190      '''
 191  
 192      For use in wrap_paragraphs.
 193      rrm)�
 194  startswith�textwrap�dedentrrcrG)r�Zsplits�first�restrrrr��s
 195  
 196  
 197  
 198  r��P�ncolscCs�tjddtd�t�dtj�}t|���}|�|�ddd�}g}t�dtj�}|D]}|�	|�dur9t
 199  �||�}|�|�q*|S)aWrap multiple paragraphs to fit a specified width.
 200  
 201      This is equivalent to textwrap.wrap, but with support for multiple
 202      paragraphs, as separated by empty lines.
 203  
 204      Returns
 205      -------
 206      list of complete paragraphs, wrapped to fill `ncols` columns.
 207      z�`wrap_paragraphs` is Pending Deprecation since IPython 8.17.It is considered for removal in in future version. Please open an issue if you believe it should be kept.r�r�z
 208  \n(\s*\n)+Nz\n\s+)
 209  r�r�r�rPr~rr��striprrQr��fillrd)r�r�Zparagraph_reZ
 210  paragraphsZout_psZ	indent_rer0rrr�wrap_paragraphs�s
 211  �r�csn|��}d�t|�D]}tt|��dkrn|d}|tjvs#|dkr(�d7�q
 212  d��fdd�|D��}|S)aNStrip leading email quotation characters ('>').
 213  
 214      Removes any combination of leading '>' interspersed with whitespace that
 215      appears *identically* in all lines of the input text.
 216  
 217      Parameters
 218      ----------
 219      text : str
 220  
 221      Examples
 222      --------
 223  
 224      Simple uses::
 225  
 226          In [2]: strip_email_quotes('> > text')
 227          Out[2]: 'text'
 228  
 229          In [3]: strip_email_quotes('> > text\n> > more')
 230          Out[3]: 'text\nmore'
 231  
 232      Note how only the common prefix that appears in all lines is stripped::
 233  
 234          In [4]: strip_email_quotes('> > text\n> > more\n> more...')
 235          Out[4]: '> text\n> more\nmore...'
 236  
 237      So if any line has no quote marks ('>'), then none are stripped from any
 238      of them ::
 239  
 240          In [5]: strip_email_quotes('> > text\n> > more\nlast different')
 241          Out[5]: '> > text\n> > more\nlast different'
 242      rrm�>rcsg|]}|�d��qSr&r)r/�ln�Z	strip_lenrrr1�rlz&strip_email_quotes.<locals>.<listcomp>)�
 243  splitlines�ziprc�set�string�
 244  whitespacerG)r��lines�
 245  charactersZprefix_charrr�r�strip_email_quotes�s 
 246  r��sourcecCstjddtd�t�dd|�S)z�
 247      Remove ansi escape codes from text.
 248  
 249      Parameters
 250      ----------
 251      source : str
 252          Source to remove the ansi from
 253      z�`strip_ansi` is Pending Deprecation since IPython 8.17.It is considered for removal in in future version. Please open an issue if you believe it should be kept.r�r�z\033\[(\d|;)+?mrK)r�r�r�rPr�)r�rrr�
 254  strip_ansi�s	�r�c
 255  @s2eZdZdZdedededeeeffdd�ZdS)	�
 256  EvalFormatteraiA String Formatter that allows evaluation of simple expressions.
 257  
 258      Note that this version interprets a `:`  as specifying a format string (as per
 259      standard string formatting), so if slicing is required, you must explicitly
 260      create a slice.
 261  
 262      This is to be used in templating cases, such as the parallel batch
 263      script templates, where simple arithmetic on arguments is useful.
 264  
 265      Examples
 266      --------
 267      ::
 268  
 269          In [1]: f = EvalFormatter()
 270          In [2]: f.format('{n//4}', n=8)
 271          Out[2]: '2'
 272  
 273          In [3]: f.format("{greeting[slice(2,4)]}", greeting="Hello")
 274          Out[3]: 'll'
 275      �name�args�kwargsrcCst||�}||fSr&)�eval)rr�r�r��vrrr�	get_field"s
 276  zEvalFormatter.get_fieldN)r4r5r6r7r8rrr�rrrrr�s&r�c@s6eZdZdZdedeedeeefdefdd�ZdS)	�FullEvalFormatteraiA String Formatter that allows evaluation of simple expressions.
 277      
 278      Any time a format key is not found in the kwargs,
 279      it will be tried as an expression in the kwargs namespace.
 280      
 281      Note that this version allows slicing using [1:2], so you cannot specify
 282      a format string. Use :class:`EvalFormatter` to permit format strings.
 283      
 284      Examples
 285      --------
 286      ::
 287  
 288          In [1]: f = FullEvalFormatter()
 289          In [2]: f.format('{n//4}', n=8)
 290          Out[2]: '2'
 291  
 292          In [3]: f.format('{list(range(5))[2:4]}')
 293          Out[3]: '[2, 3]'
 294  
 295          In [4]: f.format('{3*2}')
 296          Out[4]: '6'
 297      �
 298  format_stringr�r�rc
 299  Cszg}|�|�D]0\}}}}|r|�|�|dur7|r!d�||g�}t|t|��}	|�|	|�}	|�|�|	d��qd�|�S)N�:rK)�parserdrGr��dict�
 300  convert_field�format_field)
 301  rr�r�r��result�literal_text�
 302  field_name�format_spec�
 303  conversion�objrrr�vformatCs�
 304  �
 305  zFullEvalFormatter.vformatN)	r4r5r6r7r8r	rr
 306  r�rrrrr�*s��
 307  ��r�c	@sJeZdZdZe�d�Zdedee	e
 308  e
 309  e
 310  e
 311  ffdd�Zdefdd�Zd	S)
 312  �DollarFormattera�Formatter allowing Itpl style $foo replacement, for names and attribute
 313      access only. Standard {foo} replacement also works, and allows full
 314      evaluation of its arguments.
 315  
 316      Examples
 317      --------
 318      ::
 319  
 320          In [1]: f = DollarFormatter()
 321          In [2]: f.format('{n//4}', n=8)
 322          Out[2]: '2'
 323  
 324          In [3]: f.format('23 * 76 is $result', result=23*76)
 325          Out[3]: '23 * 76 is 1748'
 326  
 327          In [4]: f.format('$a or {b}', a=1, b=2)
 328          Out[4]: '1 or 2'
 329      z,(.*?)\$(\$?[\w\.]+)(?=([^']*'[^']*')*[^']*$)�
 330  fmt_stringrccs��t�||�D]C\}}}}d}d}|j�|�D]%}|�dd�\}	}
 331  |
 332  �d�r-||	|
 333  7}n||	|
 334  ddfVd}|��}q|||d�|||fVqdS)NrrKrmr��$)rr��#_dollar_pattern_ignore_single_quote�finditer�groupr�r�)rr�Zliteral_txtr�r�r�Z
 335  continue_fromr��mZnew_txtZ	new_fieldrrrr�~s��
 336  
 337  �zDollarFormatter.parsecCsdS)Nz<DollarFormatter>rrrrr�__repr__�r(zDollarFormatter.__repr__N)
 338  r4r5r6r7rPr~r�r8rrrr�r�rrrrr�fs�"r�r;�max_rows�	row_firstc#s��|r*t��|t��|dk}t|�D]}�fdd�t|t��|�D�VqdStdt��|�D]}�|||�Vq2dS)z5Yield successive max_rows-sized column chunks from l.rcsg|]}�|�qSrr)r/�j�r;rrr1�raz_col_chunks.<locals>.<listcomp>N)rcro)r;r�r�r�rsrr�r�_col_chunks�s�"��r��rlist�separator_size�displaywidthcCs|tdt|�d�D]!}tttt|||���}t|�}t|�}|||d|kr*nq	||dr8|||dnd||d�S)z4Calculate optimal info to columnize a list of stringrmr)�num_columns�optimal_separator_widthr��
 339  column_widths)rorcr<�map�maxr��sum)r�r�r�r�r�Z
 340  col_widthsZ	sumlengthr�rrr�
 341  _find_optimal�s��r��T�mylistrs�defaultcCs|t|�kr|S||S)z2return list item number, or default if don't existr�)r�rsr�rrr�_get_or_default�sr�r��r�r��items�emptycs~tjddtd�tttt���|||d�}|d|d��|r/���fdd�t��D�|fS����fd	d�t��D�|fS)
 342  a�Returns a nested list, and info to columnize items
 343  
 344      Parameters
 345      ----------
 346      items
 347          list of strings to columize
 348      row_first : (default False)
 349          Whether to compute columns for a row-first matrix instead of
 350          column-first (default).
 351      empty : (default None)
 352          default value to fill list if needed
 353      separator_size : int (default=2)
 354          How much characters will be used as a separation between each columns.
 355      displaywidth : int (default=80)
 356          The width of the area onto which the columns should enter
 357  
 358      Returns
 359      -------
 360      strings_matrix
 361          nested list of string, the outer most list contains as many list as
 362          rows, the innermost lists have each as many element as columns. If the
 363          total number of elements in `items` does not equal the product of
 364          rows*columns, the last element of some lists are filled with `None`.
 365      dict_info
 366          some info to make columnize easier:
 367  
 368          num_columns
 369            number of columns
 370          max_rows
 371            maximum number of rows (final number may be less)
 372          column_widths
 373            list of with of each columns
 374          optimal_separator_width
 375            best separator width between columns
 376  
 377      Examples
 378      --------
 379      ::
 380  
 381          In [1]: l = ['aaa','b','cc','d','eeeee','f','g','h','i','j','k','l']
 382          In [2]: list, info = compute_item_matrix(l, displaywidth=12)
 383          In [3]: list
 384          Out[3]: [['aaa', 'f', 'k'], ['b', 'g', 'l'], ['cc', 'h', None], ['d', 'i', None], ['eeeee', 'j', None]]
 385          In [4]: ideal = {'num_columns': 3, 'column_widths': [5, 1, 1], 'optimal_separator_width': 2, 'max_rows': 5}
 386          In [5]: all((info[k] == ideal[k] for k in ideal.keys()))
 387          Out[5]: True
 388      z�`compute_item_matrix` is Pending Deprecation since IPython 8.17.It is considered for removal in in future version. Please open an issue if you believe it should be kept.r�r�r�r�r�cs(g|]�����fdd�t��D��qS)cs"g|]
 389  }t���|�d��qS�)r��r��r/�c)r�r��ncol�rrrr1�����2compute_item_matrix.<locals>.<listcomp>.<listcomp>�ro�r/)r�r�r��r�rr1
 390  ����z'compute_item_matrix.<locals>.<listcomp>cs(g|]�����fdd�t��D��qS)cs"g|]
 391  }t�|���d��qSr�r�r�)r�r��nrowr�rrr1r�r�r�r��r�r�r�r�r�rr1r�)r�r�r�r�r<r�rcro)r�r�r�r�r��inforr�r�compute_item_matrix�s.7���	��	�r��  �	separator�spreadcsvtjddtd�|sdSt||t��|d�\}�|r#��t�d���dd�|D�}��fd	d
 392  �}d�t||��dS)a"Transform a list of strings into a single string with columns.
 393  
 394      Parameters
 395      ----------
 396      items : sequence of strings
 397          The strings to process.
 398      row_first : (default False)
 399          Whether to compute columns for a row-first matrix instead of
 400          column-first (default).
 401      separator : str, optional [default is two spaces]
 402          The string that separates columns.
 403      displaywidth : int, optional [default is 80]
 404          Width of the display in number of characters.
 405  
 406      Returns
 407      -------
 408      The formatted string.
 409      z�`columnize` is Pending Deprecation since IPython 8.17.It is considered for removal in future versions. Please open an issue if you believe it should be kept.r�r�r)r�r�r�r�cSsg|]}td|��qSr&)�filter)r/rTrrrr1Oszcolumnize.<locals>.<listcomp>c	s(��dd�t|ttt�d��D��S)NcSsg|]
 410  \}}|�|d��qS)r")�ljust)r/�y�wrrrr1QrZz/columnize.<locals>.<lambda>.<locals>.<listcomp>r�)rGr�rrrprS�r�r�rrrUPs �zcolumnize.<locals>.<lambda>)	r�r�r�r�rcr�rprGr�)r�r�r�r�r��matrixZfmatrixZsjoinrr�r�	columnize$s$�
 411  �r� and �, �list_�last_sep�sep�wrap_item_withcsdt|�dkrdS�r�fdd�|D�}t|�dkr|dSd|�dd�|d	d
 412  �D��||d
 413  fS)a
 414      Return a string with a natural enumeration of items
 415  
 416      >>> get_text_list(['a', 'b', 'c', 'd'])
 417      'a, b, c and d'
 418      >>> get_text_list(['a', 'b', 'c'], ' or ')
 419      'a, b or c'
 420      >>> get_text_list(['a', 'b', 'c'], ', ')
 421      'a, b, c'
 422      >>> get_text_list(['a', 'b'], ' or ')
 423      'a or b'
 424      >>> get_text_list(['a'])
 425      'a'
 426      >>> get_text_list([])
 427      ''
 428      >>> get_text_list(['a', 'b'], wrap_item_with="`")
 429      '`a` and `b`'
 430      >>> get_text_list(['a', 'b', 'c', 'd'], " = ", sep=" + ")
 431      'a + b + c = d'
 432      rrKcsg|]	}d�|�f�qS)�%s%s%sr)r/�item�rrrr1ps�z!get_text_list.<locals>.<listcomp>rmrcss�|]}|VqdSr&r)r/rsrrr�	<genexpr>us�z get_text_list.<locals>.<genexpr>N�����)rcrG)rrrrrr	r�
 433  get_text_listVs
 434  ��r)rwrF)rKr�r�)r�)Frt)Fr�r�F)rrrK)5r7r+rPr��sysr�r�r�pathlibr�typingrrrrrr	r
 435  rrr
 436  rr�version_infoZtyping_extensionsrr8rr<rBrprvr�r�r�r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr�<module>s�	8
 437  A 0"%
 438  
 439   2<5����
 440  
 441  �
 442  ����
 443  
 444  �
 445  �������
 446  �c������
 447  �3������