o
    i                     @   s  U d Z ddgZddlmZ ddlmZ ddlmZ ddlZddl	Z	ddlZddl
ZddlZddlZddlZddlZddlZddlmZmZmZmZmZmZ ejd	krYdd
lmZ ndd
lmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl!m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl*m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< dZ=ee>eee>e>f  f Z?ee@d< ee>e>f ZAee@d< eG dd  d ZBd!d" ZCejDjEj ZFeGjHj ZId#d$ ejJejKejDeLfD ZMeNeOZPeNe>jQZRe.ZSe"jTZUg d%ZVd&d' ZWd(d) ZXd*ee>df fd+d,ZYdBd*ee>df fd.d/ZZd0d1 Z[e6d2d3 Z\e6d4d5 Z]e6dCd7d8Z^d9d: Z_d*e>fd;d<Z`d=d> ZaG d?d de4Zbd*e>fd@dAZcdS )DzTools for inspecting Python objects.

Uses syntax highlighting for presenting the various information elements.

Similar in spirit to the inspect module, but all calls take a name argument to
reference the name under which an object is being read.
	InspectorInspectColors    )	dataclass)	signature)dedentN)AnyOptionalDictUnionListTuple)   
   )	TypeAlias)page)pretty)skip_doctest)
PyColorize)openpy)safe_hasattr)compress_user)indent)list_namespace)typestr2type)
TermColorsColorSchemeColorSchemeTable)cast_unicode)	Colorable)undoc)	highlight)PythonLexer)HtmlFormatter__custom_documentations__UnformattedBundleBundlec                   @   sJ   e Zd ZU eed< eed< eed< ee ed< eed< eed< dd Zd	S )
OInfoismagicisaliasfound	namespaceparentobjc                 C   s
   t | |S )zGet a field from the object for backward compatibility with before 8.12

        see https://github.com/h5py/h5py/issues/2253
        )getattr)selffield r0   P/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/IPython/core/oinspect.pygetH   s   
z	OInfo.getN)	__name__
__module____qualname__bool__annotations__r   strr   r2   r0   r0   r0   r1   r&   ?   s   
 r&   c                 C   s   t | t tddS )NT)	noclasses)r    r!   r"   )coder0   r0   r1   pylightY   s   r;   c                 C   s   h | ]}t |qS r0   )inspectgetdoc).0tr0   r0   r1   	<setcomp>_   s    
r@   )	type_name
base_classstring_formr*   lengthfile
definition	docstringsourceinit_definitionclass_docstringinit_docstringcall_defcall_docstringr'   r(   isclassr)   namec                  K   s   dd t D }||  |S )z1Make an object info dict with all fields present.c                 S   s   i | ]}|d qS Nr0   )r>   kr0   r0   r1   
<dictcomp>~       zobject_info.<locals>.<dictcomp>)info_fieldsupdate)kwinfodictr0   r0   r1   object_info|   s   
rX   c                 C   st   t | }|du r
dS |drdS tj|sdS t|d}t|j	\}}W d   |S 1 s3w   Y  |S )znGet encoding for python source file defining obj

    Returns None if obj is not defined in a sourcefile.
    Nz.soz.dllz.pydrb)
	find_fileendswithospathisfile	stdlib_ioopenr   detect_encodingreadline)r,   ofilebufferencodinglinesr0   r0   r1   get_encoding   s   

rh   returnc                 C   sB   z|   }W n	 ty   Y nw t|trt|S t | }|S )a=  Stable wrapper around inspect.getdoc.

    This can't crash because of attribute problems.

    It also attempts to call a getdoc() method on the given object.  This
    allows objects which provide their docstrings via non-standard mechanisms
    (like Pyro proxies) to still be inspected by ipython's ? system.
    )r=   	Exception
isinstancer8   r<   cleandoc)r,   dsdocstrr0   r0   r1   r=      s   



r=    c           	      C   s  t | trTg }dD ]A}t| |}|durJt|}|rd| nd}|dd||f t|r>t|}|r=|t	| q	|d||t
|f  q	|rRd|S dS t| } zt| }W |S  ty   z
t| j}W Y |S  ttfy~   Y Y dS w  ty   Y dS w )al  Wrapper around inspect.getsource.

    This can be modified by other projects to provide customized source
    extraction.

    Parameters
    ----------
    obj : object
        an object whose source code we will attempt to extract
    oname : str
        (optional) a name under which the object is known

    Returns
    -------
    src : unicode or None

    )fgetfsetfdelNz%s.ro   z# z
