##// END OF EJS Templates
Fix #13654, improve performance of auto match for quotes...
Fix #13654, improve performance of auto match for quotes As pointed out in #13654, auto matching of quotes may take a long time if the prefix is long. To be more precise, the longer the text before the first quote, the slower it is. This is all caused by the regex pattern used: `r'^([^"]+|"[^"]*")*$'`, which I suspect is O(2^N) slow. ```python In [1]: text = "function_with_long_nameeee('arg" In [2]: import re In [3]: pattern = re.compile(r"^([^']+|'[^']*')*$") In [4]: %timeit pattern.match(text) 10.3 s ± 67.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) In [5]: %timeit pattern.match("1'") 312 ns ± 0.775 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each) In [6]: %timeit pattern.match("12'") 462 ns ± 1.95 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each) In [7]: %timeit pattern.match("123'") 766 ns ± 6.32 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each) In [8]: %timeit pattern.match("1234'") 1.59 µs ± 20.9 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each) ``` But the pattern we want here can actually be detected with a Python implemention in O(N) time.

File last commit:

r27712:9ed1939c
r27762:c179c2a5
Show More
__init__.py
156 lines | 5.8 KiB | text/x-python | PythonLexer
fperez
Reorganized the directory for ipython/ to have its own dir, which is a bit...
r0 """
Fernando Perez
Minor date/info updates for release.
r4451 IPython: tools for interactive and parallel computing in Python.
fperez
Reorganized the directory for ipython/ to have its own dir, which is a bit...
r0
Matthias Bussonnier
Switch protocol to https...
r24425 https://ipython.org
Fernando Perez
Remove svn-style $Id marks from docstrings and Release imports....
r1853 """
Brian Granger
Continuing a massive refactor of everything.
r2205 #-----------------------------------------------------------------------------
Fernando Perez
Minor date/info updates for release.
r4451 # Copyright (c) 2008-2011, IPython Development Team.
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
# Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
# Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
fperez
Reorganized the directory for ipython/ to have its own dir, which is a bit...
r0 #
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 # Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
Brian Granger
Continuing a massive refactor of everything.
r2205 #-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
fperez
Reorganized the directory for ipython/ to have its own dir, which is a bit...
r0
Brian Granger
Continuing a massive refactor of everything.
r2205 import os
fperez
Reorganized the directory for ipython/ to have its own dir, which is a bit...
r0 import sys
Brian Granger
Continuing a massive refactor of everything.
r2205
#-----------------------------------------------------------------------------
# Setup everything
#-----------------------------------------------------------------------------
Fernando Perez
Fix invalid version check in setup.py.
r3196 # Don't forget to also update setup.py when this changes!
Matthias Bussonnier
Stop support for 3.7 on the master branch....
r27132 if sys.version_info < (3, 8):
Matthias Bussonnier
Improve our error messages for non compatibility.
r22823 raise ImportError(
Matthias Bussonnier
typo and reformat
r27639 """
Matthias Bussonnier
Stop support for 3.7 on the master branch....
r27132 IPython 8+ supports Python 3.8 and above, following NEP 29.
Matthias Bussonnier
Improve our error messages for non compatibility.
r22823 When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
Matthias Bussonnier
remove duplicate WatsNew from bad rebase
r24471 Python 3.3 and 3.4 were supported up to IPython 6.x.
Matthias Bussonnier
Adopt NEP 29, Drop Python 3.5 and Numpy <1.14...
r25225 Python 3.5 was supported with IPython 7.0 to 7.9.
Matthias Bussonnier
Stop support for 3.7 on the master branch....
r27132 Python 3.6 was supported with IPython up to 7.16.
Python 3.7 was still supported with the 7.x branch.
Matthias Bussonnier
Improve our error messages for non compatibility.
r22823
See IPython `README.rst` file for more information:
Jarrod Millman
Rename master to main
r27712 https://github.com/ipython/ipython/blob/main/README.rst
Matthias Bussonnier
Improve our error messages for non compatibility.
r22823
Matthias Bussonnier
typo and reformat
r27639 """
)
vivainio
Moved path to extensions - pickleshare failed because it imported...
r168
Brian Granger
Merging upstream changes from inputhook and config-refactor....
r2224 #-----------------------------------------------------------------------------
# Setup the top level names
#-----------------------------------------------------------------------------
vivainio
corrected some problematic module interdependencies
r695
MinRK
move core.ipapi -> core.getipython
r10612 from .core.getipython import get_ipython
Fernando Perez
Ported the IPython Sphinx directive to 0.11....
r2439 from .core import release
from .core.application import Application
Fernando Perez
Fix imports for plain terminal ipython and use a proper warn() call.
r11020 from .terminal.embed import embed
Scott Tsai
embed_kernel: give a clear error message on pyzmq ImportError
r6044
Brian Granger
Moving and renaming in preparation of subclassing InteractiveShell....
r2760 from .core.interactiveshell import InteractiveShell
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 from .utils.sysinfo import sys_info
MinRK
remove unnecessarily specific extract_module_locals_above
r6570 from .utils.frame import extract_module_locals
vivainio
corrected some problematic module interdependencies
r695
fperez
Reorganized the directory for ipython/ to have its own dir, which is a bit...
r0 # Release data
MinRK
update release/authors...
r9188 __author__ = '%s <%s>' % (release.author, release.author_email)
Brian Granger
Release.py => core/release.py and imports updated.
r2043 __license__ = release.license
__version__ = release.version
MinRK
add IPython.version_info...
r8448 version_info = release.version_info
Matthias Bussonnier
FIX CVE-2022-21699...
r27464 # list of CVEs that should have been patched in this release.
# this is informational and should not be relied upon.
__patched_cves__ = {"CVE-2022-21699"}
Scott Tsai
embed_kernel: only import zmq when needed
r6219
MinRK
adjust embed_kernel signature...
r6571 def embed_kernel(module=None, local_ns=None, **kwargs):
"""Embed and start an IPython kernel in a given scope.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
add IPython.start_kernel...
r11175 If you don't want the kernel to initialize the namespace
from the scope of the surrounding function,
and/or you want to load full IPython configuration,
you probably want `IPython.start_kernel()` instead.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
adjust embed_kernel signature...
r6571 Parameters
----------
Matthias Bussonnier
Bit nitpicky about rst markup, find more errors.
r24735 module : types.ModuleType, optional
MinRK
adjust embed_kernel signature...
r6571 The module to load into IPython globals (default: caller)
local_ns : dict, optional
The namespace to load into IPython user namespace (default: caller)
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491 **kwargs : various, optional
MinRK
fix a few remaining KernelApp/IPKernelApp changes
r9516 Further keyword args are relayed to the IPKernelApp constructor,
MinRK
adjust embed_kernel signature...
r6571 allowing configuration of the Kernel. Will only have an effect
on the first embed_kernel call for a given process.
"""
MinRK
remove unnecessarily specific extract_module_locals_above
r6570 (caller_module, caller_locals) = extract_module_locals(1)
Scott Tsai
embed_kernel: only import zmq when needed
r6219 if module is None:
module = caller_module
if local_ns is None:
local_ns = caller_locals
MinRK
adjust embed_kernel signature...
r6571
Scott Tsai
embed_kernel: only import zmq when needed
r6219 # Only import .zmq when we really need it
Min RK
ipython_kernel is now ipykernel
r21337 from ipykernel.embed import embed_kernel as real_embed_kernel
MinRK
adjust embed_kernel signature...
r6571 real_embed_kernel(module=module, local_ns=local_ns, **kwargs)
MinRK
add IPython.start_ipython...
r11173
def start_ipython(argv=None, **kwargs):
MinRK
expand start_ipython / embed docstrings...
r11174 """Launch a normal IPython instance (as opposed to embedded)
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
expand start_ipython / embed docstrings...
r11174 `IPython.embed()` puts a shell in a particular calling scope,
such as a function or method for debugging purposes,
which is often not desirable.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
expand start_ipython / embed docstrings...
r11174 `start_ipython()` does full, regular IPython initialization,
including loading startup files, configuration, etc.
much of which is skipped by `embed()`.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
expand start_ipython / embed docstrings...
r11174 This is a public API method, and will survive implementation changes.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
add IPython.start_ipython...
r11173 Parameters
----------
argv : list or None, optional
If unspecified or None, IPython will parse command-line options from sys.argv.
To prevent any command-line parsing, pass an empty list: `argv=[]`.
MinRK
expand start_ipython / embed docstrings...
r11174 user_ns : dict, optional
specify this dictionary to initialize the IPython user namespace with particular values.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491 **kwargs : various, optional
MinRK
add IPython.start_ipython...
r11173 Any other kwargs will be passed to the Application constructor,
such as `config`.
"""
from IPython.terminal.ipapp import launch_new_instance
return launch_new_instance(argv=argv, **kwargs)
MinRK
add IPython.start_kernel...
r11175
def start_kernel(argv=None, **kwargs):
"""Launch a normal IPython kernel instance (as opposed to embedded)
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
add IPython.start_kernel...
r11175 `IPython.embed_kernel()` puts a shell in a particular calling scope,
such as a function or method for debugging purposes,
which is often not desirable.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
add IPython.start_kernel...
r11175 `start_kernel()` does full, regular IPython initialization,
including loading startup files, configuration, etc.
much of which is skipped by `embed()`.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491
MinRK
add IPython.start_kernel...
r11175 Parameters
----------
argv : list or None, optional
If unspecified or None, IPython will parse command-line options from sys.argv.
To prevent any command-line parsing, pass an empty list: `argv=[]`.
user_ns : dict, optional
specify this dictionary to initialize the IPython user namespace with particular values.
Matthias Bussonnier
DOC: Some more autoformatting of docstrings....
r26491 **kwargs : various, optional
MinRK
add IPython.start_kernel...
r11175 Any other kwargs will be passed to the Application constructor,
such as `config`.
"""
Matthias Bussonnier
remove proxy
r27281 import warnings
warnings.warn(
"start_kernel is deprecated since IPython 8.0, use from `ipykernel.kernelapp.launch_new_instance`",
DeprecationWarning,
stacklevel=2,
)
from ipykernel.kernelapp import launch_new_instance
MinRK
add IPython.start_kernel...
r11175 return launch_new_instance(argv=argv, **kwargs)