##// 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:

r24241:86b88904
r27762:c179c2a5
Show More
consoleapp.py
12 lines | 415 B | text/x-python | PythonLexer
Min RK
move IPython.consoleapp to jupyter_client
r21025 """
Shim to maintain backwards compatibility with old IPython.consoleapp imports.
Paul Ivanov
refactoring common code out of qtconsole
r5603 """
Paul Ivanov
remove load_connection_file from consoleapp...
r16497 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
Paul Ivanov
refactoring common code out of qtconsole
r5603
Min RK
move IPython.consoleapp to jupyter_client
r21025 from warnings import warn
Paul Ivanov
refactoring common code out of qtconsole
r5603
Matthias Bussonnier
Remove Deprecation Warning, add since when things were deprecated.
r24241 warn("The `IPython.consoleapp` package has been deprecated since IPython 4.0."
"You should import from jupyter_client.consoleapp instead.", stacklevel=2)
Paul Ivanov
refactoring common code out of qtconsole
r5603
Min RK
move IPython.consoleapp to jupyter_client
r21025 from jupyter_client.consoleapp import *