%s%s = %s

)rk   propertyr-   rh   appendjoinr<   
isfunction	getsourcer   r   _get_wrapped	TypeError	__class__OSError)	r,   onamesourcesattrnamefnrf   oname_prefix_srcsrcr0   r0   r1   rx      sD   



rx   c                 C   s(   t | pt | pt| tpt| tS )zTrue if obj is a function ())r<   rw   ismethodrk   _builtin_func_type_builtin_meth_typer,   r0   r0   r1   is_simple_callable   s
   r   c                 C   s2   t jdtdd t| drt| s| j} t| S )zWrapper around :func:`inspect.getfullargspec`

    In addition to functions and methods, this can also handle objects with a
    ``__call__`` attribute.

    DEPRECATED: Deprecated since 7.10. Do not use, will be removed.
    z]`getargspec` function is deprecated as of IPython 7.10and will be removed in future versions.   
stacklevel__call__)warningswarnDeprecationWarningr   r   r   r<   getfullargspecr   r0   r0   r1   
getargspec   s   

r   c                 C   s0   t jdtdd t| d | d | d | d S )a  Format argspect, convenience wrapper around inspect's.

    This takes a dict instead of ordered arguments and calls
    inspect.format_argspec with the arguments in the necessary order.

    DEPRECATED (since 7.10): Do not use; will be removed in future versions.
    za`format_argspec` function is deprecated as of IPython 7.10and will be removed in future versions.r   r   argsvarargsvarkwdefaults)r   r   r   r<   formatargspec)argspecr0   r0   r1   format_argspec  s   
r   Tc              	   C   s   t jdtdd | d}|du rd}n*z
|d d dk}W n ttfy)   Y nw |r6|d d	d |d< | d
 t| }| d}|du rL| d}|du rV| dd}||fS )z?DEPRECATED since 6.0. Extract call tip data from an oinfo dict.zZ`call_tip` function is deprecated as of IPython 6.0and will be removed in future versions.r   r   r   Nr   r   r.      rO   rM   rK   rG   ro   )r   r   r   r2   KeyError
IndexErrorr   )oinfoformat_callr   	call_linehas_selfdocr0   r0   r1   call_tip  s,   


r   c                 C   s:   | }d}t | dr| j} |d7 }|dkr|S t | ds	| S )aN  Get the original object if wrapped in one or more @decorators

    Some objects automatically construct similar objects on any unrecognised
    attribute access (e.g. unittest.mock.call). To protect against infinite loops,
    this will arbitrarily cut off after 100 levels of obj.__wrapped__
    attribute access. --TK, Jan 2016
    r   __wrapped__r   d   )r   r   )r,   orig_objir0   r0   r1   ry   <  s   

ry   c                 C   s   t | } d}z
t| }W t|S  ty5   zt| j}W n ttfy*   Y nw Y t|S Y t|S  ty@   Y t|S w )a^  Find the absolute path to the file where an object was defined.

    This is essentially a robust wrapper around `inspect.getabsfile`.

    Returns None if no file can be found.

    Parameters
    ----------
    obj : any Python object

    Returns
    -------
    fname : str
        The absolute path to the file where the object was defined.
    N)ry   r<   
getabsfilerz   r{   r|   r   )r,   fnamer0   r0   r1   r[   N  s&   r[   c                 C   sr   t | } z
t| d }W |S  ty/   zt| jd }W Y |S  ttfy.   Y Y dS w  ty8   Y dS w )aW  Find the line number in a file where an object was defined.

    This is essentially a robust wrapper around `inspect.getsourcelines`.

    Returns None if no file can be found.

    Parameters
    ----------
    obj : any Python object

    Returns
    -------
    lineno : int
        The line number where the object definition starts.
    r   N)ry   r<   getsourcelinesrz   r{   r|   )r,   linenor0   r0   r1   find_source_linesq  s   
