Show More
@@ -159,7 +159,7 b' By default results from all matchers are combined, in the order determined by' | |||||
159 | their priority. Matchers can request to suppress results from subsequent |
|
159 | their priority. Matchers can request to suppress results from subsequent | |
160 | matchers by setting ``suppress`` to ``True`` in the ``MatcherResult``. |
|
160 | matchers by setting ``suppress`` to ``True`` in the ``MatcherResult``. | |
161 |
|
161 | |||
162 |
When multiple matchers simultaneously request su |
|
162 | When multiple matchers simultaneously request suppression, the results from of | |
163 | the matcher with higher priority will be returned. |
|
163 | the matcher with higher priority will be returned. | |
164 |
|
164 | |||
165 | Sometimes it is desirable to suppress most but not all other matchers; |
|
165 | Sometimes it is desirable to suppress most but not all other matchers; | |
@@ -2651,7 +2651,7 b' class IPCompleter(Completer):' | |||||
2651 | ) |
|
2651 | ) | |
2652 | can_close_quote = can_close_quote and self.auto_close_dict_keys |
|
2652 | can_close_quote = can_close_quote and self.auto_close_dict_keys | |
2653 |
|
2653 | |||
2654 |
# fast path if closing q |
|
2654 | # fast path if closing quote should be appended but not suffix is allowed | |
2655 | if not can_close_quote and not can_close_bracket and closing_quote: |
|
2655 | if not can_close_quote and not can_close_bracket and closing_quote: | |
2656 | return [leading + k for k in matches] |
|
2656 | return [leading + k for k in matches] | |
2657 |
|
2657 |
@@ -167,7 +167,7 b' def is_possible_submodule(module, attr):' | |||||
167 | try: |
|
167 | try: | |
168 | obj = getattr(module, attr) |
|
168 | obj = getattr(module, attr) | |
169 | except AttributeError: |
|
169 | except AttributeError: | |
170 |
# Is possi |
|
170 | # Is possibly an unimported submodule | |
171 | return True |
|
171 | return True | |
172 | except TypeError: |
|
172 | except TypeError: | |
173 | # https://github.com/ipython/ipython/issues/9678 |
|
173 | # https://github.com/ipython/ipython/issues/9678 |
@@ -19,7 +19,7 b' Global Configuration' | |||||
19 | -------------------- |
|
19 | -------------------- | |
20 |
|
20 | |||
21 | The IPython debugger will by read the global ``~/.pdbrc`` file. |
|
21 | The IPython debugger will by read the global ``~/.pdbrc`` file. | |
22 | That is to say you can list all comands supported by ipdb in your `~/.pdbrc` |
|
22 | That is to say you can list all commands supported by ipdb in your `~/.pdbrc` | |
23 | configuration file, to globally configure pdb. |
|
23 | configuration file, to globally configure pdb. | |
24 |
|
24 | |||
25 | Example:: |
|
25 | Example:: | |
@@ -177,7 +177,7 b' def BdbQuit_excepthook(et, ev, tb, excepthook=None):' | |||||
177 | parameter. |
|
177 | parameter. | |
178 | """ |
|
178 | """ | |
179 | raise ValueError( |
|
179 | raise ValueError( | |
180 |
"`BdbQuit_excepthook` is deprecated since version 5.1. It is still ar |
|
180 | "`BdbQuit_excepthook` is deprecated since version 5.1. It is still around only because it is still imported by ipdb.", | |
181 | ) |
|
181 | ) | |
182 |
|
182 | |||
183 |
|
183 |
@@ -132,7 +132,7 b' def _get_external(module_name: str, access_path: Sequence[str]):' | |||||
132 |
|
132 | |||
133 | Raises: |
|
133 | Raises: | |
134 | * `KeyError` if module is removed not found, and |
|
134 | * `KeyError` if module is removed not found, and | |
135 | * `AttributeError` if acess path does not match an exported object |
|
135 | * `AttributeError` if access path does not match an exported object | |
136 | """ |
|
136 | """ | |
137 | member_type = sys.modules[module_name] |
|
137 | member_type = sys.modules[module_name] | |
138 | for attr in access_path: |
|
138 | for attr in access_path: | |
@@ -235,7 +235,7 b' class SelectivePolicy(EvaluationPolicy):' | |||||
235 | accept = has_original_attr and has_original_attribute |
|
235 | accept = has_original_attr and has_original_attribute | |
236 |
|
236 | |||
237 | if accept: |
|
237 | if accept: | |
238 | # We still need to check for overriden properties. |
|
238 | # We still need to check for overridden properties. | |
239 |
|
239 | |||
240 | value_class = type(value) |
|
240 | value_class = type(value) | |
241 | if not hasattr(value_class, attr): |
|
241 | if not hasattr(value_class, attr): | |
@@ -332,7 +332,7 b' class EvaluationContext(NamedTuple):' | |||||
332 | evaluation: Literal[ |
|
332 | evaluation: Literal[ | |
333 | "forbidden", "minimal", "limited", "unsafe", "dangerous" |
|
333 | "forbidden", "minimal", "limited", "unsafe", "dangerous" | |
334 | ] = "forbidden" |
|
334 | ] = "forbidden" | |
335 | #: Whether the evalution of code takes place inside of a subscript. |
|
335 | #: Whether the evaluation of code takes place inside of a subscript. | |
336 | #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``. |
|
336 | #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``. | |
337 | in_subscript: bool = False |
|
337 | in_subscript: bool = False | |
338 |
|
338 | |||
@@ -373,7 +373,7 b' def guarded_eval(code: str, context: EvaluationContext):' | |||||
373 | # getitem at all, for example it fails on simple `[0][1]` |
|
373 | # getitem at all, for example it fails on simple `[0][1]` | |
374 |
|
374 | |||
375 | if context.in_subscript: |
|
375 | if context.in_subscript: | |
376 |
# syntatic sugar for ellipsis (:) is only available in su |
|
376 | # syntactic sugar for ellipsis (:) is only available in subscripts | |
377 | # so we need to trick the ast parser into thinking that we have |
|
377 | # so we need to trick the ast parser into thinking that we have | |
378 | # a subscript, but we need to be able to later recognise that we did |
|
378 | # a subscript, but we need to be able to later recognise that we did | |
379 | # it so we can ignore the actual __getitem__ operation |
|
379 | # it so we can ignore the actual __getitem__ operation |
@@ -97,7 +97,7 b' def num_ini_spaces(s):' | |||||
97 | """ |
|
97 | """ | |
98 | warnings.warn( |
|
98 | warnings.warn( | |
99 | "`num_ini_spaces` is Pending Deprecation since IPython 8.17." |
|
99 | "`num_ini_spaces` is Pending Deprecation since IPython 8.17." | |
100 |
"It is considered f |
|
100 | "It is considered for removal in in future version. " | |
101 | "Please open an issue if you believe it should be kept.", |
|
101 | "Please open an issue if you believe it should be kept.", | |
102 | stacklevel=2, |
|
102 | stacklevel=2, | |
103 | category=PendingDeprecationWarning, |
|
103 | category=PendingDeprecationWarning, |
@@ -1627,7 +1627,7 b' class InteractiveShell(SingletonConfigurable):' | |||||
1627 | Returns |
|
1627 | Returns | |
1628 | ------- |
|
1628 | ------- | |
1629 | parts_ok: bool |
|
1629 | parts_ok: bool | |
1630 | wether we were properly able to parse parts. |
|
1630 | whether we were properly able to parse parts. | |
1631 | parts: list of str |
|
1631 | parts: list of str | |
1632 | extracted parts |
|
1632 | extracted parts | |
1633 |
|
1633 |
@@ -5,7 +5,7 b' with ast-transformers it is not easy to directly manipulate ast.' | |||||
5 |
|
5 | |||
6 |
|
6 | |||
7 | IPython has pre-code and post-code hooks, but are ran from within the IPython |
|
7 | IPython has pre-code and post-code hooks, but are ran from within the IPython | |
8 | machinery so may be inappropriate, for example for performance mesurement. |
|
8 | machinery so may be inappropriate, for example for performance measurement. | |
9 |
|
9 | |||
10 | This module give you tools to simplify this, and expose 2 classes: |
|
10 | This module give you tools to simplify this, and expose 2 classes: | |
11 |
|
11 |
@@ -460,7 +460,7 b' class Inspector(Colorable):' | |||||
460 |
|
460 | |||
461 | mime_hooks = traitlets.Dict( |
|
461 | mime_hooks = traitlets.Dict( | |
462 | config=True, |
|
462 | config=True, | |
463 |
help="dictionary of mime to callable to add information |
|
463 | help="dictionary of mime to callable to add information into help mimebundle dict", | |
464 | ).tag(config=True) |
|
464 | ).tag(config=True) | |
465 |
|
465 | |||
466 | def __init__( |
|
466 | def __init__( |
@@ -528,7 +528,7 b' def _list_matplotlib_backends_and_gui_loops() -> list[str]:' | |||||
528 |
|
528 | |||
529 |
|
529 | |||
530 | # Matplotlib and IPython do not always use the same gui framework name. |
|
530 | # Matplotlib and IPython do not always use the same gui framework name. | |
531 | # Always use the approprate one of these conversion functions when passing a |
|
531 | # Always use the appropriate one of these conversion functions when passing a | |
532 | # gui framework name to/from Matplotlib. |
|
532 | # gui framework name to/from Matplotlib. | |
533 | def _convert_gui_to_matplotlib(gui: str | None) -> str | None: |
|
533 | def _convert_gui_to_matplotlib(gui: str | None) -> str | None: | |
534 | if gui and gui.lower() == "osx": |
|
534 | if gui and gui.lower() == "osx": |
@@ -204,7 +204,7 b' def test_line_split():' | |||||
204 | # was at the end of part1. So an empty part2 represents someone hitting |
|
204 | # was at the end of part1. So an empty part2 represents someone hitting | |
205 | # tab at the end of the line, the most common case. |
|
205 | # tab at the end of the line, the most common case. | |
206 | t = [ |
|
206 | t = [ | |
207 | ("run some/scrip", "", "some/scrip"), |
|
207 | ("run some/script", "", "some/script"), | |
208 | ("run scripts/er", "ror.py foo", "scripts/er"), |
|
208 | ("run scripts/er", "ror.py foo", "scripts/er"), | |
209 | ("echo $HOM", "", "HOM"), |
|
209 | ("echo $HOM", "", "HOM"), | |
210 | ("print sys.pa", "", "sys.pa"), |
|
210 | ("print sys.pa", "", "sys.pa"), |
@@ -140,7 +140,7 b' def test_image_filename_defaults():' | |||||
140 | format="badformat", |
|
140 | format="badformat", | |
141 | embed=True, |
|
141 | embed=True, | |
142 | ) |
|
142 | ) | |
143 |
# check both |
|
143 | # check both paths to allow packages to test at build and install time | |
144 | imgfile = os.path.join(tpath, 'core/tests/2x2.png') |
|
144 | imgfile = os.path.join(tpath, 'core/tests/2x2.png') | |
145 | img = display.Image(filename=imgfile) |
|
145 | img = display.Image(filename=imgfile) | |
146 | assert "png" == img.format |
|
146 | assert "png" == img.format |
@@ -660,7 +660,7 b' class TestSystemRaw(ExitCodeChecks):' | |||||
660 | @mock.patch('os.system', side_effect=KeyboardInterrupt) |
|
660 | @mock.patch('os.system', side_effect=KeyboardInterrupt) | |
661 | def test_control_c(self, *mocks): |
|
661 | def test_control_c(self, *mocks): | |
662 | try: |
|
662 | try: | |
663 | self.system("sleep 1 # wont happen") |
|
663 | self.system("sleep 1 # won't happen") | |
664 | except KeyboardInterrupt: # pragma: no cove |
|
664 | except KeyboardInterrupt: # pragma: no cove | |
665 | self.fail( |
|
665 | self.fail( | |
666 | "system call should intercept " |
|
666 | "system call should intercept " |
@@ -579,7 +579,7 b' def test_run_tb():' | |||||
579 | def test_multiprocessing_run(): |
|
579 | def test_multiprocessing_run(): | |
580 | """Set we can run mutiprocesgin without messing up up main namespace |
|
580 | """Set we can run mutiprocesgin without messing up up main namespace | |
581 |
|
581 | |||
582 |
Note that import `nose.tools as nt` mdify the value |
|
582 | Note that import `nose.tools as nt` modify the values | |
583 | sys.module['__mp_main__'] so we need to temporarily set it to None to test |
|
583 | sys.module['__mp_main__'] so we need to temporarily set it to None to test | |
584 | the issue. |
|
584 | the issue. | |
585 | """ |
|
585 | """ |
@@ -158,14 +158,14 b' class NestedGenExprTestCase(unittest.TestCase):' | |||||
158 |
|
158 | |||
159 |
|
159 | |||
160 | indentationerror_file = """if True: |
|
160 | indentationerror_file = """if True: | |
161 |
zoo |
|
161 | zoom() | |
162 | """ |
|
162 | """ | |
163 |
|
163 | |||
164 | class IndentationErrorTest(unittest.TestCase): |
|
164 | class IndentationErrorTest(unittest.TestCase): | |
165 | def test_indentationerror_shows_line(self): |
|
165 | def test_indentationerror_shows_line(self): | |
166 | # See issue gh-2398 |
|
166 | # See issue gh-2398 | |
167 | with tt.AssertPrints("IndentationError"): |
|
167 | with tt.AssertPrints("IndentationError"): | |
168 |
with tt.AssertPrints("zoo |
|
168 | with tt.AssertPrints("zoom()", suppress=False): | |
169 | ip.run_cell(indentationerror_file) |
|
169 | ip.run_cell(indentationerror_file) | |
170 |
|
170 | |||
171 | with TemporaryDirectory() as td: |
|
171 | with TemporaryDirectory() as td: | |
@@ -174,7 +174,7 b' class IndentationErrorTest(unittest.TestCase):' | |||||
174 | f.write(indentationerror_file) |
|
174 | f.write(indentationerror_file) | |
175 |
|
175 | |||
176 | with tt.AssertPrints("IndentationError"): |
|
176 | with tt.AssertPrints("IndentationError"): | |
177 |
with tt.AssertPrints("zoo |
|
177 | with tt.AssertPrints("zoom()", suppress=False): | |
178 | ip.magic('run %s' % fname) |
|
178 | ip.magic('run %s' % fname) | |
179 |
|
179 | |||
180 | @skip_without("pandas") |
|
180 | @skip_without("pandas") |
@@ -541,7 +541,7 b' class RawText:' | |||||
541 | class CallExpression: |
|
541 | class CallExpression: | |
542 | """ Object which emits a line-wrapped call expression in the form `__name(*args, **kwargs)` """ |
|
542 | """ Object which emits a line-wrapped call expression in the form `__name(*args, **kwargs)` """ | |
543 | def __init__(__self, __name, *args, **kwargs): |
|
543 | def __init__(__self, __name, *args, **kwargs): | |
544 | # dunders are to avoid clashes with kwargs, as python's name manging |
|
544 | # dunders are to avoid clashes with kwargs, as python's name managing | |
545 | # will kick in. |
|
545 | # will kick in. | |
546 | self = __self |
|
546 | self = __self | |
547 | self.name = __name |
|
547 | self.name = __name | |
@@ -555,7 +555,7 b' class CallExpression:' | |||||
555 | return inner |
|
555 | return inner | |
556 |
|
556 | |||
557 | def _repr_pretty_(self, p, cycle): |
|
557 | def _repr_pretty_(self, p, cycle): | |
558 | # dunders are to avoid clashes with kwargs, as python's name manging |
|
558 | # dunders are to avoid clashes with kwargs, as python's name managing | |
559 | # will kick in. |
|
559 | # will kick in. | |
560 |
|
560 | |||
561 | started = False |
|
561 | started = False |
@@ -77,7 +77,7 b' class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):' | |||||
77 | def connect(self, pt_app: PromptSession): |
|
77 | def connect(self, pt_app: PromptSession): | |
78 | self._connected_apps.append(pt_app) |
|
78 | self._connected_apps.append(pt_app) | |
79 | # note: `on_text_changed` could be used for a bit different behaviour |
|
79 | # note: `on_text_changed` could be used for a bit different behaviour | |
80 | # on character deletion (i.e. reseting history position on backspace) |
|
80 | # on character deletion (i.e. resetting history position on backspace) | |
81 | pt_app.default_buffer.on_text_insert.add_handler(self.reset_history_position) |
|
81 | pt_app.default_buffer.on_text_insert.add_handler(self.reset_history_position) | |
82 | pt_app.default_buffer.on_cursor_position_changed.add_handler(self._dismiss) |
|
82 | pt_app.default_buffer.on_cursor_position_changed.add_handler(self._dismiss) | |
83 |
|
83 |
@@ -207,7 +207,7 b' class PassThrough(Filter):' | |||||
207 | pass_through = PassThrough() |
|
207 | pass_through = PassThrough() | |
208 |
|
208 | |||
209 | # these one is callable and re-used multiple times hence needs to be |
|
209 | # these one is callable and re-used multiple times hence needs to be | |
210 | # only defined once beforhand so that transforming back to human-readable |
|
210 | # only defined once beforehand so that transforming back to human-readable | |
211 | # names works well in the documentation. |
|
211 | # names works well in the documentation. | |
212 | default_buffer_focused = has_focus(DEFAULT_BUFFER) |
|
212 | default_buffer_focused = has_focus(DEFAULT_BUFFER) | |
213 |
|
213 |
@@ -370,7 +370,7 b' def num_ini_spaces(strng: str) -> int:' | |||||
370 | """Return the number of initial spaces in a string""" |
|
370 | """Return the number of initial spaces in a string""" | |
371 | warnings.warn( |
|
371 | warnings.warn( | |
372 | "`num_ini_spaces` is Pending Deprecation since IPython 8.17." |
|
372 | "`num_ini_spaces` is Pending Deprecation since IPython 8.17." | |
373 |
"It is considered f |
|
373 | "It is considered for removal in in future version. " | |
374 | "Please open an issue if you believe it should be kept.", |
|
374 | "Please open an issue if you believe it should be kept.", | |
375 | stacklevel=2, |
|
375 | stacklevel=2, | |
376 | category=PendingDeprecationWarning, |
|
376 | category=PendingDeprecationWarning, | |
@@ -431,7 +431,7 b' def wrap_paragraphs(text: str, ncols: int = 80) -> List[str]:' | |||||
431 | """ |
|
431 | """ | |
432 | warnings.warn( |
|
432 | warnings.warn( | |
433 | "`wrap_paragraphs` is Pending Deprecation since IPython 8.17." |
|
433 | "`wrap_paragraphs` is Pending Deprecation since IPython 8.17." | |
434 |
"It is considered f |
|
434 | "It is considered for removal in in future version. " | |
435 | "Please open an issue if you believe it should be kept.", |
|
435 | "Please open an issue if you believe it should be kept.", | |
436 | stacklevel=2, |
|
436 | stacklevel=2, | |
437 | category=PendingDeprecationWarning, |
|
437 | category=PendingDeprecationWarning, | |
@@ -512,7 +512,7 b' def strip_ansi(source: str) -> str:' | |||||
512 | """ |
|
512 | """ | |
513 | warnings.warn( |
|
513 | warnings.warn( | |
514 | "`strip_ansi` is Pending Deprecation since IPython 8.17." |
|
514 | "`strip_ansi` is Pending Deprecation since IPython 8.17." | |
515 |
"It is considered f |
|
515 | "It is considered for removal in in future version. " | |
516 | "Please open an issue if you believe it should be kept.", |
|
516 | "Please open an issue if you believe it should be kept.", | |
517 | stacklevel=2, |
|
517 | stacklevel=2, | |
518 | category=PendingDeprecationWarning, |
|
518 | category=PendingDeprecationWarning, | |
@@ -761,7 +761,7 b' def compute_item_matrix(' | |||||
761 | """ |
|
761 | """ | |
762 | warnings.warn( |
|
762 | warnings.warn( | |
763 | "`compute_item_matrix` is Pending Deprecation since IPython 8.17." |
|
763 | "`compute_item_matrix` is Pending Deprecation since IPython 8.17." | |
764 |
"It is considered f |
|
764 | "It is considered for removal in in future version. " | |
765 | "Please open an issue if you believe it should be kept.", |
|
765 | "Please open an issue if you believe it should be kept.", | |
766 | stacklevel=2, |
|
766 | stacklevel=2, | |
767 | category=PendingDeprecationWarning, |
|
767 | category=PendingDeprecationWarning, |
@@ -112,7 +112,7 b' try:' | |||||
112 | ) |
|
112 | ) | |
113 |
|
113 | |||
114 | except ModuleNotFoundError: |
|
114 | except ModuleNotFoundError: | |
115 | # In case intersphinx_registry is not yet packages on current plaform |
|
115 | # In case intersphinx_registry is not yet packages on current platform | |
116 | # as it is quite recent. |
|
116 | # as it is quite recent. | |
117 | print("/!\\ intersphinx_registry not installed, relying on local mapping.") |
|
117 | print("/!\\ intersphinx_registry not installed, relying on local mapping.") | |
118 | intersphinx_mapping = config["intersphinx_mapping"] |
|
118 | intersphinx_mapping = config["intersphinx_mapping"] |
@@ -221,7 +221,7 b' New features' | |||||
221 | * Gather/scatter are now implemented in the client to reduce the work load |
|
221 | * Gather/scatter are now implemented in the client to reduce the work load | |
222 | of the controller and improve performance. |
|
222 | of the controller and improve performance. | |
223 |
|
223 | |||
224 |
* Complete rewrite of the IPython docu |
|
224 | * Complete rewrite of the IPython documentation. All of the documentation | |
225 | from the IPython website has been moved into docs/source as restructured |
|
225 | from the IPython website has been moved into docs/source as restructured | |
226 | text documents. PDF and HTML documentation are being generated using |
|
226 | text documents. PDF and HTML documentation are being generated using | |
227 | Sphinx. |
|
227 | Sphinx. |
@@ -191,7 +191,7 b' Virtualenv handling fixes:' | |||||
191 |
|
191 | |||
192 | - init_virtualenv now uses Pathlib :ghpull:`12548` |
|
192 | - init_virtualenv now uses Pathlib :ghpull:`12548` | |
193 | - Fix Improper path comparison of virtualenv directories :ghpull:`13140` |
|
193 | - Fix Improper path comparison of virtualenv directories :ghpull:`13140` | |
194 |
- Fix virtual environment user warning for lower case path |
|
194 | - Fix virtual environment user warning for lower case paths :ghpull:`13094` | |
195 | - Adapt to all sorts of drive names for cygwin :ghpull:`13153` |
|
195 | - Adapt to all sorts of drive names for cygwin :ghpull:`13153` | |
196 |
|
196 | |||
197 | New Features: |
|
197 | New Features: | |
@@ -589,7 +589,7 b' issues and pushing 8.0 forward.' | |||||
589 | Here are thus some of the changes for IPython 7.20. |
|
589 | Here are thus some of the changes for IPython 7.20. | |
590 |
|
590 | |||
591 | - Support for PyQt5 >= 5.11 :ghpull:`12715` |
|
591 | - Support for PyQt5 >= 5.11 :ghpull:`12715` | |
592 | - ``%reset`` remove imports more agressively :ghpull:`12718` |
|
592 | - ``%reset`` remove imports more aggressively :ghpull:`12718` | |
593 | - fix the ``%conda`` magic :ghpull:`12739` |
|
593 | - fix the ``%conda`` magic :ghpull:`12739` | |
594 | - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793` |
|
594 | - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793` | |
595 |
|
595 | |||
@@ -868,7 +868,7 b' IPython.' | |||||
868 | Increase Tab Completion Menu Height |
|
868 | Increase Tab Completion Menu Height | |
869 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
869 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
870 |
|
870 | |||
871 | In terminal IPython it is possible to increase the hight of the tab-completion |
|
871 | In terminal IPython it is possible to increase the height of the tab-completion | |
872 | menu. To do so set the value of |
|
872 | menu. To do so set the value of | |
873 | :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more |
|
873 | :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more | |
874 | space at the bottom of the screen for various kind of menus in IPython including |
|
874 | space at the bottom of the screen for various kind of menus in IPython including | |
@@ -1050,7 +1050,7 b' IPython has decided to follow the informational `NEP 29' | |||||
1050 | policy as to which version of (C)Python and NumPy are supported. |
|
1050 | policy as to which version of (C)Python and NumPy are supported. | |
1051 |
|
1051 | |||
1052 | We thus dropped support for Python 3.5, and cleaned up a number of code path |
|
1052 | We thus dropped support for Python 3.5, and cleaned up a number of code path | |
1053 |
that were Python-version depend |
|
1053 | that were Python-version dependent. If you are on 3.5 or earlier pip should | |
1054 | automatically give you the latest compatible version of IPython so you do not |
|
1054 | automatically give you the latest compatible version of IPython so you do not | |
1055 | need to pin to a given version. |
|
1055 | need to pin to a given version. | |
1056 |
|
1056 | |||
@@ -1117,7 +1117,7 b' progressively enable these features by default in the next few releases, and' | |||||
1117 | contribution is welcomed. |
|
1117 | contribution is welcomed. | |
1118 |
|
1118 | |||
1119 | We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more |
|
1119 | We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more | |
1120 |
information |
|
1120 | information. | |
1121 |
|
1121 | |||
1122 | This is originally based on work form in :ghpull:`10610` from @stephanh42 |
|
1122 | This is originally based on work form in :ghpull:`10610` from @stephanh42 | |
1123 | started over two years ago, and still a lot need to be done. |
|
1123 | started over two years ago, and still a lot need to be done. | |
@@ -1371,7 +1371,7 b' IPython 7.3.0' | |||||
1371 |
|
1371 | |||
1372 |
|
1372 | |||
1373 | IPython 7.3.0 bring several bug fixes and small improvements that you will |
|
1373 | IPython 7.3.0 bring several bug fixes and small improvements that you will | |
1374 |
described bel |
|
1374 | described below. | |
1375 |
|
1375 | |||
1376 | The biggest change to this release is the implementation of the ``%conda`` and |
|
1376 | The biggest change to this release is the implementation of the ``%conda`` and | |
1377 | ``%pip`` magics, that will attempt to install packages in the **current |
|
1377 | ``%pip`` magics, that will attempt to install packages in the **current | |
@@ -1456,7 +1456,7 b' unwillingly relying on a bug in CPython.' | |||||
1456 |
|
1456 | |||
1457 | New Core Dev: |
|
1457 | New Core Dev: | |
1458 |
|
1458 | |||
1459 | - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic |
|
1459 | - We welcome Jonathan Slenders to the committers. Jonathan has done a fantastic | |
1460 | work on prompt_toolkit, and we'd like to recognise his impact by giving him |
|
1460 | work on prompt_toolkit, and we'd like to recognise his impact by giving him | |
1461 | commit rights. :ghissue:`11397` |
|
1461 | commit rights. :ghissue:`11397` | |
1462 |
|
1462 |
@@ -46,7 +46,7 b' IPython 8.27' | |||||
46 | New release of IPython after a month off (not enough changes). We can see a few |
|
46 | New release of IPython after a month off (not enough changes). We can see a few | |
47 | important changes for this release. |
|
47 | important changes for this release. | |
48 |
|
48 | |||
49 |
- autocall was be |
|
49 | - autocall was being call getitem, :ghpull:`14486` | |
50 | - Only copy files in startup dir if we just created it. :ghpull:`14497` |
|
50 | - Only copy files in startup dir if we just created it. :ghpull:`14497` | |
51 | - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this |
|
51 | - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this | |
52 | the first IPython release officially compatible with Python 3.13; you will |
|
52 | the first IPython release officially compatible with Python 3.13; you will | |
@@ -680,7 +680,7 b' Python 3.12 changed its tokenizer to have better support for f-strings and allow' | |||||
680 | This is a great new feature and performance improvement in Python 3.12. |
|
680 | This is a great new feature and performance improvement in Python 3.12. | |
681 |
|
681 | |||
682 | Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will |
|
682 | Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will | |
683 |
break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guarant |
|
683 | break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guaranteed. | |
684 | It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell |
|
684 | It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell | |
685 | escape (``! ....``), ..., as well as how to do it if we can. |
|
685 | escape (``! ....``), ..., as well as how to do it if we can. | |
686 |
|
686 | |||
@@ -933,7 +933,7 b' We introduce more descriptive names for the ``%autoreload`` parameter:' | |||||
933 | whitelisted by ``%aimport`` statements. |
|
933 | whitelisted by ``%aimport`` statements. | |
934 | - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those |
|
934 | - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those | |
935 | blacklisted by ``%aimport`` statements. |
|
935 | blacklisted by ``%aimport`` statements. | |
936 | - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new |
|
936 | - ``%autoreload complete`` (also ``%autoreload 3``) - all the features of ``all`` but also adding new | |
937 | objects from the imported modules (see |
|
937 | objects from the imported modules (see | |
938 | IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects). |
|
938 | IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects). | |
939 |
|
939 | |||
@@ -1464,7 +1464,7 b' values in order to prevent potential Execution with Unnecessary Privileges.' | |||||
1464 | Almost all version of IPython looks for configuration and profiles in current |
|
1464 | Almost all version of IPython looks for configuration and profiles in current | |
1465 | working directory. Since IPython was developed before pip and environments |
|
1465 | working directory. Since IPython was developed before pip and environments | |
1466 | existed it was used a convenient way to load code/packages in a project |
|
1466 | existed it was used a convenient way to load code/packages in a project | |
1467 |
depend |
|
1467 | dependent way. | |
1468 |
|
1468 | |||
1469 | In 2022, it is not necessary anymore, and can lead to confusing behavior where |
|
1469 | In 2022, it is not necessary anymore, and can lead to confusing behavior where | |
1470 | for example cloning a repository and starting IPython or loading a notebook from |
|
1470 | for example cloning a repository and starting IPython or loading a notebook from | |
@@ -2394,4 +2394,4 b' The following attribute/methods have been removed::' | |||||
2394 |
|
2394 | |||
2395 | ------ |
|
2395 | ------ | |
2396 |
|
2396 | |||
2397 |
.. [1] If this make you |
|
2397 | .. [1] If this make you uncomfortable feel free to not use IPython 8.23. |
@@ -11,7 +11,7 b'' | |||||
11 | "cell_type": "markdown", |
|
11 | "cell_type": "markdown", | |
12 | "metadata": {}, |
|
12 | "metadata": {}, | |
13 | "source": [ |
|
13 | "source": [ | |
14 | "A number of third party libraries defined their own custom display logic. This gives their objcts rich output by default when used in the Notebook." |
|
14 | "A number of third party libraries defined their own custom display logic. This gives their objects rich output by default when used in the Notebook." | |
15 | ] |
|
15 | ] | |
16 | }, |
|
16 | }, | |
17 | { |
|
17 | { |
@@ -48,7 +48,7 b' def get_auth_token():' | |||||
48 | return token |
|
48 | return token | |
49 |
|
49 | |||
50 | print( |
|
50 | print( | |
51 | "Get a token fom https://github.com/settings/tokens with public repo and gist." |
|
51 | "Get a token from https://github.com/settings/tokens with public repo and gist." | |
52 | ) |
|
52 | ) | |
53 | token = getpass.getpass("Token: ", stream=sys.stderr) |
|
53 | token = getpass.getpass("Token: ", stream=sys.stderr) | |
54 |
|
54 |
General Comments 0
You need to be logged in to leave comments.
Login now