r   c                	       sf  e Zd Zeejddddf fdd	Zd6deedf fddZ	defd	d
Z
dd Zdd Zd6ddZed7ddZd6ddZd6ddZd8dedefddZdedefddZdededefdd Zdefd!d"Z					#d9d$ed%ed&ee defd'd(Z					)	#d:d&ee fd*d+Zd;d,d-Zd;deeef fd.d/Z e!d0d1 Z"g d2d2fd2d3d4d5Z#  Z$S )<r   Nr   c                    sJ   t t| j||d || _tjd| |d| _| jj| _|| _| 	| d S )N)r+   configr8   )outr+   style)
superr   __init__color_tabler   Parserparserformatstr_detail_levelset_active_scheme)r.   r   code_color_tableschemer   r+   r   r{   r0   r1   r     s   
zInspector.__init__ro   ri   c                 C   s   zt t||W S    Y dS )zReturn the call signature for any callable object.

        If any exception is generated, None is returned instead and the
        exception is suppressed.N)_render_signaturer   )r.   r,   r}   r0   r0   r1   _getdef  s   zInspector._getdefc                 C   s   d| j jj|| j jjf S )z*Return a header string with proper colors.z%s%s%s)r   active_colorsheadernormal)r.   hr0   r0   r1   __head  s   zInspector.__headc                 C   s*   |d ur| j | | jj | d S d S rP   )r   r   r   )r.   r   r0   r0   r1   r     s   zInspector.set_active_schemec                 C   s.   t d| dd |rt d|  dS t   dS )z-Generic message when no information is found.zNo %s found endzfor %sN)print)r.   msgr}   r0   r0   r1   noinfo  s   
zInspector.noinfoc                 C   sh   t |s
td dS d}t|r| d}| ||}|du r(| d| dS t|| |dd dS )zwPrint the call signature for any callable object.

        If the object is a class, print the constructor information.zObject is not callable.Nro   zClass constructor information:
zdefinition headerr   r   )callabler   r<   rN   _Inspector__headr   r   r   )r.   r,   r}   r   outputr0   r0   r1   pdef  s   

zInspector.pdefc           	      C   s   | j }g }t|}|r||d|}|r#||d |t| t|rEt|drEt|j}|durD||d |t| nt|dr_t|j	}|r_||d |t| |si| 
d| dS td	| dS )
a  Print the docstring for any object.

        Optional:
        -formatter: a function to run the docstring through for specially
        formatted docstrings.

        Examples
        --------
        In [1]: class NoInit:
           ...:     pass

        In [2]: class NoDoc:
           ...:     def __init__(self):
           ...:         pass

        In [3]: %pdoc NoDoc
        No documentation found for NoDoc

        In [4]: %pdoc NoInit
        No documentation found for NoInit

        In [5]: obj = NoInit()

        In [6]: %pdoc obj
        No documentation found for obj

        In [5]: obj2 = NoDoc()

        In [6]: %pdoc obj2
        No documentation found for obj2
        z
plain/textzClass docstring:r   NzInit docstring:r   zCall docstring:documentationrs   )r   r=   r2   ru   r   r<   rN   hasattrr   r   r   r   rv   )	r.   r,   r}   	formatterheadrg   rm   init_dscall_dsr0   r0   r1   pdoc  s,   "


zInspector.pdocc                 C   s\   t   zt||d}W n ty   d}Y nw |du r$| d| dS t| | dS )z$Print the source code for an object.)r}   NrH   )	linecache
checkcacherx   rj   r   r   r   )r.   r,   r}   r   r0   r0   r1   psource
  s   zInspector.psourcec                 C   s   t |}|du r| d| dS t|}|dr!td|  dS tj|s/td|  dS t| 	t
j|dd|d  dS )	z0Show the whole file where an object was defined.NrE   rY   z File %r is binary, not printing.z%File %r does not exist, not printing.F)skip_encoding_cookier   )r   r   r[   r\   r   r]   r^   r_   r   r   r   read_py_file)r.   r,   r}   r   rd   r0   r0   r1   pfile  s   
$zInspector.pfiletextc                 C   sX   |dt | dd}|du r|S ||}t|ts$|d| ddS t|fi |S )aR  Return a mime bundle representation of the input text.

        - if `formatter` is None, the returned mime bundle has
           a ``text/plain`` field, with the input text.
           a ``text/html`` field with a ``<pre>`` tag containing the input text.

        - if ``formatter`` is not None, it must be a callable transforming the
          input text into a mime bundle. Default values for ``text/plain`` and
          ``text/html`` representations are the ones described above.

        Note:

        Formatters returning strings are supported but this behavior is deprecated.

        z<pre>z</pre>
text/plain	text/htmlN)htmlescaperk   dict)r.   r   r   r   	formattedr0   r0   r1   _mime_format0  s   
zInspector._mime_formatbundlec           
      C   s>  t |d ts	J |d D ]	}t |tsJ qi }g }tdd |d D }|d D ])\}}|d}d|v r9dnd}|| |d  |t| d  | |  q*d||d< d|v rt |d tshJ |d D ]	}t |tsuJ qlt |d ttfrddd |d D |d< |	 D ]}	|	d	v rq||	 }q|S )
zRFormat a mimebundle being created by _make_info_unformatted into a real mimebundler   c                 s   s    | ]	\}}t |V  qd S rP   len)r>   r   _r0   r0   r1   	<genexpr>[      z(Inspector.format_mime.<locals>.<genexpr>rs   r   :r   c                 s   s$    | ]\}}d | d| V  qdS )z<h1>z</h1>
Nr0   )r>   r   bodyr0   r0   r1   r   n  s   " )r   r   )
rk   listtuplemaxstripru   r   r   rv   keys)
r.   r   itemnew_brg   _lenr   r   delimrQ   r0   r0   r1   format_mimeR  s4   
(
zInspector.format_mimetitlekeyc           	      C   sd   ||v s||v r
dS || }|dur0|  ||}|d ||d f |d ||d f dS dS )z^Append an info value to the unformatted mimebundle being constructed by _make_info_unformattedNr   r   )r   ru   )	r.   r   r   r   infoomit_sectionsr   r/   formatted_fieldr0   r0   r1   _append_info_fieldx  s   
zInspector._append_info_fieldc           	         s  g g d}	d-dt dtdtf fdd}dtffd	d
} d r+||dd |S  d rJ|dkr;||dd| n||dd| ||dd |S  d sRt|r||dd| ||dd| ||dd| |dkrw d rw||dd| n||dd| ||dd ||dd ||dd  |S ||dd| ||d!d"| ||dd ||d#d  d$ d%kr||d&d$ ||d'd( ||dd |dkrԈ d r||dd| n||dd| ||d)d*| ||dd| ||d+d,| |S ).z;Assemble the mimebundle as unformatted lists of informationr   Nr   r   r   c                    s   j | || |d d S )N)r   r   r   r   r   )r   )r   r   r   r   r   r   r.   r0   r1   append_field  s   
z6Inspector._make_info_unformatted.<locals>.append_fieldri   c                    s     | t| dS )Nr   )r   r;   )r   )r.   r0   r1   code_formatter  s   z8Inspector._make_info_unformatted.<locals>.code_formatterr(   ReprrC   r'   r   SourcerH   	DocstringrG   FilerE   rN   	SignaturerF   zInit signaturerI   zInit docstringrK   TyperA   
Subclasses
subclasseszCall signaturerL   zString formr*   Interactive	NamespaceLengthrD   zClass docstringrJ   zCall docstringrM   rP   )r$   r8   r%   r   )	r.   r,   r   r   detail_levelr   r   r   r   r0   r   r1   _make_info_unformatted  s^   /(z Inspector._make_info_unformattedr0   r,   r}   r   c           	      C   s0   | j ||||d}| j|||||d}| |S )a9  Retrieve an info dict and format it.

        Parameters
        ----------
        obj : any
            Object to inspect and return info from
        oname : str (default: ''):
            Name of the variable pointing to `obj`.
        formatter : callable
        info
            already computed information
        detail_level : integer
            Granularity of detail level, if set to 1, give more information.
        omit_sections : container[str]
            Titles or keys to omit from output (can be set, tuple, etc., anything supporting `in`)
        r}   r   r  )r  r   )r   r  r   )	r.   r,   r}   r   r   r  r   	info_dictr   r0   r0   r1   	_get_info  s   
zInspector._get_infoTc           	      C   s:   |dusJ | j ||||||d}|s|d= t| dS )a   Show detailed information about an object.

        Optional arguments:

        - oname: name of the variable pointing to the object.

        - formatter: callable (optional)
              A special formatter for docstrings.

              The formatter is a callable that takes a string as an input
              and returns either a formatted string or a mime type bundle
              in the form of a dictionary.

              Although the support of custom formatter returning a string
              instead of a mime type bundle is deprecated.

        - info: a structure with some information fields which may have been
          precomputed already.

        - detail_level: if set to 1, more information is given.

        - omit_sections: set of section keys and titles to omit
        N)r   r   )r
  r   )	r.   r,   r}   r   r   r  enable_html_pagerr   info_br0   r0   r1   pinfo  s   !zInspector.pinfoc                 C   s"   t jdtdd | j||||dS )z
        Inspector.info() was likely improperly marked as deprecated
        while only a parameter was deprecated. We "un-deprecate" it.
        zThe `Inspector.info()` method has been un-deprecated as of 8.0 and the `formatter=` keyword removed. `Inspector._info` is now an alias, and you can just call `.info()` directly.r   r   r  )r   r   r   r   )r.   r,   r}   r   r  r0   r0   r1   _info&  s   zInspector._infoc           !      C   s   |du rd}d}d}n	|j }|j}|j}|dd }d}	d}
|r8|jdur8t|jtr8t|jt}||d}	t	|d||dd}|	rF|	}n8|rqt
|s`zd|d	  }W n)   d
t| }Y ndt| }|jrp|d|j 7 }nt|}|du r|d}n|}|
| }d}t|d d }|rd|d< n|rd|d< nt|j|d< z|j}t||d< W n   Y || jkrz8t|}d}|st||kr|d| d || d  }ddt|   dd |dD }|||< W n   Y |r||d< z
tt||d< W n
 ty   Y nw d}t|}|du rd}n|dr%d}n|dr-d}t||d < |rbt  zt|tsD|sVt||}|durR| }||d!< W n
 tya   Y nw |rs|  |d!|ss||d"< t!"|rd|d#< z| #||}W n t$y   d}Y nw z|j%}W n t$y   d}Y n$w |du rz| #||}W n
 t$y   Y nw t|}|t&krd}|r||d$< |r||d%< d&d' t'|D }t|d(k rd)|}nd)|dd( d*g }||d+< n| #||}|r
||d,< |r3zt|d-}W n   d}Y nt|}|t(v r'd}|r3||kr3||d.< zt|j%}|t&kr@d}W n t$yM   d}Y nw |rU||d%< t)|d/rt*|s| #|j+|}|rv||d,krv||d0< t|j+} | t,krd} | r| |d1< t-d2i |S )3a  Compute a dict with detailed information about an object.

        Parameters
        ----------
        obj : any
            An object to find information about
        oname : str (default: '')
            Name of the variable pointing to `obj`.
        info : (default: None)
            A struct (dict like with attr access) with some information fields
            which may have been precomputed already.
        detail_level : int (default:0)
            If set to 1, more information is given.

        Returns
        -------
        An object info dict with known fields from `info_fields`. Keys are
        strings, values are string or None.
        NFro   .T)rO   r)   r(   r'   r  z!Alias to the system command:
  %sr   zAlias: z	Alias to z
Docstring:
z<no docstring>      r   zMagic functionrA   zSystem aliasrB   rC   z <...> rs   r   c                 s   s    | ]}|  V  qd S rP   )r   )r>   qr0   r0   r1   r     s    z!Inspector.info.<locals>.<genexpr>r*   rD   rY   z<string>z9Dynamically generated function. No source code available.rE   rH   rG   rN   rI   rK   c                 S   s   g | ]}|j qS r0   )r3   )r>   subr0   r0   r1   
<listcomp>  rS   z"Inspector.info.<locals>.<listcomp>r   , z...r  rF   r{   rJ   r   rL   rM   r0   ).r'   r(   r*   splitr+   r   	HOOK_NAMEr-   r2   r   r   r8   __doc__r=   inttyper3   r{   r   r   
expandtabsrv   rj   r[   r\   r   r   r   rk   rt   rx   rstrip_source_contains_docstringr<   rN   r   AttributeErrorr   _object_init_docstring__subclasses___builtin_type_docstringsr   r   r   _func_call_docstringrX   )!r.   r,   r}   r   r  r'   r(   ospaceatt_nameparents_docspreludeparents_docs_dictr   rm   
ds_or_None
string_maxshalfbclassostrstr_headbinary_filer   r   init_defobj_initr   names	all_namesdeflnclsclass_dsrL   r   r0   r0   r1   r   5  s,  















zInspector.infoc                 C   s8   zt t| j\}t ||kW S  ty   Y dS w )z
        Check whether the source *src* contains the docstring *doc*.

        This is is helper function to skip displaying the docstring if the
        source already contains it, avoiding repetition of information.
        F)astparser   r   get_docstringrj   )r   r   def_noder0   r0   r1   r    s   z$Inspector._source_contains_docstringF)
list_typesc                C   s   d}d}|rt  dtt dS | }	t|	}
|
dkr#|	d }n|
dkr,|	\}}ntd| |D ]}||vrDtd	|| f q4t t }}|D ]"}|| }t	||v r[qN|
t	| t|||||d
}|| qNt  dt| dS )a  Search namespaces with wildcards for objects.

        Arguments:

        - pattern: string containing shell-like wildcards to use in namespace
          searches and optionally a type specification to narrow the search to
          objects of that type.

        - ns_table: dict of name->namespaces for search.

        Optional arguments:

          - ns_search: list of namespace names to include in search.

          - ignore_case(False): make the search case-insensitive.

          - show_all(False): show all names, including those starting with
            underscores.

          - list_types(False): list all available object types for object matching.
        allro   rs   Nr   r   r   z)invalid argument string for psearch: <%s>z'invalid namespace <%s>. Valid names: %s)ignore_caseshow_all)r   rv   sortedr   r  r   
ValueErrorr   setidaddr   rU   )r.   patternns_table	ns_searchr=  r>  r;  type_patternfiltercmdslen_cmdsrO   search_resultnamespaces_seenns_namenstmp_resr0   r0   r1   psearch(  s>   


zInspector.psearchro   )ro   NrP   )ro   NNr   r0   )ro   NNr   Tr0   )ro   Nr   )%r3   r4   r5   r   r   ANSICodeColorsr   r
   r8   r   r   r   r   r   r   r   r   r   r   r   r$   r%   r   r   r  r   r   r&   r
  r  r  r	   r   staticmethodr  rP  __classcell__r0   r0   r   r1   r     sz    


9
"&

R
'

) c
c                 C   s
  g }d}d}| j  D ]6}|jtjjkrd}n	|r |d d}|jtjjkr*d}n|jtjjkr:|r:|d d}|t	| q|rI|d t
|tdd |D  dkrgd|d	d
d |D }n	d|d|}| jtjurt| j}|d|7 }|S )z
    This was mostly taken from inspect.Signature.__str__.
    Look there for the comments.
    The only change is to add linebreaks when this gets too long.
    FT/*c                 s   s    | ]	}t |d  V  qdS )r   Nr   r>   rr0   r0   r1   r     r   z$_render_signature.<locals>.<genexpr>K   z{}(
{})ro   c                 s   s    | ]}d  |V  qdS )z    {},
N)r   rW  r0   r0   r1   r     s    

z{}({})r  z -> {})
parametersvalueskindr<   	ParameterPOSITIONAL_ONLYru   VAR_POSITIONALKEYWORD_ONLYr8   r   sumr   rv   return_annotation_emptyformatannotation)obj_signatureobj_nameresultpos_onlykw_onlyparamrenderedannor0   r0   r1   r   k  s4   


r   rQ  )T)dr  __all__dataclassesr   r<   r   textwrapr   r7  r   ior`   r   r]   systypesr   typingr   r   r	   r
   r   r   version_infotyping_extensionsr   IPython.corer   IPython.lib.prettyr   IPython.testing.skipdoctestr   IPython.utilsr   r   IPython.utils.dir2r   IPython.utils.pathr   IPython.utils.textr   IPython.utils.wildcardr   r   IPython.utils.coloransir   r   r   IPython.utils.py3compatr   IPython.utils.colorabler   IPython.utils.decoratorsr   pygmentsr    pygments.lexersr!   pygments.formattersr"   r  r8   r$   r7   r%   r&   r;   FunctionTyper   r#  objectr   r   
ModuleType
MethodTypert   r"  r  r<  r   upperr   ColorsrR  r   rT   rX   rh   r=   rx   r   r   r   r   ry   r[   r   r   r   r0   r0   r0   r1   <module>   s    
 


?

%#     `