Show More
@@ -1,2056 +1,2056 b'' | |||
|
1 | 1 | """Completion for IPython. |
|
2 | 2 | |
|
3 | 3 | This module started as fork of the rlcompleter module in the Python standard |
|
4 | 4 | library. The original enhancements made to rlcompleter have been sent |
|
5 | 5 | upstream and were accepted as of Python 2.3, |
|
6 | 6 | |
|
7 | 7 | This module now support a wide variety of completion mechanism both available |
|
8 | 8 | for normal classic Python code, as well as completer for IPython specific |
|
9 | 9 | Syntax like magics. |
|
10 | 10 | |
|
11 | 11 | Latex and Unicode completion |
|
12 | 12 | ============================ |
|
13 | 13 | |
|
14 | 14 | IPython and compatible frontends not only can complete your code, but can help |
|
15 | 15 | you to input a wide range of characters. In particular we allow you to insert |
|
16 | 16 | a unicode character using the tab completion mechanism. |
|
17 | 17 | |
|
18 | 18 | Forward latex/unicode completion |
|
19 | 19 | -------------------------------- |
|
20 | 20 | |
|
21 | 21 | Forward completion allows you to easily type a unicode character using its latex |
|
22 | 22 | name, or unicode long description. To do so type a backslash follow by the |
|
23 | 23 | relevant name and press tab: |
|
24 | 24 | |
|
25 | 25 | |
|
26 | 26 | Using latex completion: |
|
27 | 27 | |
|
28 | 28 | .. code:: |
|
29 | 29 | |
|
30 | 30 | \\alpha<tab> |
|
31 | 31 | Ξ± |
|
32 | 32 | |
|
33 | 33 | or using unicode completion: |
|
34 | 34 | |
|
35 | 35 | |
|
36 | 36 | .. code:: |
|
37 | 37 | |
|
38 | 38 | \\greek small letter alpha<tab> |
|
39 | 39 | Ξ± |
|
40 | 40 | |
|
41 | 41 | |
|
42 | 42 | Only valid Python identifiers will complete. Combining characters (like arrow or |
|
43 | 43 | dots) are also available, unlike latex they need to be put after the their |
|
44 | 44 | counterpart that is to say, `F\\\\vec<tab>` is correct, not `\\\\vec<tab>F`. |
|
45 | 45 | |
|
46 | 46 | Some browsers are known to display combining characters incorrectly. |
|
47 | 47 | |
|
48 | 48 | Backward latex completion |
|
49 | 49 | ------------------------- |
|
50 | 50 | |
|
51 | 51 | It is sometime challenging to know how to type a character, if you are using |
|
52 | 52 | IPython, or any compatible frontend you can prepend backslash to the character |
|
53 | 53 | and press `<tab>` to expand it to its latex form. |
|
54 | 54 | |
|
55 | 55 | .. code:: |
|
56 | 56 | |
|
57 | 57 | \\Ξ±<tab> |
|
58 | 58 | \\alpha |
|
59 | 59 | |
|
60 | 60 | |
|
61 | 61 | Both forward and backward completions can be deactivated by setting the |
|
62 | 62 | ``Completer.backslash_combining_completions`` option to ``False``. |
|
63 | 63 | |
|
64 | 64 | |
|
65 | 65 | Experimental |
|
66 | 66 | ============ |
|
67 | 67 | |
|
68 | 68 | Starting with IPython 6.0, this module can make use of the Jedi library to |
|
69 | 69 | generate completions both using static analysis of the code, and dynamically |
|
70 | 70 | inspecting multiple namespaces. The APIs attached to this new mechanism is |
|
71 | 71 | unstable and will raise unless use in an :any:`provisionalcompleter` context |
|
72 | 72 | manager. |
|
73 | 73 | |
|
74 | 74 | You will find that the following are experimental: |
|
75 | 75 | |
|
76 | 76 | - :any:`provisionalcompleter` |
|
77 | 77 | - :any:`IPCompleter.completions` |
|
78 | 78 | - :any:`Completion` |
|
79 | 79 | - :any:`rectify_completions` |
|
80 | 80 | |
|
81 | 81 | .. note:: |
|
82 | 82 | |
|
83 | 83 | better name for :any:`rectify_completions` ? |
|
84 | 84 | |
|
85 | 85 | We welcome any feedback on these new API, and we also encourage you to try this |
|
86 | 86 | module in debug mode (start IPython with ``--Completer.debug=True``) in order |
|
87 | 87 | to have extra logging information is :any:`jedi` is crashing, or if current |
|
88 | 88 | IPython completer pending deprecations are returning results not yet handled |
|
89 | 89 | by :any:`jedi` |
|
90 | 90 | |
|
91 | 91 | Using Jedi for tab completion allow snippets like the following to work without |
|
92 | 92 | having to execute any code: |
|
93 | 93 | |
|
94 | 94 | >>> myvar = ['hello', 42] |
|
95 | 95 | ... myvar[1].bi<tab> |
|
96 | 96 | |
|
97 | 97 | Tab completion will be able to infer that ``myvar[1]`` is a real number without |
|
98 | 98 | executing any code unlike the previously available ``IPCompleter.greedy`` |
|
99 | 99 | option. |
|
100 | 100 | |
|
101 | 101 | Be sure to update :any:`jedi` to the latest stable version or to try the |
|
102 | 102 | current development version to get better completions. |
|
103 | 103 | """ |
|
104 | 104 | |
|
105 | 105 | |
|
106 | 106 | # Copyright (c) IPython Development Team. |
|
107 | 107 | # Distributed under the terms of the Modified BSD License. |
|
108 | 108 | # |
|
109 | 109 | # Some of this code originated from rlcompleter in the Python standard library |
|
110 | 110 | # Copyright (C) 2001 Python Software Foundation, www.python.org |
|
111 | 111 | |
|
112 | 112 | |
|
113 | 113 | import __main__ |
|
114 | 114 | import builtins as builtin_mod |
|
115 | 115 | import glob |
|
116 | 116 | import time |
|
117 | 117 | import inspect |
|
118 | 118 | import itertools |
|
119 | 119 | import keyword |
|
120 | 120 | import os |
|
121 | 121 | import re |
|
122 | 122 | import sys |
|
123 | 123 | import unicodedata |
|
124 | 124 | import string |
|
125 | 125 | import warnings |
|
126 | 126 | |
|
127 | 127 | from contextlib import contextmanager |
|
128 | 128 | from importlib import import_module |
|
129 | 129 | from typing import Iterator, List, Tuple, Iterable, Union |
|
130 | 130 | from types import SimpleNamespace |
|
131 | 131 | |
|
132 | 132 | from traitlets.config.configurable import Configurable |
|
133 | 133 | from IPython.core.error import TryNext |
|
134 | 134 | from IPython.core.inputsplitter import ESC_MAGIC |
|
135 | 135 | from IPython.core.latex_symbols import latex_symbols, reverse_latex_symbol |
|
136 | 136 | from IPython.core.oinspect import InspectColors |
|
137 | 137 | from IPython.utils import generics |
|
138 | 138 | from IPython.utils.dir2 import dir2, get_real_method |
|
139 | 139 | from IPython.utils.process import arg_split |
|
140 | 140 | from traitlets import Bool, Enum, observe, Int |
|
141 | 141 | |
|
142 | 142 | # skip module docstests |
|
143 | 143 | skip_doctest = True |
|
144 | 144 | |
|
145 | 145 | try: |
|
146 | 146 | import jedi |
|
147 | 147 | jedi.settings.case_insensitive_completion = False |
|
148 | 148 | import jedi.api.helpers |
|
149 | 149 | import jedi.api.classes |
|
150 | 150 | JEDI_INSTALLED = True |
|
151 | 151 | except ImportError: |
|
152 | 152 | JEDI_INSTALLED = False |
|
153 | 153 | #----------------------------------------------------------------------------- |
|
154 | 154 | # Globals |
|
155 | 155 | #----------------------------------------------------------------------------- |
|
156 | 156 | |
|
157 | 157 | # Public API |
|
158 | 158 | __all__ = ['Completer','IPCompleter'] |
|
159 | 159 | |
|
160 | 160 | if sys.platform == 'win32': |
|
161 | 161 | PROTECTABLES = ' ' |
|
162 | 162 | else: |
|
163 | 163 | PROTECTABLES = ' ()[]{}?=\\|;:\'#*"^&' |
|
164 | 164 | |
|
165 | 165 | # Protect against returning an enormous number of completions which the frontend |
|
166 | 166 | # may have trouble processing. |
|
167 | 167 | MATCHES_LIMIT = 500 |
|
168 | 168 | |
|
169 | 169 | _deprecation_readline_sentinel = object() |
|
170 | 170 | |
|
171 | 171 | |
|
172 | 172 | class ProvisionalCompleterWarning(FutureWarning): |
|
173 | 173 | """ |
|
174 | 174 | Exception raise by an experimental feature in this module. |
|
175 | 175 | |
|
176 | 176 | Wrap code in :any:`provisionalcompleter` context manager if you |
|
177 | 177 | are certain you want to use an unstable feature. |
|
178 | 178 | """ |
|
179 | 179 | pass |
|
180 | 180 | |
|
181 | 181 | warnings.filterwarnings('error', category=ProvisionalCompleterWarning) |
|
182 | 182 | |
|
183 | 183 | @contextmanager |
|
184 | 184 | def provisionalcompleter(action='ignore'): |
|
185 | 185 | """ |
|
186 | 186 | |
|
187 | 187 | |
|
188 | 188 | This contest manager has to be used in any place where unstable completer |
|
189 | 189 | behavior and API may be called. |
|
190 | 190 | |
|
191 | 191 | >>> with provisionalcompleter(): |
|
192 | 192 | ... completer.do_experimetal_things() # works |
|
193 | 193 | |
|
194 | 194 | >>> completer.do_experimental_things() # raises. |
|
195 | 195 | |
|
196 | 196 | .. note:: Unstable |
|
197 | 197 | |
|
198 | 198 | By using this context manager you agree that the API in use may change |
|
199 | 199 | without warning, and that you won't complain if they do so. |
|
200 | 200 | |
|
201 | 201 | You also understand that if the API is not to you liking you should report |
|
202 | 202 | a bug to explain your use case upstream and improve the API and will loose |
|
203 | 203 | credibility if you complain after the API is make stable. |
|
204 | 204 | |
|
205 | 205 | We'll be happy to get your feedback , feature request and improvement on |
|
206 | 206 | any of the unstable APIs ! |
|
207 | 207 | """ |
|
208 | 208 | with warnings.catch_warnings(): |
|
209 | 209 | warnings.filterwarnings(action, category=ProvisionalCompleterWarning) |
|
210 | 210 | yield |
|
211 | 211 | |
|
212 | 212 | |
|
213 | 213 | def has_open_quotes(s): |
|
214 | 214 | """Return whether a string has open quotes. |
|
215 | 215 | |
|
216 | 216 | This simply counts whether the number of quote characters of either type in |
|
217 | 217 | the string is odd. |
|
218 | 218 | |
|
219 | 219 | Returns |
|
220 | 220 | ------- |
|
221 | 221 | If there is an open quote, the quote character is returned. Else, return |
|
222 | 222 | False. |
|
223 | 223 | """ |
|
224 | 224 | # We check " first, then ', so complex cases with nested quotes will get |
|
225 | 225 | # the " to take precedence. |
|
226 | 226 | if s.count('"') % 2: |
|
227 | 227 | return '"' |
|
228 | 228 | elif s.count("'") % 2: |
|
229 | 229 | return "'" |
|
230 | 230 | else: |
|
231 | 231 | return False |
|
232 | 232 | |
|
233 | 233 | |
|
234 | 234 | def protect_filename(s, protectables=PROTECTABLES): |
|
235 | 235 | """Escape a string to protect certain characters.""" |
|
236 | 236 | if set(s) & set(protectables): |
|
237 | 237 | if sys.platform == "win32": |
|
238 | 238 | return '"' + s + '"' |
|
239 | 239 | else: |
|
240 | 240 | return "".join(("\\" + c if c in protectables else c) for c in s) |
|
241 | 241 | else: |
|
242 | 242 | return s |
|
243 | 243 | |
|
244 | 244 | |
|
245 | 245 | def expand_user(path:str) -> Tuple[str, bool, str]: |
|
246 | 246 | """Expand ``~``-style usernames in strings. |
|
247 | 247 | |
|
248 | 248 | This is similar to :func:`os.path.expanduser`, but it computes and returns |
|
249 | 249 | extra information that will be useful if the input was being used in |
|
250 | 250 | computing completions, and you wish to return the completions with the |
|
251 | 251 | original '~' instead of its expanded value. |
|
252 | 252 | |
|
253 | 253 | Parameters |
|
254 | 254 | ---------- |
|
255 | 255 | path : str |
|
256 | 256 | String to be expanded. If no ~ is present, the output is the same as the |
|
257 | 257 | input. |
|
258 | 258 | |
|
259 | 259 | Returns |
|
260 | 260 | ------- |
|
261 | 261 | newpath : str |
|
262 | 262 | Result of ~ expansion in the input path. |
|
263 | 263 | tilde_expand : bool |
|
264 | 264 | Whether any expansion was performed or not. |
|
265 | 265 | tilde_val : str |
|
266 | 266 | The value that ~ was replaced with. |
|
267 | 267 | """ |
|
268 | 268 | # Default values |
|
269 | 269 | tilde_expand = False |
|
270 | 270 | tilde_val = '' |
|
271 | 271 | newpath = path |
|
272 | 272 | |
|
273 | 273 | if path.startswith('~'): |
|
274 | 274 | tilde_expand = True |
|
275 | 275 | rest = len(path)-1 |
|
276 | 276 | newpath = os.path.expanduser(path) |
|
277 | 277 | if rest: |
|
278 | 278 | tilde_val = newpath[:-rest] |
|
279 | 279 | else: |
|
280 | 280 | tilde_val = newpath |
|
281 | 281 | |
|
282 | 282 | return newpath, tilde_expand, tilde_val |
|
283 | 283 | |
|
284 | 284 | |
|
285 | 285 | def compress_user(path:str, tilde_expand:bool, tilde_val:str) -> str: |
|
286 | 286 | """Does the opposite of expand_user, with its outputs. |
|
287 | 287 | """ |
|
288 | 288 | if tilde_expand: |
|
289 | 289 | return path.replace(tilde_val, '~') |
|
290 | 290 | else: |
|
291 | 291 | return path |
|
292 | 292 | |
|
293 | 293 | |
|
294 | 294 | def completions_sorting_key(word): |
|
295 | 295 | """key for sorting completions |
|
296 | 296 | |
|
297 | 297 | This does several things: |
|
298 | 298 | |
|
299 | 299 | - Demote any completions starting with underscores to the end |
|
300 | 300 | - Insert any %magic and %%cellmagic completions in the alphabetical order |
|
301 | 301 | by their name |
|
302 | 302 | """ |
|
303 | 303 | prio1, prio2 = 0, 0 |
|
304 | 304 | |
|
305 | 305 | if word.startswith('__'): |
|
306 | 306 | prio1 = 2 |
|
307 | 307 | elif word.startswith('_'): |
|
308 | 308 | prio1 = 1 |
|
309 | 309 | |
|
310 | 310 | if word.endswith('='): |
|
311 | 311 | prio1 = -1 |
|
312 | 312 | |
|
313 | 313 | if word.startswith('%%'): |
|
314 | 314 | # If there's another % in there, this is something else, so leave it alone |
|
315 | 315 | if not "%" in word[2:]: |
|
316 | 316 | word = word[2:] |
|
317 | 317 | prio2 = 2 |
|
318 | 318 | elif word.startswith('%'): |
|
319 | 319 | if not "%" in word[1:]: |
|
320 | 320 | word = word[1:] |
|
321 | 321 | prio2 = 1 |
|
322 | 322 | |
|
323 | 323 | return prio1, word, prio2 |
|
324 | 324 | |
|
325 | 325 | |
|
326 | 326 | class _FakeJediCompletion: |
|
327 | 327 | """ |
|
328 | 328 | This is a workaround to communicate to the UI that Jedi has crashed and to |
|
329 | 329 | report a bug. Will be used only id :any:`IPCompleter.debug` is set to true. |
|
330 | 330 | |
|
331 | 331 | Added in IPython 6.0 so should likely be removed for 7.0 |
|
332 | 332 | |
|
333 | 333 | """ |
|
334 | 334 | |
|
335 | 335 | def __init__(self, name): |
|
336 | 336 | |
|
337 | 337 | self.name = name |
|
338 | 338 | self.complete = name |
|
339 | 339 | self.type = 'crashed' |
|
340 | 340 | self.name_with_symbols = name |
|
341 | 341 | self.signature = '' |
|
342 | 342 | self._origin = 'fake' |
|
343 | 343 | |
|
344 | 344 | def __repr__(self): |
|
345 | 345 | return '<Fake completion object jedi has crashed>' |
|
346 | 346 | |
|
347 | 347 | |
|
348 | 348 | class Completion: |
|
349 | 349 | """ |
|
350 | 350 | Completion object used and return by IPython completers. |
|
351 | 351 | |
|
352 | 352 | .. warning:: Unstable |
|
353 | 353 | |
|
354 | 354 | This function is unstable, API may change without warning. |
|
355 | 355 | It will also raise unless use in proper context manager. |
|
356 | 356 | |
|
357 | 357 | This act as a middle ground :any:`Completion` object between the |
|
358 | 358 | :any:`jedi.api.classes.Completion` object and the Prompt Toolkit completion |
|
359 | 359 | object. While Jedi need a lot of information about evaluator and how the |
|
360 | 360 | code should be ran/inspected, PromptToolkit (and other frontend) mostly |
|
361 | 361 | need user facing information. |
|
362 | 362 | |
|
363 | 363 | - Which range should be replaced replaced by what. |
|
364 | 364 | - Some metadata (like completion type), or meta information to displayed to |
|
365 | 365 | the use user. |
|
366 | 366 | |
|
367 | 367 | For debugging purpose we can also store the origin of the completion (``jedi``, |
|
368 | 368 | ``IPython.python_matches``, ``IPython.magics_matches``...). |
|
369 | 369 | """ |
|
370 | 370 | |
|
371 | 371 | __slots__ = ['start', 'end', 'text', 'type', 'signature', '_origin'] |
|
372 | 372 | |
|
373 | 373 | def __init__(self, start: int, end: int, text: str, *, type: str=None, _origin='', signature='') -> None: |
|
374 | 374 | warnings.warn("``Completion`` is a provisional API (as of IPython 6.0). " |
|
375 | 375 | "It may change without warnings. " |
|
376 | 376 | "Use in corresponding context manager.", |
|
377 | 377 | category=ProvisionalCompleterWarning, stacklevel=2) |
|
378 | 378 | |
|
379 | 379 | self.start = start |
|
380 | 380 | self.end = end |
|
381 | 381 | self.text = text |
|
382 | 382 | self.type = type |
|
383 | 383 | self.signature = signature |
|
384 | 384 | self._origin = _origin |
|
385 | 385 | |
|
386 | 386 | def __repr__(self): |
|
387 | 387 | return '<Completion start=%s end=%s text=%r type=%r, signature=%r,>' % \ |
|
388 | 388 | (self.start, self.end, self.text, self.type or '?', self.signature or '?') |
|
389 | 389 | |
|
390 | 390 | def __eq__(self, other)->Bool: |
|
391 | 391 | """ |
|
392 | 392 | Equality and hash do not hash the type (as some completer may not be |
|
393 | 393 | able to infer the type), but are use to (partially) de-duplicate |
|
394 | 394 | completion. |
|
395 | 395 | |
|
396 | 396 | Completely de-duplicating completion is a bit tricker that just |
|
397 | 397 | comparing as it depends on surrounding text, which Completions are not |
|
398 | 398 | aware of. |
|
399 | 399 | """ |
|
400 | 400 | return self.start == other.start and \ |
|
401 | 401 | self.end == other.end and \ |
|
402 | 402 | self.text == other.text |
|
403 | 403 | |
|
404 | 404 | def __hash__(self): |
|
405 | 405 | return hash((self.start, self.end, self.text)) |
|
406 | 406 | |
|
407 | 407 | |
|
408 | 408 | _IC = Iterable[Completion] |
|
409 | 409 | |
|
410 | 410 | |
|
411 | 411 | def _deduplicate_completions(text: str, completions: _IC)-> _IC: |
|
412 | 412 | """ |
|
413 | 413 | Deduplicate a set of completions. |
|
414 | 414 | |
|
415 | 415 | .. warning:: Unstable |
|
416 | 416 | |
|
417 | 417 | This function is unstable, API may change without warning. |
|
418 | 418 | |
|
419 | 419 | Parameters |
|
420 | 420 | ---------- |
|
421 | 421 | text: str |
|
422 | 422 | text that should be completed. |
|
423 | 423 | completions: Iterator[Completion] |
|
424 | 424 | iterator over the completions to deduplicate |
|
425 | 425 | |
|
426 | 426 | Yields |
|
427 | 427 | ------ |
|
428 | 428 | `Completions` objects |
|
429 | 429 | |
|
430 | 430 | |
|
431 | 431 | Completions coming from multiple sources, may be different but end up having |
|
432 | 432 | the same effect when applied to ``text``. If this is the case, this will |
|
433 | 433 | consider completions as equal and only emit the first encountered. |
|
434 | 434 | |
|
435 | 435 | Not folded in `completions()` yet for debugging purpose, and to detect when |
|
436 | 436 | the IPython completer does return things that Jedi does not, but should be |
|
437 | 437 | at some point. |
|
438 | 438 | """ |
|
439 | 439 | completions = list(completions) |
|
440 | 440 | if not completions: |
|
441 | 441 | return |
|
442 | 442 | |
|
443 | 443 | new_start = min(c.start for c in completions) |
|
444 | 444 | new_end = max(c.end for c in completions) |
|
445 | 445 | |
|
446 | 446 | seen = set() |
|
447 | 447 | for c in completions: |
|
448 | 448 | new_text = text[new_start:c.start] + c.text + text[c.end:new_end] |
|
449 | 449 | if new_text not in seen: |
|
450 | 450 | yield c |
|
451 | 451 | seen.add(new_text) |
|
452 | 452 | |
|
453 | 453 | |
|
454 | 454 | def rectify_completions(text: str, completions: _IC, *, _debug=False)->_IC: |
|
455 | 455 | """ |
|
456 | 456 | Rectify a set of completions to all have the same ``start`` and ``end`` |
|
457 | 457 | |
|
458 | 458 | .. warning:: Unstable |
|
459 | 459 | |
|
460 | 460 | This function is unstable, API may change without warning. |
|
461 | 461 | It will also raise unless use in proper context manager. |
|
462 | 462 | |
|
463 | 463 | Parameters |
|
464 | 464 | ---------- |
|
465 | 465 | text: str |
|
466 | 466 | text that should be completed. |
|
467 | 467 | completions: Iterator[Completion] |
|
468 | 468 | iterator over the completions to rectify |
|
469 | 469 | |
|
470 | 470 | |
|
471 | 471 | :any:`jedi.api.classes.Completion` s returned by Jedi may not have the same start and end, though |
|
472 | 472 | the Jupyter Protocol requires them to behave like so. This will readjust |
|
473 | 473 | the completion to have the same ``start`` and ``end`` by padding both |
|
474 | 474 | extremities with surrounding text. |
|
475 | 475 | |
|
476 | 476 | During stabilisation should support a ``_debug`` option to log which |
|
477 | 477 | completion are return by the IPython completer and not found in Jedi in |
|
478 | 478 | order to make upstream bug report. |
|
479 | 479 | """ |
|
480 | 480 | warnings.warn("`rectify_completions` is a provisional API (as of IPython 6.0). " |
|
481 | 481 | "It may change without warnings. " |
|
482 | 482 | "Use in corresponding context manager.", |
|
483 | 483 | category=ProvisionalCompleterWarning, stacklevel=2) |
|
484 | 484 | |
|
485 | 485 | completions = list(completions) |
|
486 | 486 | if not completions: |
|
487 | 487 | return |
|
488 | 488 | starts = (c.start for c in completions) |
|
489 | 489 | ends = (c.end for c in completions) |
|
490 | 490 | |
|
491 | 491 | new_start = min(starts) |
|
492 | 492 | new_end = max(ends) |
|
493 | 493 | |
|
494 | 494 | seen_jedi = set() |
|
495 | 495 | seen_python_matches = set() |
|
496 | 496 | for c in completions: |
|
497 | 497 | new_text = text[new_start:c.start] + c.text + text[c.end:new_end] |
|
498 | 498 | if c._origin == 'jedi': |
|
499 | 499 | seen_jedi.add(new_text) |
|
500 | 500 | elif c._origin == 'IPCompleter.python_matches': |
|
501 | 501 | seen_python_matches.add(new_text) |
|
502 | 502 | yield Completion(new_start, new_end, new_text, type=c.type, _origin=c._origin, signature=c.signature) |
|
503 | 503 | diff = seen_python_matches.difference(seen_jedi) |
|
504 | 504 | if diff and _debug: |
|
505 | 505 | print('IPython.python matches have extras:', diff) |
|
506 | 506 | |
|
507 | 507 | |
|
508 | 508 | if sys.platform == 'win32': |
|
509 | 509 | DELIMS = ' \t\n`!@#$^&*()=+[{]}|;\'",<>?' |
|
510 | 510 | else: |
|
511 | 511 | DELIMS = ' \t\n`!@#$^&*()=+[{]}\\|;:\'",<>?' |
|
512 | 512 | |
|
513 | 513 | GREEDY_DELIMS = ' =\r\n' |
|
514 | 514 | |
|
515 | 515 | |
|
516 | 516 | class CompletionSplitter(object): |
|
517 | 517 | """An object to split an input line in a manner similar to readline. |
|
518 | 518 | |
|
519 | 519 | By having our own implementation, we can expose readline-like completion in |
|
520 | 520 | a uniform manner to all frontends. This object only needs to be given the |
|
521 | 521 | line of text to be split and the cursor position on said line, and it |
|
522 | 522 | returns the 'word' to be completed on at the cursor after splitting the |
|
523 | 523 | entire line. |
|
524 | 524 | |
|
525 | 525 | What characters are used as splitting delimiters can be controlled by |
|
526 | 526 | setting the ``delims`` attribute (this is a property that internally |
|
527 | 527 | automatically builds the necessary regular expression)""" |
|
528 | 528 | |
|
529 | 529 | # Private interface |
|
530 | 530 | |
|
531 | 531 | # A string of delimiter characters. The default value makes sense for |
|
532 | 532 | # IPython's most typical usage patterns. |
|
533 | 533 | _delims = DELIMS |
|
534 | 534 | |
|
535 | 535 | # The expression (a normal string) to be compiled into a regular expression |
|
536 | 536 | # for actual splitting. We store it as an attribute mostly for ease of |
|
537 | 537 | # debugging, since this type of code can be so tricky to debug. |
|
538 | 538 | _delim_expr = None |
|
539 | 539 | |
|
540 | 540 | # The regular expression that does the actual splitting |
|
541 | 541 | _delim_re = None |
|
542 | 542 | |
|
543 | 543 | def __init__(self, delims=None): |
|
544 | 544 | delims = CompletionSplitter._delims if delims is None else delims |
|
545 | 545 | self.delims = delims |
|
546 | 546 | |
|
547 | 547 | @property |
|
548 | 548 | def delims(self): |
|
549 | 549 | """Return the string of delimiter characters.""" |
|
550 | 550 | return self._delims |
|
551 | 551 | |
|
552 | 552 | @delims.setter |
|
553 | 553 | def delims(self, delims): |
|
554 | 554 | """Set the delimiters for line splitting.""" |
|
555 | 555 | expr = '[' + ''.join('\\'+ c for c in delims) + ']' |
|
556 | 556 | self._delim_re = re.compile(expr) |
|
557 | 557 | self._delims = delims |
|
558 | 558 | self._delim_expr = expr |
|
559 | 559 | |
|
560 | 560 | def split_line(self, line, cursor_pos=None): |
|
561 | 561 | """Split a line of text with a cursor at the given position. |
|
562 | 562 | """ |
|
563 | 563 | l = line if cursor_pos is None else line[:cursor_pos] |
|
564 | 564 | return self._delim_re.split(l)[-1] |
|
565 | 565 | |
|
566 | 566 | |
|
567 | 567 | |
|
568 | 568 | class Completer(Configurable): |
|
569 | 569 | |
|
570 | 570 | greedy = Bool(False, |
|
571 | 571 | help="""Activate greedy completion |
|
572 | 572 | PENDING DEPRECTION. this is now mostly taken care of with Jedi. |
|
573 | 573 | |
|
574 | 574 | This will enable completion on elements of lists, results of function calls, etc., |
|
575 | 575 | but can be unsafe because the code is actually evaluated on TAB. |
|
576 | 576 | """ |
|
577 | 577 | ).tag(config=True) |
|
578 | 578 | |
|
579 | 579 | use_jedi = Bool(default_value=JEDI_INSTALLED, |
|
580 | 580 | help="Experimental: Use Jedi to generate autocompletions. " |
|
581 | 581 | "Default to True if jedi is installed").tag(config=True) |
|
582 | 582 | |
|
583 | 583 | jedi_compute_type_timeout = Int(default_value=400, |
|
584 | 584 | help="""Experimental: restrict time (in milliseconds) during which Jedi can compute types. |
|
585 | 585 | Set to 0 to stop computing types. Non-zero value lower than 100ms may hurt |
|
586 | 586 | performance by preventing jedi to build its cache. |
|
587 | 587 | """).tag(config=True) |
|
588 | 588 | |
|
589 | 589 | debug = Bool(default_value=False, |
|
590 | 590 | help='Enable debug for the Completer. Mostly print extra ' |
|
591 | 591 | 'information for experimental jedi integration.')\ |
|
592 | 592 | .tag(config=True) |
|
593 | 593 | |
|
594 | 594 | backslash_combining_completions = Bool(True, |
|
595 | 595 | help="Enable unicode completions, e.g. \\alpha<tab> . " |
|
596 | 596 | "Includes completion of latex commands, unicode names, and expanding " |
|
597 | 597 | "unicode characters back to latex commands.").tag(config=True) |
|
598 | 598 | |
|
599 | 599 | |
|
600 | 600 | |
|
601 | 601 | def __init__(self, namespace=None, global_namespace=None, **kwargs): |
|
602 | 602 | """Create a new completer for the command line. |
|
603 | 603 | |
|
604 | 604 | Completer(namespace=ns, global_namespace=ns2) -> completer instance. |
|
605 | 605 | |
|
606 | 606 | If unspecified, the default namespace where completions are performed |
|
607 | 607 | is __main__ (technically, __main__.__dict__). Namespaces should be |
|
608 | 608 | given as dictionaries. |
|
609 | 609 | |
|
610 | 610 | An optional second namespace can be given. This allows the completer |
|
611 | 611 | to handle cases where both the local and global scopes need to be |
|
612 | 612 | distinguished. |
|
613 | 613 | """ |
|
614 | 614 | |
|
615 | 615 | # Don't bind to namespace quite yet, but flag whether the user wants a |
|
616 | 616 | # specific namespace or to use __main__.__dict__. This will allow us |
|
617 | 617 | # to bind to __main__.__dict__ at completion time, not now. |
|
618 | 618 | if namespace is None: |
|
619 | 619 | self.use_main_ns = True |
|
620 | 620 | else: |
|
621 | 621 | self.use_main_ns = False |
|
622 | 622 | self.namespace = namespace |
|
623 | 623 | |
|
624 | 624 | # The global namespace, if given, can be bound directly |
|
625 | 625 | if global_namespace is None: |
|
626 | 626 | self.global_namespace = {} |
|
627 | 627 | else: |
|
628 | 628 | self.global_namespace = global_namespace |
|
629 | 629 | |
|
630 | 630 | super(Completer, self).__init__(**kwargs) |
|
631 | 631 | |
|
632 | 632 | def complete(self, text, state): |
|
633 | 633 | """Return the next possible completion for 'text'. |
|
634 | 634 | |
|
635 | 635 | This is called successively with state == 0, 1, 2, ... until it |
|
636 | 636 | returns None. The completion should begin with 'text'. |
|
637 | 637 | |
|
638 | 638 | """ |
|
639 | 639 | if self.use_main_ns: |
|
640 | 640 | self.namespace = __main__.__dict__ |
|
641 | 641 | |
|
642 | 642 | if state == 0: |
|
643 | 643 | if "." in text: |
|
644 | 644 | self.matches = self.attr_matches(text) |
|
645 | 645 | else: |
|
646 | 646 | self.matches = self.global_matches(text) |
|
647 | 647 | try: |
|
648 | 648 | return self.matches[state] |
|
649 | 649 | except IndexError: |
|
650 | 650 | return None |
|
651 | 651 | |
|
652 | 652 | def global_matches(self, text): |
|
653 | 653 | """Compute matches when text is a simple name. |
|
654 | 654 | |
|
655 | 655 | Return a list of all keywords, built-in functions and names currently |
|
656 | 656 | defined in self.namespace or self.global_namespace that match. |
|
657 | 657 | |
|
658 | 658 | """ |
|
659 | 659 | matches = [] |
|
660 | 660 | match_append = matches.append |
|
661 | 661 | n = len(text) |
|
662 | 662 | for lst in [keyword.kwlist, |
|
663 | 663 | builtin_mod.__dict__.keys(), |
|
664 | 664 | self.namespace.keys(), |
|
665 | 665 | self.global_namespace.keys()]: |
|
666 | 666 | for word in lst: |
|
667 | 667 | if word[:n] == text and word != "__builtins__": |
|
668 | 668 | match_append(word) |
|
669 | 669 | |
|
670 | 670 | snake_case_re = re.compile(r"[^_]+(_[^_]+)+?\Z") |
|
671 | 671 | for lst in [self.namespace.keys(), |
|
672 | 672 | self.global_namespace.keys()]: |
|
673 | 673 | shortened = {"_".join([sub[0] for sub in word.split('_')]) : word |
|
674 | 674 | for word in lst if snake_case_re.match(word)} |
|
675 | 675 | for word in shortened.keys(): |
|
676 | 676 | if word[:n] == text and word != "__builtins__": |
|
677 | 677 | match_append(shortened[word]) |
|
678 | 678 | return matches |
|
679 | 679 | |
|
680 | 680 | def attr_matches(self, text): |
|
681 | 681 | """Compute matches when text contains a dot. |
|
682 | 682 | |
|
683 | 683 | Assuming the text is of the form NAME.NAME....[NAME], and is |
|
684 | 684 | evaluatable in self.namespace or self.global_namespace, it will be |
|
685 | 685 | evaluated and its attributes (as revealed by dir()) are used as |
|
686 |
possible completions. (For class instances, class members are |
|
|
686 | possible completions. (For class instances, class members are | |
|
687 | 687 | also considered.) |
|
688 | 688 | |
|
689 | 689 | WARNING: this can still invoke arbitrary C code, if an object |
|
690 | 690 | with a __getattr__ hook is evaluated. |
|
691 | 691 | |
|
692 | 692 | """ |
|
693 | 693 | |
|
694 | 694 | # Another option, seems to work great. Catches things like ''.<tab> |
|
695 | 695 | m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text) |
|
696 | 696 | |
|
697 | 697 | if m: |
|
698 | 698 | expr, attr = m.group(1, 3) |
|
699 | 699 | elif self.greedy: |
|
700 | 700 | m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer) |
|
701 | 701 | if not m2: |
|
702 | 702 | return [] |
|
703 | 703 | expr, attr = m2.group(1,2) |
|
704 | 704 | else: |
|
705 | 705 | return [] |
|
706 | 706 | |
|
707 | 707 | try: |
|
708 | 708 | obj = eval(expr, self.namespace) |
|
709 | 709 | except: |
|
710 | 710 | try: |
|
711 | 711 | obj = eval(expr, self.global_namespace) |
|
712 | 712 | except: |
|
713 | 713 | return [] |
|
714 | 714 | |
|
715 | 715 | if self.limit_to__all__ and hasattr(obj, '__all__'): |
|
716 | 716 | words = get__all__entries(obj) |
|
717 | 717 | else: |
|
718 | 718 | words = dir2(obj) |
|
719 | 719 | |
|
720 | 720 | try: |
|
721 | 721 | words = generics.complete_object(obj, words) |
|
722 | 722 | except TryNext: |
|
723 | 723 | pass |
|
724 | 724 | except AssertionError: |
|
725 | 725 | raise |
|
726 | 726 | except Exception: |
|
727 | 727 | # Silence errors from completion function |
|
728 | 728 | #raise # dbg |
|
729 | 729 | pass |
|
730 | 730 | # Build match list to return |
|
731 | 731 | n = len(attr) |
|
732 | 732 | return [u"%s.%s" % (expr, w) for w in words if w[:n] == attr ] |
|
733 | 733 | |
|
734 | 734 | |
|
735 | 735 | def get__all__entries(obj): |
|
736 | 736 | """returns the strings in the __all__ attribute""" |
|
737 | 737 | try: |
|
738 | 738 | words = getattr(obj, '__all__') |
|
739 | 739 | except: |
|
740 | 740 | return [] |
|
741 | 741 | |
|
742 | 742 | return [w for w in words if isinstance(w, str)] |
|
743 | 743 | |
|
744 | 744 | |
|
745 | 745 | def match_dict_keys(keys: List[str], prefix: str, delims: str): |
|
746 | 746 | """Used by dict_key_matches, matching the prefix to a list of keys |
|
747 | 747 | |
|
748 | 748 | Parameters |
|
749 | 749 | ========== |
|
750 | 750 | keys: |
|
751 | 751 | list of keys in dictionary currently being completed. |
|
752 | 752 | prefix: |
|
753 | 753 | Part of the text already typed by the user. e.g. `mydict[b'fo` |
|
754 | 754 | delims: |
|
755 | 755 | String of delimiters to consider when finding the current key. |
|
756 | 756 | |
|
757 | 757 | Returns |
|
758 | 758 | ======= |
|
759 | 759 | |
|
760 | 760 | A tuple of three elements: ``quote``, ``token_start``, ``matched``, with |
|
761 | 761 | ``quote`` being the quote that need to be used to close current string. |
|
762 | 762 | ``token_start`` the position where the replacement should start occurring, |
|
763 | 763 | ``matches`` a list of replacement/completion |
|
764 | 764 | |
|
765 | 765 | """ |
|
766 | 766 | if not prefix: |
|
767 | 767 | return None, 0, [repr(k) for k in keys |
|
768 | 768 | if isinstance(k, (str, bytes))] |
|
769 | 769 | quote_match = re.search('["\']', prefix) |
|
770 | 770 | quote = quote_match.group() |
|
771 | 771 | try: |
|
772 | 772 | prefix_str = eval(prefix + quote, {}) |
|
773 | 773 | except Exception: |
|
774 | 774 | return None, 0, [] |
|
775 | 775 | |
|
776 | 776 | pattern = '[^' + ''.join('\\' + c for c in delims) + ']*$' |
|
777 | 777 | token_match = re.search(pattern, prefix, re.UNICODE) |
|
778 | 778 | token_start = token_match.start() |
|
779 | 779 | token_prefix = token_match.group() |
|
780 | 780 | |
|
781 | 781 | matched = [] |
|
782 | 782 | for key in keys: |
|
783 | 783 | try: |
|
784 | 784 | if not key.startswith(prefix_str): |
|
785 | 785 | continue |
|
786 | 786 | except (AttributeError, TypeError, UnicodeError): |
|
787 | 787 | # Python 3+ TypeError on b'a'.startswith('a') or vice-versa |
|
788 | 788 | continue |
|
789 | 789 | |
|
790 | 790 | # reformat remainder of key to begin with prefix |
|
791 | 791 | rem = key[len(prefix_str):] |
|
792 | 792 | # force repr wrapped in ' |
|
793 | 793 | rem_repr = repr(rem + '"') if isinstance(rem, str) else repr(rem + b'"') |
|
794 | 794 | if rem_repr.startswith('u') and prefix[0] not in 'uU': |
|
795 | 795 | # Found key is unicode, but prefix is Py2 string. |
|
796 | 796 | # Therefore attempt to interpret key as string. |
|
797 | 797 | try: |
|
798 | 798 | rem_repr = repr(rem.encode('ascii') + '"') |
|
799 | 799 | except UnicodeEncodeError: |
|
800 | 800 | continue |
|
801 | 801 | |
|
802 | 802 | rem_repr = rem_repr[1 + rem_repr.index("'"):-2] |
|
803 | 803 | if quote == '"': |
|
804 | 804 | # The entered prefix is quoted with ", |
|
805 | 805 | # but the match is quoted with '. |
|
806 | 806 | # A contained " hence needs escaping for comparison: |
|
807 | 807 | rem_repr = rem_repr.replace('"', '\\"') |
|
808 | 808 | |
|
809 | 809 | # then reinsert prefix from start of token |
|
810 | 810 | matched.append('%s%s' % (token_prefix, rem_repr)) |
|
811 | 811 | return quote, token_start, matched |
|
812 | 812 | |
|
813 | 813 | |
|
814 | 814 | def cursor_to_position(text:str, line:int, column:int)->int: |
|
815 | 815 | """ |
|
816 | 816 | |
|
817 | 817 | Convert the (line,column) position of the cursor in text to an offset in a |
|
818 | 818 | string. |
|
819 | 819 | |
|
820 | 820 | Parameters |
|
821 | 821 | ---------- |
|
822 | 822 | |
|
823 | 823 | text : str |
|
824 | 824 | The text in which to calculate the cursor offset |
|
825 | 825 | line : int |
|
826 | 826 | Line of the cursor; 0-indexed |
|
827 | 827 | column : int |
|
828 | 828 | Column of the cursor 0-indexed |
|
829 | 829 | |
|
830 | 830 | Return |
|
831 | 831 | ------ |
|
832 | 832 | Position of the cursor in ``text``, 0-indexed. |
|
833 | 833 | |
|
834 | 834 | See Also |
|
835 | 835 | -------- |
|
836 | 836 | position_to_cursor: reciprocal of this function |
|
837 | 837 | |
|
838 | 838 | """ |
|
839 | 839 | lines = text.split('\n') |
|
840 | 840 | assert line <= len(lines), '{} <= {}'.format(str(line), str(len(lines))) |
|
841 | 841 | |
|
842 | 842 | return sum(len(l) + 1 for l in lines[:line]) + column |
|
843 | 843 | |
|
844 | 844 | def position_to_cursor(text:str, offset:int)->Tuple[int, int]: |
|
845 | 845 | """ |
|
846 | 846 | Convert the position of the cursor in text (0 indexed) to a line |
|
847 | 847 | number(0-indexed) and a column number (0-indexed) pair |
|
848 | 848 | |
|
849 | 849 | Position should be a valid position in ``text``. |
|
850 | 850 | |
|
851 | 851 | Parameters |
|
852 | 852 | ---------- |
|
853 | 853 | |
|
854 | 854 | text : str |
|
855 | 855 | The text in which to calculate the cursor offset |
|
856 | 856 | offset : int |
|
857 | 857 | Position of the cursor in ``text``, 0-indexed. |
|
858 | 858 | |
|
859 | 859 | Return |
|
860 | 860 | ------ |
|
861 | 861 | (line, column) : (int, int) |
|
862 | 862 | Line of the cursor; 0-indexed, column of the cursor 0-indexed |
|
863 | 863 | |
|
864 | 864 | |
|
865 | 865 | See Also |
|
866 | 866 | -------- |
|
867 | 867 | cursor_to_position : reciprocal of this function |
|
868 | 868 | |
|
869 | 869 | |
|
870 | 870 | """ |
|
871 | 871 | |
|
872 | 872 | assert 0 < offset <= len(text) , "0 < %s <= %s" % (offset , len(text)) |
|
873 | 873 | |
|
874 | 874 | before = text[:offset] |
|
875 | 875 | blines = before.split('\n') # ! splitnes trim trailing \n |
|
876 | 876 | line = before.count('\n') |
|
877 | 877 | col = len(blines[-1]) |
|
878 | 878 | return line, col |
|
879 | 879 | |
|
880 | 880 | |
|
881 | 881 | def _safe_isinstance(obj, module, class_name): |
|
882 | 882 | """Checks if obj is an instance of module.class_name if loaded |
|
883 | 883 | """ |
|
884 | 884 | return (module in sys.modules and |
|
885 | 885 | isinstance(obj, getattr(import_module(module), class_name))) |
|
886 | 886 | |
|
887 | 887 | |
|
888 | 888 | def back_unicode_name_matches(text): |
|
889 | 889 | u"""Match unicode characters back to unicode name |
|
890 | 890 | |
|
891 | 891 | This does ``β`` -> ``\\snowman`` |
|
892 | 892 | |
|
893 | 893 | Note that snowman is not a valid python3 combining character but will be expanded. |
|
894 | 894 | Though it will not recombine back to the snowman character by the completion machinery. |
|
895 | 895 | |
|
896 | 896 | This will not either back-complete standard sequences like \\n, \\b ... |
|
897 | 897 | |
|
898 | 898 | Used on Python 3 only. |
|
899 | 899 | """ |
|
900 | 900 | if len(text)<2: |
|
901 | 901 | return u'', () |
|
902 | 902 | maybe_slash = text[-2] |
|
903 | 903 | if maybe_slash != '\\': |
|
904 | 904 | return u'', () |
|
905 | 905 | |
|
906 | 906 | char = text[-1] |
|
907 | 907 | # no expand on quote for completion in strings. |
|
908 | 908 | # nor backcomplete standard ascii keys |
|
909 | 909 | if char in string.ascii_letters or char in ['"',"'"]: |
|
910 | 910 | return u'', () |
|
911 | 911 | try : |
|
912 | 912 | unic = unicodedata.name(char) |
|
913 | 913 | return '\\'+char,['\\'+unic] |
|
914 | 914 | except KeyError: |
|
915 | 915 | pass |
|
916 | 916 | return u'', () |
|
917 | 917 | |
|
918 | 918 | def back_latex_name_matches(text:str): |
|
919 | 919 | """Match latex characters back to unicode name |
|
920 | 920 | |
|
921 | 921 | This does ``\\β΅`` -> ``\\aleph`` |
|
922 | 922 | |
|
923 | 923 | Used on Python 3 only. |
|
924 | 924 | """ |
|
925 | 925 | if len(text)<2: |
|
926 | 926 | return u'', () |
|
927 | 927 | maybe_slash = text[-2] |
|
928 | 928 | if maybe_slash != '\\': |
|
929 | 929 | return u'', () |
|
930 | 930 | |
|
931 | 931 | |
|
932 | 932 | char = text[-1] |
|
933 | 933 | # no expand on quote for completion in strings. |
|
934 | 934 | # nor backcomplete standard ascii keys |
|
935 | 935 | if char in string.ascii_letters or char in ['"',"'"]: |
|
936 | 936 | return u'', () |
|
937 | 937 | try : |
|
938 | 938 | latex = reverse_latex_symbol[char] |
|
939 | 939 | # '\\' replace the \ as well |
|
940 | 940 | return '\\'+char,[latex] |
|
941 | 941 | except KeyError: |
|
942 | 942 | pass |
|
943 | 943 | return u'', () |
|
944 | 944 | |
|
945 | 945 | |
|
946 | 946 | def _formatparamchildren(parameter) -> str: |
|
947 | 947 | """ |
|
948 | 948 | Get parameter name and value from Jedi Private API |
|
949 | 949 | |
|
950 | 950 | Jedi does not expose a simple way to get `param=value` from its API. |
|
951 | 951 | |
|
952 | Prameter | |
|
952 | Parameter | |
|
953 | 953 | ======== |
|
954 | 954 | |
|
955 | 955 | parameter: |
|
956 | 956 | Jedi's function `Param` |
|
957 | 957 | |
|
958 | 958 | Returns |
|
959 | 959 | ======= |
|
960 | 960 | |
|
961 | 961 | A string like 'a', 'b=1', '*args', '**kwargs' |
|
962 | 962 | |
|
963 | 963 | |
|
964 | 964 | """ |
|
965 | 965 | description = parameter.description |
|
966 | 966 | if not description.startswith('param '): |
|
967 | 967 | raise ValueError('Jedi function parameter description have change format.' |
|
968 | 968 | 'Expected "param ...", found %r".' % description) |
|
969 | 969 | return description[6:] |
|
970 | 970 | |
|
971 | 971 | def _make_signature(completion)-> str: |
|
972 | 972 | """ |
|
973 | 973 | Make the signature from a jedi completion |
|
974 | 974 | |
|
975 | 975 | Parameter |
|
976 | 976 | ========= |
|
977 | 977 | |
|
978 | 978 | completion: jedi.Completion |
|
979 | 979 | object does not complete a function type |
|
980 | 980 | |
|
981 | 981 | Returns |
|
982 | 982 | ======= |
|
983 | 983 | |
|
984 | 984 | a string consisting of the function signature, with the parenthesis but |
|
985 | 985 | without the function name. example: |
|
986 | 986 | `(a, *args, b=1, **kwargs)` |
|
987 | 987 | |
|
988 | 988 | """ |
|
989 | 989 | |
|
990 | 990 | return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for p in completion.params) if f]) |
|
991 | 991 | |
|
992 | 992 | class IPCompleter(Completer): |
|
993 | 993 | """Extension of the completer class with IPython-specific features""" |
|
994 | 994 | |
|
995 | 995 | @observe('greedy') |
|
996 | 996 | def _greedy_changed(self, change): |
|
997 | 997 | """update the splitter and readline delims when greedy is changed""" |
|
998 | 998 | if change['new']: |
|
999 | 999 | self.splitter.delims = GREEDY_DELIMS |
|
1000 | 1000 | else: |
|
1001 | 1001 | self.splitter.delims = DELIMS |
|
1002 | 1002 | |
|
1003 | 1003 | merge_completions = Bool(True, |
|
1004 | 1004 | help="""Whether to merge completion results into a single list |
|
1005 | 1005 | |
|
1006 | 1006 | If False, only the completion results from the first non-empty |
|
1007 | 1007 | completer will be returned. |
|
1008 | 1008 | """ |
|
1009 | 1009 | ).tag(config=True) |
|
1010 | 1010 | omit__names = Enum((0,1,2), default_value=2, |
|
1011 | 1011 | help="""Instruct the completer to omit private method names |
|
1012 | 1012 | |
|
1013 | 1013 | Specifically, when completing on ``object.<tab>``. |
|
1014 | 1014 | |
|
1015 | 1015 | When 2 [default]: all names that start with '_' will be excluded. |
|
1016 | 1016 | |
|
1017 | 1017 | When 1: all 'magic' names (``__foo__``) will be excluded. |
|
1018 | 1018 | |
|
1019 | 1019 | When 0: nothing will be excluded. |
|
1020 | 1020 | """ |
|
1021 | 1021 | ).tag(config=True) |
|
1022 | 1022 | limit_to__all__ = Bool(False, |
|
1023 | 1023 | help=""" |
|
1024 | 1024 | DEPRECATED as of version 5.0. |
|
1025 | 1025 | |
|
1026 | 1026 | Instruct the completer to use __all__ for the completion |
|
1027 | 1027 | |
|
1028 | 1028 | Specifically, when completing on ``object.<tab>``. |
|
1029 | 1029 | |
|
1030 | 1030 | When True: only those names in obj.__all__ will be included. |
|
1031 | 1031 | |
|
1032 | 1032 | When False [default]: the __all__ attribute is ignored |
|
1033 | 1033 | """, |
|
1034 | 1034 | ).tag(config=True) |
|
1035 | 1035 | |
|
1036 | 1036 | @observe('limit_to__all__') |
|
1037 | 1037 | def _limit_to_all_changed(self, change): |
|
1038 | 1038 | warnings.warn('`IPython.core.IPCompleter.limit_to__all__` configuration ' |
|
1039 | 1039 | 'value has been deprecated since IPython 5.0, will be made to have ' |
|
1040 | 1040 | 'no effects and then removed in future version of IPython.', |
|
1041 | 1041 | UserWarning) |
|
1042 | 1042 | |
|
1043 | 1043 | def __init__(self, shell=None, namespace=None, global_namespace=None, |
|
1044 | 1044 | use_readline=_deprecation_readline_sentinel, config=None, **kwargs): |
|
1045 | 1045 | """IPCompleter() -> completer |
|
1046 | 1046 | |
|
1047 | 1047 | Return a completer object. |
|
1048 | 1048 | |
|
1049 | 1049 | Parameters |
|
1050 | 1050 | ---------- |
|
1051 | 1051 | |
|
1052 | 1052 | shell |
|
1053 | 1053 | a pointer to the ipython shell itself. This is needed |
|
1054 | 1054 | because this completer knows about magic functions, and those can |
|
1055 | 1055 | only be accessed via the ipython instance. |
|
1056 | 1056 | |
|
1057 | 1057 | namespace : dict, optional |
|
1058 | 1058 | an optional dict where completions are performed. |
|
1059 | 1059 | |
|
1060 | 1060 | global_namespace : dict, optional |
|
1061 | 1061 | secondary optional dict for completions, to |
|
1062 | 1062 | handle cases (such as IPython embedded inside functions) where |
|
1063 | 1063 | both Python scopes are visible. |
|
1064 | 1064 | |
|
1065 | 1065 | use_readline : bool, optional |
|
1066 | 1066 | DEPRECATED, ignored since IPython 6.0, will have no effects |
|
1067 | 1067 | """ |
|
1068 | 1068 | |
|
1069 | 1069 | self.magic_escape = ESC_MAGIC |
|
1070 | 1070 | self.splitter = CompletionSplitter() |
|
1071 | 1071 | |
|
1072 | 1072 | if use_readline is not _deprecation_readline_sentinel: |
|
1073 | 1073 | warnings.warn('The `use_readline` parameter is deprecated and ignored since IPython 6.0.', |
|
1074 | 1074 | DeprecationWarning, stacklevel=2) |
|
1075 | 1075 | |
|
1076 | 1076 | # _greedy_changed() depends on splitter and readline being defined: |
|
1077 | 1077 | Completer.__init__(self, namespace=namespace, global_namespace=global_namespace, |
|
1078 | 1078 | config=config, **kwargs) |
|
1079 | 1079 | |
|
1080 | 1080 | # List where completion matches will be stored |
|
1081 | 1081 | self.matches = [] |
|
1082 | 1082 | self.shell = shell |
|
1083 | 1083 | # Regexp to split filenames with spaces in them |
|
1084 | 1084 | self.space_name_re = re.compile(r'([^\\] )') |
|
1085 | 1085 | # Hold a local ref. to glob.glob for speed |
|
1086 | 1086 | self.glob = glob.glob |
|
1087 | 1087 | |
|
1088 | 1088 | # Determine if we are running on 'dumb' terminals, like (X)Emacs |
|
1089 | 1089 | # buffers, to avoid completion problems. |
|
1090 | 1090 | term = os.environ.get('TERM','xterm') |
|
1091 | 1091 | self.dumb_terminal = term in ['dumb','emacs'] |
|
1092 | 1092 | |
|
1093 | 1093 | # Special handling of backslashes needed in win32 platforms |
|
1094 | 1094 | if sys.platform == "win32": |
|
1095 | 1095 | self.clean_glob = self._clean_glob_win32 |
|
1096 | 1096 | else: |
|
1097 | 1097 | self.clean_glob = self._clean_glob |
|
1098 | 1098 | |
|
1099 | 1099 | #regexp to parse docstring for function signature |
|
1100 | 1100 | self.docstring_sig_re = re.compile(r'^[\w|\s.]+\(([^)]*)\).*') |
|
1101 | 1101 | self.docstring_kwd_re = re.compile(r'[\s|\[]*(\w+)(?:\s*=\s*.*)') |
|
1102 | 1102 | #use this if positional argument name is also needed |
|
1103 | 1103 | #= re.compile(r'[\s|\[]*(\w+)(?:\s*=?\s*.*)') |
|
1104 | 1104 | |
|
1105 | 1105 | self.magic_arg_matchers = [ |
|
1106 | 1106 | self.magic_config_matches, |
|
1107 | 1107 | self.magic_color_matches, |
|
1108 | 1108 | ] |
|
1109 | 1109 | |
|
1110 | 1110 | # This is set externally by InteractiveShell |
|
1111 | 1111 | self.custom_completers = None |
|
1112 | 1112 | |
|
1113 | 1113 | @property |
|
1114 | 1114 | def matchers(self): |
|
1115 | 1115 | """All active matcher routines for completion""" |
|
1116 | 1116 | if self.use_jedi: |
|
1117 | 1117 | return [ |
|
1118 | 1118 | self.file_matches, |
|
1119 | 1119 | self.magic_matches, |
|
1120 | 1120 | self.dict_key_matches, |
|
1121 | 1121 | ] |
|
1122 | 1122 | else: |
|
1123 | 1123 | return [ |
|
1124 | 1124 | self.python_matches, |
|
1125 | 1125 | self.file_matches, |
|
1126 | 1126 | self.magic_matches, |
|
1127 | 1127 | self.python_func_kw_matches, |
|
1128 | 1128 | self.dict_key_matches, |
|
1129 | 1129 | ] |
|
1130 | 1130 | |
|
1131 | 1131 | def all_completions(self, text): |
|
1132 | 1132 | """ |
|
1133 | 1133 | Wrapper around the complete method for the benefit of emacs. |
|
1134 | 1134 | """ |
|
1135 | 1135 | return self.complete(text)[1] |
|
1136 | 1136 | |
|
1137 | 1137 | def _clean_glob(self, text): |
|
1138 | 1138 | return self.glob("%s*" % text) |
|
1139 | 1139 | |
|
1140 | 1140 | def _clean_glob_win32(self,text): |
|
1141 | 1141 | return [f.replace("\\","/") |
|
1142 | 1142 | for f in self.glob("%s*" % text)] |
|
1143 | 1143 | |
|
1144 | 1144 | def file_matches(self, text): |
|
1145 | 1145 | """Match filenames, expanding ~USER type strings. |
|
1146 | 1146 | |
|
1147 | 1147 | Most of the seemingly convoluted logic in this completer is an |
|
1148 | 1148 | attempt to handle filenames with spaces in them. And yet it's not |
|
1149 | 1149 | quite perfect, because Python's readline doesn't expose all of the |
|
1150 | 1150 | GNU readline details needed for this to be done correctly. |
|
1151 | 1151 | |
|
1152 | 1152 | For a filename with a space in it, the printed completions will be |
|
1153 | 1153 | only the parts after what's already been typed (instead of the |
|
1154 | 1154 | full completions, as is normally done). I don't think with the |
|
1155 | 1155 | current (as of Python 2.3) Python readline it's possible to do |
|
1156 | 1156 | better.""" |
|
1157 | 1157 | |
|
1158 | 1158 | # chars that require escaping with backslash - i.e. chars |
|
1159 | 1159 | # that readline treats incorrectly as delimiters, but we |
|
1160 | 1160 | # don't want to treat as delimiters in filename matching |
|
1161 | 1161 | # when escaped with backslash |
|
1162 | 1162 | if text.startswith('!'): |
|
1163 | 1163 | text = text[1:] |
|
1164 | 1164 | text_prefix = u'!' |
|
1165 | 1165 | else: |
|
1166 | 1166 | text_prefix = u'' |
|
1167 | 1167 | |
|
1168 | 1168 | text_until_cursor = self.text_until_cursor |
|
1169 | 1169 | # track strings with open quotes |
|
1170 | 1170 | open_quotes = has_open_quotes(text_until_cursor) |
|
1171 | 1171 | |
|
1172 | 1172 | if '(' in text_until_cursor or '[' in text_until_cursor: |
|
1173 | 1173 | lsplit = text |
|
1174 | 1174 | else: |
|
1175 | 1175 | try: |
|
1176 | 1176 | # arg_split ~ shlex.split, but with unicode bugs fixed by us |
|
1177 | 1177 | lsplit = arg_split(text_until_cursor)[-1] |
|
1178 | 1178 | except ValueError: |
|
1179 | 1179 | # typically an unmatched ", or backslash without escaped char. |
|
1180 | 1180 | if open_quotes: |
|
1181 | 1181 | lsplit = text_until_cursor.split(open_quotes)[-1] |
|
1182 | 1182 | else: |
|
1183 | 1183 | return [] |
|
1184 | 1184 | except IndexError: |
|
1185 | 1185 | # tab pressed on empty line |
|
1186 | 1186 | lsplit = "" |
|
1187 | 1187 | |
|
1188 | 1188 | if not open_quotes and lsplit != protect_filename(lsplit): |
|
1189 | 1189 | # if protectables are found, do matching on the whole escaped name |
|
1190 | 1190 | has_protectables = True |
|
1191 | 1191 | text0,text = text,lsplit |
|
1192 | 1192 | else: |
|
1193 | 1193 | has_protectables = False |
|
1194 | 1194 | text = os.path.expanduser(text) |
|
1195 | 1195 | |
|
1196 | 1196 | if text == "": |
|
1197 | 1197 | return [text_prefix + protect_filename(f) for f in self.glob("*")] |
|
1198 | 1198 | |
|
1199 | 1199 | # Compute the matches from the filesystem |
|
1200 | 1200 | if sys.platform == 'win32': |
|
1201 | 1201 | m0 = self.clean_glob(text) |
|
1202 | 1202 | else: |
|
1203 | 1203 | m0 = self.clean_glob(text.replace('\\', '')) |
|
1204 | 1204 | |
|
1205 | 1205 | if has_protectables: |
|
1206 | 1206 | # If we had protectables, we need to revert our changes to the |
|
1207 | 1207 | # beginning of filename so that we don't double-write the part |
|
1208 | 1208 | # of the filename we have so far |
|
1209 | 1209 | len_lsplit = len(lsplit) |
|
1210 | 1210 | matches = [text_prefix + text0 + |
|
1211 | 1211 | protect_filename(f[len_lsplit:]) for f in m0] |
|
1212 | 1212 | else: |
|
1213 | 1213 | if open_quotes: |
|
1214 | 1214 | # if we have a string with an open quote, we don't need to |
|
1215 | 1215 | # protect the names beyond the quote (and we _shouldn't_, as |
|
1216 | 1216 | # it would cause bugs when the filesystem call is made). |
|
1217 | 1217 | matches = m0 if sys.platform == "win32" else\ |
|
1218 | 1218 | [protect_filename(f, open_quotes) for f in m0] |
|
1219 | 1219 | else: |
|
1220 | 1220 | matches = [text_prefix + |
|
1221 | 1221 | protect_filename(f) for f in m0] |
|
1222 | 1222 | |
|
1223 | 1223 | # Mark directories in input list by appending '/' to their names. |
|
1224 | 1224 | return [x+'/' if os.path.isdir(x) else x for x in matches] |
|
1225 | 1225 | |
|
1226 | 1226 | def magic_matches(self, text): |
|
1227 | 1227 | """Match magics""" |
|
1228 | 1228 | # Get all shell magics now rather than statically, so magics loaded at |
|
1229 | 1229 | # runtime show up too. |
|
1230 | 1230 | lsm = self.shell.magics_manager.lsmagic() |
|
1231 | 1231 | line_magics = lsm['line'] |
|
1232 | 1232 | cell_magics = lsm['cell'] |
|
1233 | 1233 | pre = self.magic_escape |
|
1234 | 1234 | pre2 = pre+pre |
|
1235 | 1235 | |
|
1236 | 1236 | explicit_magic = text.startswith(pre) |
|
1237 | 1237 | |
|
1238 | 1238 | # Completion logic: |
|
1239 | 1239 | # - user gives %%: only do cell magics |
|
1240 | 1240 | # - user gives %: do both line and cell magics |
|
1241 | 1241 | # - no prefix: do both |
|
1242 | 1242 | # In other words, line magics are skipped if the user gives %% explicitly |
|
1243 | 1243 | # |
|
1244 | 1244 | # We also exclude magics that match any currently visible names: |
|
1245 | 1245 | # https://github.com/ipython/ipython/issues/4877, unless the user has |
|
1246 | 1246 | # typed a %: |
|
1247 | 1247 | # https://github.com/ipython/ipython/issues/10754 |
|
1248 | 1248 | bare_text = text.lstrip(pre) |
|
1249 | 1249 | global_matches = self.global_matches(bare_text) |
|
1250 | 1250 | if not explicit_magic: |
|
1251 | 1251 | def matches(magic): |
|
1252 | 1252 | """ |
|
1253 | 1253 | Filter magics, in particular remove magics that match |
|
1254 | 1254 | a name present in global namespace. |
|
1255 | 1255 | """ |
|
1256 | 1256 | return ( magic.startswith(bare_text) and |
|
1257 | 1257 | magic not in global_matches ) |
|
1258 | 1258 | else: |
|
1259 | 1259 | def matches(magic): |
|
1260 | 1260 | return magic.startswith(bare_text) |
|
1261 | 1261 | |
|
1262 | 1262 | comp = [ pre2+m for m in cell_magics if matches(m)] |
|
1263 | 1263 | if not text.startswith(pre2): |
|
1264 | 1264 | comp += [ pre+m for m in line_magics if matches(m)] |
|
1265 | 1265 | |
|
1266 | 1266 | return comp |
|
1267 | 1267 | |
|
1268 | 1268 | def magic_config_matches(self, text:str) -> List[str]: |
|
1269 | 1269 | """ Match class names and attributes for %config magic """ |
|
1270 | 1270 | texts = text.strip().split() |
|
1271 | 1271 | |
|
1272 | 1272 | if len(texts) > 0 and (texts[0] == 'config' or texts[0] == '%config'): |
|
1273 | 1273 | # get all configuration classes |
|
1274 | 1274 | classes = sorted(set([ c for c in self.shell.configurables |
|
1275 | 1275 | if c.__class__.class_traits(config=True) |
|
1276 | 1276 | ]), key=lambda x: x.__class__.__name__) |
|
1277 | 1277 | classnames = [ c.__class__.__name__ for c in classes ] |
|
1278 | 1278 | |
|
1279 | 1279 | # return all classnames if config or %config is given |
|
1280 | 1280 | if len(texts) == 1: |
|
1281 | 1281 | return classnames |
|
1282 | 1282 | |
|
1283 | 1283 | # match classname |
|
1284 | 1284 | classname_texts = texts[1].split('.') |
|
1285 | 1285 | classname = classname_texts[0] |
|
1286 | 1286 | classname_matches = [ c for c in classnames |
|
1287 | 1287 | if c.startswith(classname) ] |
|
1288 | 1288 | |
|
1289 | 1289 | # return matched classes or the matched class with attributes |
|
1290 | 1290 | if texts[1].find('.') < 0: |
|
1291 | 1291 | return classname_matches |
|
1292 | 1292 | elif len(classname_matches) == 1 and \ |
|
1293 | 1293 | classname_matches[0] == classname: |
|
1294 | 1294 | cls = classes[classnames.index(classname)].__class__ |
|
1295 | 1295 | help = cls.class_get_help() |
|
1296 | 1296 | # strip leading '--' from cl-args: |
|
1297 | 1297 | help = re.sub(re.compile(r'^--', re.MULTILINE), '', help) |
|
1298 | 1298 | return [ attr.split('=')[0] |
|
1299 | 1299 | for attr in help.strip().splitlines() |
|
1300 | 1300 | if attr.startswith(texts[1]) ] |
|
1301 | 1301 | return [] |
|
1302 | 1302 | |
|
1303 | 1303 | def magic_color_matches(self, text:str) -> List[str] : |
|
1304 | 1304 | """ Match color schemes for %colors magic""" |
|
1305 | 1305 | texts = text.split() |
|
1306 | 1306 | if text.endswith(' '): |
|
1307 | 1307 | # .split() strips off the trailing whitespace. Add '' back |
|
1308 | 1308 | # so that: '%colors ' -> ['%colors', ''] |
|
1309 | 1309 | texts.append('') |
|
1310 | 1310 | |
|
1311 | 1311 | if len(texts) == 2 and (texts[0] == 'colors' or texts[0] == '%colors'): |
|
1312 | 1312 | prefix = texts[1] |
|
1313 | 1313 | return [ color for color in InspectColors.keys() |
|
1314 | 1314 | if color.startswith(prefix) ] |
|
1315 | 1315 | return [] |
|
1316 | 1316 | |
|
1317 | 1317 | def _jedi_matches(self, cursor_column:int, cursor_line:int, text:str): |
|
1318 | 1318 | """ |
|
1319 | 1319 | |
|
1320 | 1320 | Return a list of :any:`jedi.api.Completions` object from a ``text`` and |
|
1321 | 1321 | cursor position. |
|
1322 | 1322 | |
|
1323 | 1323 | Parameters |
|
1324 | 1324 | ---------- |
|
1325 | 1325 | cursor_column : int |
|
1326 | 1326 | column position of the cursor in ``text``, 0-indexed. |
|
1327 | 1327 | cursor_line : int |
|
1328 | 1328 | line position of the cursor in ``text``, 0-indexed |
|
1329 | 1329 | text : str |
|
1330 | 1330 | text to complete |
|
1331 | 1331 | |
|
1332 | 1332 | Debugging |
|
1333 | 1333 | --------- |
|
1334 | 1334 | |
|
1335 | 1335 | If ``IPCompleter.debug`` is ``True`` may return a :any:`_FakeJediCompletion` |
|
1336 | 1336 | object containing a string with the Jedi debug information attached. |
|
1337 | 1337 | """ |
|
1338 | 1338 | namespaces = [self.namespace] |
|
1339 | 1339 | if self.global_namespace is not None: |
|
1340 | 1340 | namespaces.append(self.global_namespace) |
|
1341 | 1341 | |
|
1342 | 1342 | completion_filter = lambda x:x |
|
1343 | 1343 | # cursor_pos is an it, jedi wants line and column |
|
1344 | 1344 | offset = cursor_to_position(text, cursor_line, cursor_column) |
|
1345 | 1345 | # filter output if we are completing for object members |
|
1346 | 1346 | if offset: |
|
1347 | 1347 | pre = text[offset-1] |
|
1348 | 1348 | if pre == '.': |
|
1349 | 1349 | if self.omit__names == 2: |
|
1350 | 1350 | completion_filter = lambda c:not c.name.startswith('_') |
|
1351 | 1351 | elif self.omit__names == 1: |
|
1352 | 1352 | completion_filter = lambda c:not (c.name.startswith('__') and c.name.endswith('__')) |
|
1353 | 1353 | elif self.omit__names == 0: |
|
1354 | 1354 | completion_filter = lambda x:x |
|
1355 | 1355 | else: |
|
1356 | 1356 | raise ValueError("Don't understand self.omit__names == {}".format(self.omit__names)) |
|
1357 | 1357 | |
|
1358 | 1358 | interpreter = jedi.Interpreter( |
|
1359 | 1359 | text, namespaces, column=cursor_column, line=cursor_line + 1) |
|
1360 | 1360 | try_jedi = True |
|
1361 | 1361 | |
|
1362 | 1362 | try: |
|
1363 | 1363 | # should we check the type of the node is Error ? |
|
1364 | 1364 | try: |
|
1365 | 1365 | # jedi < 0.11 |
|
1366 | 1366 | from jedi.parser.tree import ErrorLeaf |
|
1367 | 1367 | except ImportError: |
|
1368 | 1368 | # jedi >= 0.11 |
|
1369 | 1369 | from parso.tree import ErrorLeaf |
|
1370 | 1370 | |
|
1371 | 1371 | next_to_last_tree = interpreter._get_module().tree_node.children[-2] |
|
1372 | 1372 | completing_string = False |
|
1373 | 1373 | if isinstance(next_to_last_tree, ErrorLeaf): |
|
1374 | 1374 | completing_string = next_to_last_tree.value.lstrip()[0] in {'"', "'"} |
|
1375 | 1375 | # if we are in a string jedi is likely not the right candidate for |
|
1376 | 1376 | # now. Skip it. |
|
1377 | 1377 | try_jedi = not completing_string |
|
1378 | 1378 | except Exception as e: |
|
1379 | 1379 | # many of things can go wrong, we are using private API just don't crash. |
|
1380 | 1380 | if self.debug: |
|
1381 | 1381 | print("Error detecting if completing a non-finished string :", e, '|') |
|
1382 | 1382 | |
|
1383 | 1383 | if not try_jedi: |
|
1384 | 1384 | return [] |
|
1385 | 1385 | try: |
|
1386 | 1386 | return filter(completion_filter, interpreter.completions()) |
|
1387 | 1387 | except Exception as e: |
|
1388 | 1388 | if self.debug: |
|
1389 | 1389 | return [_FakeJediCompletion('Oops Jedi has crashed, please report a bug with the following:\n"""\n%s\ns"""' % (e))] |
|
1390 | 1390 | else: |
|
1391 | 1391 | return [] |
|
1392 | 1392 | |
|
1393 | 1393 | def python_matches(self, text): |
|
1394 | 1394 | """Match attributes or global python names""" |
|
1395 | 1395 | if "." in text: |
|
1396 | 1396 | try: |
|
1397 | 1397 | matches = self.attr_matches(text) |
|
1398 | 1398 | if text.endswith('.') and self.omit__names: |
|
1399 | 1399 | if self.omit__names == 1: |
|
1400 | 1400 | # true if txt is _not_ a __ name, false otherwise: |
|
1401 | 1401 | no__name = (lambda txt: |
|
1402 | 1402 | re.match(r'.*\.__.*?__',txt) is None) |
|
1403 | 1403 | else: |
|
1404 | 1404 | # true if txt is _not_ a _ name, false otherwise: |
|
1405 | 1405 | no__name = (lambda txt: |
|
1406 | 1406 | re.match(r'\._.*?',txt[txt.rindex('.'):]) is None) |
|
1407 | 1407 | matches = filter(no__name, matches) |
|
1408 | 1408 | except NameError: |
|
1409 | 1409 | # catches <undefined attributes>.<tab> |
|
1410 | 1410 | matches = [] |
|
1411 | 1411 | else: |
|
1412 | 1412 | matches = self.global_matches(text) |
|
1413 | 1413 | return matches |
|
1414 | 1414 | |
|
1415 | 1415 | def _default_arguments_from_docstring(self, doc): |
|
1416 | 1416 | """Parse the first line of docstring for call signature. |
|
1417 | 1417 | |
|
1418 | 1418 | Docstring should be of the form 'min(iterable[, key=func])\n'. |
|
1419 | 1419 | It can also parse cython docstring of the form |
|
1420 | 1420 | 'Minuit.migrad(self, int ncall=10000, resume=True, int nsplit=1)'. |
|
1421 | 1421 | """ |
|
1422 | 1422 | if doc is None: |
|
1423 | 1423 | return [] |
|
1424 | 1424 | |
|
1425 | 1425 | #care only the firstline |
|
1426 | 1426 | line = doc.lstrip().splitlines()[0] |
|
1427 | 1427 | |
|
1428 | 1428 | #p = re.compile(r'^[\w|\s.]+\(([^)]*)\).*') |
|
1429 | 1429 | #'min(iterable[, key=func])\n' -> 'iterable[, key=func]' |
|
1430 | 1430 | sig = self.docstring_sig_re.search(line) |
|
1431 | 1431 | if sig is None: |
|
1432 | 1432 | return [] |
|
1433 | 1433 | # iterable[, key=func]' -> ['iterable[' ,' key=func]'] |
|
1434 | 1434 | sig = sig.groups()[0].split(',') |
|
1435 | 1435 | ret = [] |
|
1436 | 1436 | for s in sig: |
|
1437 | 1437 | #re.compile(r'[\s|\[]*(\w+)(?:\s*=\s*.*)') |
|
1438 | 1438 | ret += self.docstring_kwd_re.findall(s) |
|
1439 | 1439 | return ret |
|
1440 | 1440 | |
|
1441 | 1441 | def _default_arguments(self, obj): |
|
1442 | 1442 | """Return the list of default arguments of obj if it is callable, |
|
1443 | 1443 | or empty list otherwise.""" |
|
1444 | 1444 | call_obj = obj |
|
1445 | 1445 | ret = [] |
|
1446 | 1446 | if inspect.isbuiltin(obj): |
|
1447 | 1447 | pass |
|
1448 | 1448 | elif not (inspect.isfunction(obj) or inspect.ismethod(obj)): |
|
1449 | 1449 | if inspect.isclass(obj): |
|
1450 | 1450 | #for cython embedsignature=True the constructor docstring |
|
1451 | 1451 | #belongs to the object itself not __init__ |
|
1452 | 1452 | ret += self._default_arguments_from_docstring( |
|
1453 | 1453 | getattr(obj, '__doc__', '')) |
|
1454 | 1454 | # for classes, check for __init__,__new__ |
|
1455 | 1455 | call_obj = (getattr(obj, '__init__', None) or |
|
1456 | 1456 | getattr(obj, '__new__', None)) |
|
1457 | 1457 | # for all others, check if they are __call__able |
|
1458 | 1458 | elif hasattr(obj, '__call__'): |
|
1459 | 1459 | call_obj = obj.__call__ |
|
1460 | 1460 | ret += self._default_arguments_from_docstring( |
|
1461 | 1461 | getattr(call_obj, '__doc__', '')) |
|
1462 | 1462 | |
|
1463 | 1463 | _keeps = (inspect.Parameter.KEYWORD_ONLY, |
|
1464 | 1464 | inspect.Parameter.POSITIONAL_OR_KEYWORD) |
|
1465 | 1465 | |
|
1466 | 1466 | try: |
|
1467 | 1467 | sig = inspect.signature(call_obj) |
|
1468 | 1468 | ret.extend(k for k, v in sig.parameters.items() if |
|
1469 | 1469 | v.kind in _keeps) |
|
1470 | 1470 | except ValueError: |
|
1471 | 1471 | pass |
|
1472 | 1472 | |
|
1473 | 1473 | return list(set(ret)) |
|
1474 | 1474 | |
|
1475 | 1475 | def python_func_kw_matches(self,text): |
|
1476 | 1476 | """Match named parameters (kwargs) of the last open function""" |
|
1477 | 1477 | |
|
1478 | 1478 | if "." in text: # a parameter cannot be dotted |
|
1479 | 1479 | return [] |
|
1480 | 1480 | try: regexp = self.__funcParamsRegex |
|
1481 | 1481 | except AttributeError: |
|
1482 | 1482 | regexp = self.__funcParamsRegex = re.compile(r''' |
|
1483 | 1483 | '.*?(?<!\\)' | # single quoted strings or |
|
1484 | 1484 | ".*?(?<!\\)" | # double quoted strings or |
|
1485 | 1485 | \w+ | # identifier |
|
1486 | 1486 | \S # other characters |
|
1487 | 1487 | ''', re.VERBOSE | re.DOTALL) |
|
1488 | 1488 | # 1. find the nearest identifier that comes before an unclosed |
|
1489 | 1489 | # parenthesis before the cursor |
|
1490 | 1490 | # e.g. for "foo (1+bar(x), pa<cursor>,a=1)", the candidate is "foo" |
|
1491 | 1491 | tokens = regexp.findall(self.text_until_cursor) |
|
1492 | 1492 | iterTokens = reversed(tokens); openPar = 0 |
|
1493 | 1493 | |
|
1494 | 1494 | for token in iterTokens: |
|
1495 | 1495 | if token == ')': |
|
1496 | 1496 | openPar -= 1 |
|
1497 | 1497 | elif token == '(': |
|
1498 | 1498 | openPar += 1 |
|
1499 | 1499 | if openPar > 0: |
|
1500 | 1500 | # found the last unclosed parenthesis |
|
1501 | 1501 | break |
|
1502 | 1502 | else: |
|
1503 | 1503 | return [] |
|
1504 | 1504 | # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" ) |
|
1505 | 1505 | ids = [] |
|
1506 | 1506 | isId = re.compile(r'\w+$').match |
|
1507 | 1507 | |
|
1508 | 1508 | while True: |
|
1509 | 1509 | try: |
|
1510 | 1510 | ids.append(next(iterTokens)) |
|
1511 | 1511 | if not isId(ids[-1]): |
|
1512 | 1512 | ids.pop(); break |
|
1513 | 1513 | if not next(iterTokens) == '.': |
|
1514 | 1514 | break |
|
1515 | 1515 | except StopIteration: |
|
1516 | 1516 | break |
|
1517 | 1517 | |
|
1518 | 1518 | # Find all named arguments already assigned to, as to avoid suggesting |
|
1519 | 1519 | # them again |
|
1520 | 1520 | usedNamedArgs = set() |
|
1521 | 1521 | par_level = -1 |
|
1522 | 1522 | for token, next_token in zip(tokens, tokens[1:]): |
|
1523 | 1523 | if token == '(': |
|
1524 | 1524 | par_level += 1 |
|
1525 | 1525 | elif token == ')': |
|
1526 | 1526 | par_level -= 1 |
|
1527 | 1527 | |
|
1528 | 1528 | if par_level != 0: |
|
1529 | 1529 | continue |
|
1530 | 1530 | |
|
1531 | 1531 | if next_token != '=': |
|
1532 | 1532 | continue |
|
1533 | 1533 | |
|
1534 | 1534 | usedNamedArgs.add(token) |
|
1535 | 1535 | |
|
1536 | 1536 | # lookup the candidate callable matches either using global_matches |
|
1537 | 1537 | # or attr_matches for dotted names |
|
1538 | 1538 | if len(ids) == 1: |
|
1539 | 1539 | callableMatches = self.global_matches(ids[0]) |
|
1540 | 1540 | else: |
|
1541 | 1541 | callableMatches = self.attr_matches('.'.join(ids[::-1])) |
|
1542 | 1542 | argMatches = [] |
|
1543 | 1543 | for callableMatch in callableMatches: |
|
1544 | 1544 | try: |
|
1545 | 1545 | namedArgs = self._default_arguments(eval(callableMatch, |
|
1546 | 1546 | self.namespace)) |
|
1547 | 1547 | except: |
|
1548 | 1548 | continue |
|
1549 | 1549 | |
|
1550 | 1550 | # Remove used named arguments from the list, no need to show twice |
|
1551 | 1551 | for namedArg in set(namedArgs) - usedNamedArgs: |
|
1552 | 1552 | if namedArg.startswith(text): |
|
1553 | 1553 | argMatches.append(u"%s=" %namedArg) |
|
1554 | 1554 | return argMatches |
|
1555 | 1555 | |
|
1556 | 1556 | def dict_key_matches(self, text): |
|
1557 | 1557 | "Match string keys in a dictionary, after e.g. 'foo[' " |
|
1558 | 1558 | def get_keys(obj): |
|
1559 | 1559 | # Objects can define their own completions by defining an |
|
1560 | 1560 | # _ipy_key_completions_() method. |
|
1561 | 1561 | method = get_real_method(obj, '_ipython_key_completions_') |
|
1562 | 1562 | if method is not None: |
|
1563 | 1563 | return method() |
|
1564 | 1564 | |
|
1565 | 1565 | # Special case some common in-memory dict-like types |
|
1566 | 1566 | if isinstance(obj, dict) or\ |
|
1567 | 1567 | _safe_isinstance(obj, 'pandas', 'DataFrame'): |
|
1568 | 1568 | try: |
|
1569 | 1569 | return list(obj.keys()) |
|
1570 | 1570 | except Exception: |
|
1571 | 1571 | return [] |
|
1572 | 1572 | elif _safe_isinstance(obj, 'numpy', 'ndarray') or\ |
|
1573 | 1573 | _safe_isinstance(obj, 'numpy', 'void'): |
|
1574 | 1574 | return obj.dtype.names or [] |
|
1575 | 1575 | return [] |
|
1576 | 1576 | |
|
1577 | 1577 | try: |
|
1578 | 1578 | regexps = self.__dict_key_regexps |
|
1579 | 1579 | except AttributeError: |
|
1580 | 1580 | dict_key_re_fmt = r'''(?x) |
|
1581 | 1581 | ( # match dict-referring expression wrt greedy setting |
|
1582 | 1582 | %s |
|
1583 | 1583 | ) |
|
1584 | 1584 | \[ # open bracket |
|
1585 | 1585 | \s* # and optional whitespace |
|
1586 | 1586 | ([uUbB]? # string prefix (r not handled) |
|
1587 | 1587 | (?: # unclosed string |
|
1588 | 1588 | '(?:[^']|(?<!\\)\\')* |
|
1589 | 1589 | | |
|
1590 | 1590 | "(?:[^"]|(?<!\\)\\")* |
|
1591 | 1591 | ) |
|
1592 | 1592 | )? |
|
1593 | 1593 | $ |
|
1594 | 1594 | ''' |
|
1595 | 1595 | regexps = self.__dict_key_regexps = { |
|
1596 | 1596 | False: re.compile(dict_key_re_fmt % ''' |
|
1597 | 1597 | # identifiers separated by . |
|
1598 | 1598 | (?!\d)\w+ |
|
1599 | 1599 | (?:\.(?!\d)\w+)* |
|
1600 | 1600 | '''), |
|
1601 | 1601 | True: re.compile(dict_key_re_fmt % ''' |
|
1602 | 1602 | .+ |
|
1603 | 1603 | ''') |
|
1604 | 1604 | } |
|
1605 | 1605 | |
|
1606 | 1606 | match = regexps[self.greedy].search(self.text_until_cursor) |
|
1607 | 1607 | if match is None: |
|
1608 | 1608 | return [] |
|
1609 | 1609 | |
|
1610 | 1610 | expr, prefix = match.groups() |
|
1611 | 1611 | try: |
|
1612 | 1612 | obj = eval(expr, self.namespace) |
|
1613 | 1613 | except Exception: |
|
1614 | 1614 | try: |
|
1615 | 1615 | obj = eval(expr, self.global_namespace) |
|
1616 | 1616 | except Exception: |
|
1617 | 1617 | return [] |
|
1618 | 1618 | |
|
1619 | 1619 | keys = get_keys(obj) |
|
1620 | 1620 | if not keys: |
|
1621 | 1621 | return keys |
|
1622 | 1622 | closing_quote, token_offset, matches = match_dict_keys(keys, prefix, self.splitter.delims) |
|
1623 | 1623 | if not matches: |
|
1624 | 1624 | return matches |
|
1625 | 1625 | |
|
1626 | 1626 | # get the cursor position of |
|
1627 | 1627 | # - the text being completed |
|
1628 | 1628 | # - the start of the key text |
|
1629 | 1629 | # - the start of the completion |
|
1630 | 1630 | text_start = len(self.text_until_cursor) - len(text) |
|
1631 | 1631 | if prefix: |
|
1632 | 1632 | key_start = match.start(2) |
|
1633 | 1633 | completion_start = key_start + token_offset |
|
1634 | 1634 | else: |
|
1635 | 1635 | key_start = completion_start = match.end() |
|
1636 | 1636 | |
|
1637 | 1637 | # grab the leading prefix, to make sure all completions start with `text` |
|
1638 | 1638 | if text_start > key_start: |
|
1639 | 1639 | leading = '' |
|
1640 | 1640 | else: |
|
1641 | 1641 | leading = text[text_start:completion_start] |
|
1642 | 1642 | |
|
1643 | 1643 | # the index of the `[` character |
|
1644 | 1644 | bracket_idx = match.end(1) |
|
1645 | 1645 | |
|
1646 | 1646 | # append closing quote and bracket as appropriate |
|
1647 | 1647 | # this is *not* appropriate if the opening quote or bracket is outside |
|
1648 | 1648 | # the text given to this method |
|
1649 | 1649 | suf = '' |
|
1650 | 1650 | continuation = self.line_buffer[len(self.text_until_cursor):] |
|
1651 | 1651 | if key_start > text_start and closing_quote: |
|
1652 | 1652 | # quotes were opened inside text, maybe close them |
|
1653 | 1653 | if continuation.startswith(closing_quote): |
|
1654 | 1654 | continuation = continuation[len(closing_quote):] |
|
1655 | 1655 | else: |
|
1656 | 1656 | suf += closing_quote |
|
1657 | 1657 | if bracket_idx > text_start: |
|
1658 | 1658 | # brackets were opened inside text, maybe close them |
|
1659 | 1659 | if not continuation.startswith(']'): |
|
1660 | 1660 | suf += ']' |
|
1661 | 1661 | |
|
1662 | 1662 | return [leading + k + suf for k in matches] |
|
1663 | 1663 | |
|
1664 | 1664 | def unicode_name_matches(self, text): |
|
1665 | 1665 | u"""Match Latex-like syntax for unicode characters base |
|
1666 | 1666 | on the name of the character. |
|
1667 | 1667 | |
|
1668 | 1668 | This does ``\\GREEK SMALL LETTER ETA`` -> ``Ξ·`` |
|
1669 | 1669 | |
|
1670 | 1670 | Works only on valid python 3 identifier, or on combining characters that |
|
1671 | 1671 | will combine to form a valid identifier. |
|
1672 | 1672 | |
|
1673 | 1673 | Used on Python 3 only. |
|
1674 | 1674 | """ |
|
1675 | 1675 | slashpos = text.rfind('\\') |
|
1676 | 1676 | if slashpos > -1: |
|
1677 | 1677 | s = text[slashpos+1:] |
|
1678 | 1678 | try : |
|
1679 | 1679 | unic = unicodedata.lookup(s) |
|
1680 | 1680 | # allow combining chars |
|
1681 | 1681 | if ('a'+unic).isidentifier(): |
|
1682 | 1682 | return '\\'+s,[unic] |
|
1683 | 1683 | except KeyError: |
|
1684 | 1684 | pass |
|
1685 | 1685 | return u'', [] |
|
1686 | 1686 | |
|
1687 | 1687 | |
|
1688 | 1688 | def latex_matches(self, text): |
|
1689 | 1689 | u"""Match Latex syntax for unicode characters. |
|
1690 | 1690 | |
|
1691 | 1691 | This does both ``\\alp`` -> ``\\alpha`` and ``\\alpha`` -> ``Ξ±`` |
|
1692 | 1692 | |
|
1693 | 1693 | Used on Python 3 only. |
|
1694 | 1694 | """ |
|
1695 | 1695 | slashpos = text.rfind('\\') |
|
1696 | 1696 | if slashpos > -1: |
|
1697 | 1697 | s = text[slashpos:] |
|
1698 | 1698 | if s in latex_symbols: |
|
1699 | 1699 | # Try to complete a full latex symbol to unicode |
|
1700 | 1700 | # \\alpha -> Ξ± |
|
1701 | 1701 | return s, [latex_symbols[s]] |
|
1702 | 1702 | else: |
|
1703 | 1703 | # If a user has partially typed a latex symbol, give them |
|
1704 | 1704 | # a full list of options \al -> [\aleph, \alpha] |
|
1705 | 1705 | matches = [k for k in latex_symbols if k.startswith(s)] |
|
1706 | 1706 | return s, matches |
|
1707 | 1707 | return u'', [] |
|
1708 | 1708 | |
|
1709 | 1709 | def dispatch_custom_completer(self, text): |
|
1710 | 1710 | if not self.custom_completers: |
|
1711 | 1711 | return |
|
1712 | 1712 | |
|
1713 | 1713 | line = self.line_buffer |
|
1714 | 1714 | if not line.strip(): |
|
1715 | 1715 | return None |
|
1716 | 1716 | |
|
1717 | 1717 | # Create a little structure to pass all the relevant information about |
|
1718 | 1718 | # the current completion to any custom completer. |
|
1719 | 1719 | event = SimpleNamespace() |
|
1720 | 1720 | event.line = line |
|
1721 | 1721 | event.symbol = text |
|
1722 | 1722 | cmd = line.split(None,1)[0] |
|
1723 | 1723 | event.command = cmd |
|
1724 | 1724 | event.text_until_cursor = self.text_until_cursor |
|
1725 | 1725 | |
|
1726 | 1726 | # for foo etc, try also to find completer for %foo |
|
1727 | 1727 | if not cmd.startswith(self.magic_escape): |
|
1728 | 1728 | try_magic = self.custom_completers.s_matches( |
|
1729 | 1729 | self.magic_escape + cmd) |
|
1730 | 1730 | else: |
|
1731 | 1731 | try_magic = [] |
|
1732 | 1732 | |
|
1733 | 1733 | for c in itertools.chain(self.custom_completers.s_matches(cmd), |
|
1734 | 1734 | try_magic, |
|
1735 | 1735 | self.custom_completers.flat_matches(self.text_until_cursor)): |
|
1736 | 1736 | try: |
|
1737 | 1737 | res = c(event) |
|
1738 | 1738 | if res: |
|
1739 | 1739 | # first, try case sensitive match |
|
1740 | 1740 | withcase = [r for r in res if r.startswith(text)] |
|
1741 | 1741 | if withcase: |
|
1742 | 1742 | return withcase |
|
1743 | 1743 | # if none, then case insensitive ones are ok too |
|
1744 | 1744 | text_low = text.lower() |
|
1745 | 1745 | return [r for r in res if r.lower().startswith(text_low)] |
|
1746 | 1746 | except TryNext: |
|
1747 | 1747 | pass |
|
1748 | 1748 | except KeyboardInterrupt: |
|
1749 | 1749 | """ |
|
1750 | 1750 | If custom completer take too long, |
|
1751 | 1751 | let keyboard interrupt abort and return nothing. |
|
1752 | 1752 | """ |
|
1753 | 1753 | break |
|
1754 | 1754 | |
|
1755 | 1755 | return None |
|
1756 | 1756 | |
|
1757 | 1757 | def completions(self, text: str, offset: int)->Iterator[Completion]: |
|
1758 | 1758 | """ |
|
1759 | 1759 | Returns an iterator over the possible completions |
|
1760 | 1760 | |
|
1761 | 1761 | .. warning:: Unstable |
|
1762 | 1762 | |
|
1763 | 1763 | This function is unstable, API may change without warning. |
|
1764 | 1764 | It will also raise unless use in proper context manager. |
|
1765 | 1765 | |
|
1766 | 1766 | Parameters |
|
1767 | 1767 | ---------- |
|
1768 | 1768 | |
|
1769 | 1769 | text:str |
|
1770 | 1770 | Full text of the current input, multi line string. |
|
1771 | 1771 | offset:int |
|
1772 | 1772 | Integer representing the position of the cursor in ``text``. Offset |
|
1773 | 1773 | is 0-based indexed. |
|
1774 | 1774 | |
|
1775 | 1775 | Yields |
|
1776 | 1776 | ------ |
|
1777 | 1777 | :any:`Completion` object |
|
1778 | 1778 | |
|
1779 | 1779 | |
|
1780 | 1780 | The cursor on a text can either be seen as being "in between" |
|
1781 | 1781 | characters or "On" a character depending on the interface visible to |
|
1782 | 1782 | the user. For consistency the cursor being on "in between" characters X |
|
1783 | 1783 | and Y is equivalent to the cursor being "on" character Y, that is to say |
|
1784 | 1784 | the character the cursor is on is considered as being after the cursor. |
|
1785 | 1785 | |
|
1786 | 1786 | Combining characters may span more that one position in the |
|
1787 | 1787 | text. |
|
1788 | 1788 | |
|
1789 | 1789 | |
|
1790 | 1790 | .. note:: |
|
1791 | 1791 | |
|
1792 | 1792 | If ``IPCompleter.debug`` is :any:`True` will yield a ``--jedi/ipython--`` |
|
1793 | 1793 | fake Completion token to distinguish completion returned by Jedi |
|
1794 | 1794 | and usual IPython completion. |
|
1795 | 1795 | |
|
1796 | 1796 | .. note:: |
|
1797 | 1797 | |
|
1798 | 1798 | Completions are not completely deduplicated yet. If identical |
|
1799 | 1799 | completions are coming from different sources this function does not |
|
1800 | 1800 | ensure that each completion object will only be present once. |
|
1801 | 1801 | """ |
|
1802 | 1802 | warnings.warn("_complete is a provisional API (as of IPython 6.0). " |
|
1803 | 1803 | "It may change without warnings. " |
|
1804 | 1804 | "Use in corresponding context manager.", |
|
1805 | 1805 | category=ProvisionalCompleterWarning, stacklevel=2) |
|
1806 | 1806 | |
|
1807 | 1807 | seen = set() |
|
1808 | 1808 | for c in self._completions(text, offset, _timeout=self.jedi_compute_type_timeout/1000): |
|
1809 | 1809 | if c and (c in seen): |
|
1810 | 1810 | continue |
|
1811 | 1811 | yield c |
|
1812 | 1812 | seen.add(c) |
|
1813 | 1813 | |
|
1814 | 1814 | def _completions(self, full_text: str, offset: int, *, _timeout)->Iterator[Completion]: |
|
1815 | 1815 | """ |
|
1816 | 1816 | Core completion module.Same signature as :any:`completions`, with the |
|
1817 | 1817 | extra `timeout` parameter (in seconds). |
|
1818 | 1818 | |
|
1819 | 1819 | |
|
1820 | 1820 | Computing jedi's completion ``.type`` can be quite expensive (it is a |
|
1821 | 1821 | lazy property) and can require some warm-up, more warm up than just |
|
1822 | 1822 | computing the ``name`` of a completion. The warm-up can be : |
|
1823 | 1823 | |
|
1824 | 1824 | - Long warm-up the first time a module is encountered after |
|
1825 | 1825 | install/update: actually build parse/inference tree. |
|
1826 | 1826 | |
|
1827 | 1827 | - first time the module is encountered in a session: load tree from |
|
1828 | 1828 | disk. |
|
1829 | 1829 | |
|
1830 | 1830 | We don't want to block completions for tens of seconds so we give the |
|
1831 | 1831 | completer a "budget" of ``_timeout`` seconds per invocation to compute |
|
1832 | 1832 | completions types, the completions that have not yet been computed will |
|
1833 | 1833 | be marked as "unknown" an will have a chance to be computed next round |
|
1834 | 1834 | are things get cached. |
|
1835 | 1835 | |
|
1836 | 1836 | Keep in mind that Jedi is not the only thing treating the completion so |
|
1837 | 1837 | keep the timeout short-ish as if we take more than 0.3 second we still |
|
1838 | 1838 | have lots of processing to do. |
|
1839 | 1839 | |
|
1840 | 1840 | """ |
|
1841 | 1841 | deadline = time.monotonic() + _timeout |
|
1842 | 1842 | |
|
1843 | 1843 | |
|
1844 | 1844 | before = full_text[:offset] |
|
1845 | 1845 | cursor_line, cursor_column = position_to_cursor(full_text, offset) |
|
1846 | 1846 | |
|
1847 | 1847 | matched_text, matches, matches_origin, jedi_matches = self._complete( |
|
1848 | 1848 | full_text=full_text, cursor_line=cursor_line, cursor_pos=cursor_column) |
|
1849 | 1849 | |
|
1850 | 1850 | iter_jm = iter(jedi_matches) |
|
1851 | 1851 | if _timeout: |
|
1852 | 1852 | for jm in iter_jm: |
|
1853 | 1853 | try: |
|
1854 | 1854 | type_ = jm.type |
|
1855 | 1855 | except Exception: |
|
1856 | 1856 | if self.debug: |
|
1857 | 1857 | print("Error in Jedi getting type of ", jm) |
|
1858 | 1858 | type_ = None |
|
1859 | 1859 | delta = len(jm.name_with_symbols) - len(jm.complete) |
|
1860 | 1860 | if type_ == 'function': |
|
1861 | 1861 | signature = _make_signature(jm) |
|
1862 | 1862 | else: |
|
1863 | 1863 | signature = '' |
|
1864 | 1864 | yield Completion(start=offset - delta, |
|
1865 | 1865 | end=offset, |
|
1866 | 1866 | text=jm.name_with_symbols, |
|
1867 | 1867 | type=type_, |
|
1868 | 1868 | signature=signature, |
|
1869 | 1869 | _origin='jedi') |
|
1870 | 1870 | |
|
1871 | 1871 | if time.monotonic() > deadline: |
|
1872 | 1872 | break |
|
1873 | 1873 | |
|
1874 | 1874 | for jm in iter_jm: |
|
1875 | 1875 | delta = len(jm.name_with_symbols) - len(jm.complete) |
|
1876 | 1876 | yield Completion(start=offset - delta, |
|
1877 | 1877 | end=offset, |
|
1878 | 1878 | text=jm.name_with_symbols, |
|
1879 | 1879 | type='<unknown>', # don't compute type for speed |
|
1880 | 1880 | _origin='jedi', |
|
1881 | 1881 | signature='') |
|
1882 | 1882 | |
|
1883 | 1883 | |
|
1884 | 1884 | start_offset = before.rfind(matched_text) |
|
1885 | 1885 | |
|
1886 | 1886 | # TODO: |
|
1887 | 1887 | # Suppress this, right now just for debug. |
|
1888 | 1888 | if jedi_matches and matches and self.debug: |
|
1889 | 1889 | yield Completion(start=start_offset, end=offset, text='--jedi/ipython--', |
|
1890 | 1890 | _origin='debug', type='none', signature='') |
|
1891 | 1891 | |
|
1892 | 1892 | # I'm unsure if this is always true, so let's assert and see if it |
|
1893 | 1893 | # crash |
|
1894 | 1894 | assert before.endswith(matched_text) |
|
1895 | 1895 | for m, t in zip(matches, matches_origin): |
|
1896 | 1896 | yield Completion(start=start_offset, end=offset, text=m, _origin=t, signature='', type='<unknown>') |
|
1897 | 1897 | |
|
1898 | 1898 | |
|
1899 | 1899 | def complete(self, text=None, line_buffer=None, cursor_pos=None): |
|
1900 | 1900 | """Find completions for the given text and line context. |
|
1901 | 1901 | |
|
1902 | 1902 | Note that both the text and the line_buffer are optional, but at least |
|
1903 | 1903 | one of them must be given. |
|
1904 | 1904 | |
|
1905 | 1905 | Parameters |
|
1906 | 1906 | ---------- |
|
1907 | 1907 | text : string, optional |
|
1908 | 1908 | Text to perform the completion on. If not given, the line buffer |
|
1909 | 1909 | is split using the instance's CompletionSplitter object. |
|
1910 | 1910 | |
|
1911 | 1911 | line_buffer : string, optional |
|
1912 | 1912 | If not given, the completer attempts to obtain the current line |
|
1913 | 1913 | buffer via readline. This keyword allows clients which are |
|
1914 | 1914 | requesting for text completions in non-readline contexts to inform |
|
1915 | 1915 | the completer of the entire text. |
|
1916 | 1916 | |
|
1917 | 1917 | cursor_pos : int, optional |
|
1918 | 1918 | Index of the cursor in the full line buffer. Should be provided by |
|
1919 | 1919 | remote frontends where kernel has no access to frontend state. |
|
1920 | 1920 | |
|
1921 | 1921 | Returns |
|
1922 | 1922 | ------- |
|
1923 | 1923 | text : str |
|
1924 | 1924 | Text that was actually used in the completion. |
|
1925 | 1925 | |
|
1926 | 1926 | matches : list |
|
1927 | 1927 | A list of completion matches. |
|
1928 | 1928 | |
|
1929 | 1929 | |
|
1930 | 1930 | .. note:: |
|
1931 | 1931 | |
|
1932 | 1932 | This API is likely to be deprecated and replaced by |
|
1933 | 1933 | :any:`IPCompleter.completions` in the future. |
|
1934 | 1934 | |
|
1935 | 1935 | |
|
1936 | 1936 | """ |
|
1937 | 1937 | warnings.warn('`Completer.complete` is pending deprecation since ' |
|
1938 | 1938 | 'IPython 6.0 and will be replaced by `Completer.completions`.', |
|
1939 | 1939 | PendingDeprecationWarning) |
|
1940 | 1940 | # potential todo, FOLD the 3rd throw away argument of _complete |
|
1941 | 1941 | # into the first 2 one. |
|
1942 | 1942 | return self._complete(line_buffer=line_buffer, cursor_pos=cursor_pos, text=text, cursor_line=0)[:2] |
|
1943 | 1943 | |
|
1944 | 1944 | def _complete(self, *, cursor_line, cursor_pos, line_buffer=None, text=None, |
|
1945 | 1945 | full_text=None) -> Tuple[str, List[str], List[str], Iterable[_FakeJediCompletion]]: |
|
1946 | 1946 | """ |
|
1947 | 1947 | |
|
1948 | 1948 | Like complete but can also returns raw jedi completions as well as the |
|
1949 | 1949 | origin of the completion text. This could (and should) be made much |
|
1950 | 1950 | cleaner but that will be simpler once we drop the old (and stateful) |
|
1951 | 1951 | :any:`complete` API. |
|
1952 | 1952 | |
|
1953 | 1953 | |
|
1954 | 1954 | With current provisional API, cursor_pos act both (depending on the |
|
1955 | 1955 | caller) as the offset in the ``text`` or ``line_buffer``, or as the |
|
1956 | 1956 | ``column`` when passing multiline strings this could/should be renamed |
|
1957 | 1957 | but would add extra noise. |
|
1958 | 1958 | """ |
|
1959 | 1959 | |
|
1960 | 1960 | # if the cursor position isn't given, the only sane assumption we can |
|
1961 | 1961 | # make is that it's at the end of the line (the common case) |
|
1962 | 1962 | if cursor_pos is None: |
|
1963 | 1963 | cursor_pos = len(line_buffer) if text is None else len(text) |
|
1964 | 1964 | |
|
1965 | 1965 | if self.use_main_ns: |
|
1966 | 1966 | self.namespace = __main__.__dict__ |
|
1967 | 1967 | |
|
1968 | 1968 | # if text is either None or an empty string, rely on the line buffer |
|
1969 | 1969 | if (not line_buffer) and full_text: |
|
1970 | 1970 | line_buffer = full_text.split('\n')[cursor_line] |
|
1971 | 1971 | if not text: |
|
1972 | 1972 | text = self.splitter.split_line(line_buffer, cursor_pos) |
|
1973 | 1973 | |
|
1974 | 1974 | if self.backslash_combining_completions: |
|
1975 | 1975 | # allow deactivation of these on windows. |
|
1976 | 1976 | base_text = text if not line_buffer else line_buffer[:cursor_pos] |
|
1977 | 1977 | latex_text, latex_matches = self.latex_matches(base_text) |
|
1978 | 1978 | if latex_matches: |
|
1979 | 1979 | return latex_text, latex_matches, ['latex_matches']*len(latex_matches), () |
|
1980 | 1980 | name_text = '' |
|
1981 | 1981 | name_matches = [] |
|
1982 | 1982 | for meth in (self.unicode_name_matches, back_latex_name_matches, back_unicode_name_matches): |
|
1983 | 1983 | name_text, name_matches = meth(base_text) |
|
1984 | 1984 | if name_text: |
|
1985 | 1985 | return name_text, name_matches[:MATCHES_LIMIT], \ |
|
1986 | 1986 | [meth.__qualname__]*min(len(name_matches), MATCHES_LIMIT), () |
|
1987 | 1987 | |
|
1988 | 1988 | |
|
1989 | 1989 | # If no line buffer is given, assume the input text is all there was |
|
1990 | 1990 | if line_buffer is None: |
|
1991 | 1991 | line_buffer = text |
|
1992 | 1992 | |
|
1993 | 1993 | self.line_buffer = line_buffer |
|
1994 | 1994 | self.text_until_cursor = self.line_buffer[:cursor_pos] |
|
1995 | 1995 | |
|
1996 | 1996 | # Do magic arg matches |
|
1997 | 1997 | for matcher in self.magic_arg_matchers: |
|
1998 | 1998 | matches = list(matcher(line_buffer))[:MATCHES_LIMIT] |
|
1999 | 1999 | if matches: |
|
2000 | 2000 | origins = [matcher.__qualname__] * len(matches) |
|
2001 | 2001 | return text, matches, origins, () |
|
2002 | 2002 | |
|
2003 | 2003 | # Start with a clean slate of completions |
|
2004 | 2004 | matches = [] |
|
2005 | 2005 | custom_res = self.dispatch_custom_completer(text) |
|
2006 | 2006 | # FIXME: we should extend our api to return a dict with completions for |
|
2007 | 2007 | # different types of objects. The rlcomplete() method could then |
|
2008 | 2008 | # simply collapse the dict into a list for readline, but we'd have |
|
2009 | 2009 | # richer completion semantics in other environments. |
|
2010 | 2010 | completions = () |
|
2011 | 2011 | if self.use_jedi: |
|
2012 | 2012 | if not full_text: |
|
2013 | 2013 | full_text = line_buffer |
|
2014 | 2014 | completions = self._jedi_matches( |
|
2015 | 2015 | cursor_pos, cursor_line, full_text) |
|
2016 | 2016 | if custom_res is not None: |
|
2017 | 2017 | # did custom completers produce something? |
|
2018 | 2018 | matches = [(m, 'custom') for m in custom_res] |
|
2019 | 2019 | else: |
|
2020 | 2020 | # Extend the list of completions with the results of each |
|
2021 | 2021 | # matcher, so we return results to the user from all |
|
2022 | 2022 | # namespaces. |
|
2023 | 2023 | if self.merge_completions: |
|
2024 | 2024 | matches = [] |
|
2025 | 2025 | for matcher in self.matchers: |
|
2026 | 2026 | try: |
|
2027 | 2027 | matches.extend([(m, matcher.__qualname__) |
|
2028 | 2028 | for m in matcher(text)]) |
|
2029 | 2029 | except: |
|
2030 | 2030 | # Show the ugly traceback if the matcher causes an |
|
2031 | 2031 | # exception, but do NOT crash the kernel! |
|
2032 | 2032 | sys.excepthook(*sys.exc_info()) |
|
2033 | 2033 | else: |
|
2034 | 2034 | for matcher in self.matchers: |
|
2035 | 2035 | matches = [(m, matcher.__qualname__) |
|
2036 | 2036 | for m in matcher(text)] |
|
2037 | 2037 | if matches: |
|
2038 | 2038 | break |
|
2039 | 2039 | seen = set() |
|
2040 | 2040 | filtered_matches = set() |
|
2041 | 2041 | for m in matches: |
|
2042 | 2042 | t, c = m |
|
2043 | 2043 | if t not in seen: |
|
2044 | 2044 | filtered_matches.add(m) |
|
2045 | 2045 | seen.add(t) |
|
2046 | 2046 | |
|
2047 | 2047 | _filtered_matches = sorted( |
|
2048 | 2048 | set(filtered_matches), key=lambda x: completions_sorting_key(x[0]))\ |
|
2049 | 2049 | [:MATCHES_LIMIT] |
|
2050 | 2050 | |
|
2051 | 2051 | _matches = [m[0] for m in _filtered_matches] |
|
2052 | 2052 | origins = [m[1] for m in _filtered_matches] |
|
2053 | 2053 | |
|
2054 | 2054 | self.matches = _matches |
|
2055 | 2055 | |
|
2056 | 2056 | return text, _matches, origins, completions |
@@ -1,67 +1,67 b'' | |||
|
1 | 1 | .. _plotting: |
|
2 | 2 | |
|
3 | 3 | Rich Outputs |
|
4 | 4 | ------------ |
|
5 | 5 | |
|
6 | 6 | One of the main feature of IPython when used as a kernel is its ability to |
|
7 | 7 | show rich output. This means that object that can be representing as image, |
|
8 | 8 | sounds, animation, (etc...) can be shown this way if the frontend support it. |
|
9 | 9 | |
|
10 | 10 | In order for this to be possible, you need to use the ``display()`` function, |
|
11 | 11 | that should be available by default on IPython 5.4+ and 6.1+, or that you can |
|
12 | 12 | import with ``from IPython.display import display``. Then use ``display(<your |
|
13 | 13 | object>)`` instead of ``print()``, and if possible your object will be displayed |
|
14 | with a richer representation. In the terminal of course, there wont be much | |
|
14 | with a richer representation. In the terminal of course, there won't be much | |
|
15 | 15 | difference as object are most of the time represented by text, but in notebook |
|
16 | 16 | and similar interface you will get richer outputs. |
|
17 | 17 | |
|
18 | 18 | |
|
19 | 19 | Plotting |
|
20 | 20 | -------- |
|
21 | 21 | |
|
22 | 22 | .. note:: |
|
23 | 23 | |
|
24 | 24 | Starting with IPython 5.0 and matplotlib 2.0 you can avoid the use of |
|
25 | 25 | IPython's specific magic and use |
|
26 | 26 | ``matplotlib.pyplot.ion()``/``matplotlib.pyplot.ioff()`` which have the |
|
27 | 27 | advantages of working outside of IPython as well. |
|
28 | 28 | |
|
29 | 29 | |
|
30 | 30 | One major feature of the IPython kernel is the ability to display plots that |
|
31 | 31 | are the output of running code cells. The IPython kernel is designed to work |
|
32 | 32 | seamlessly with the matplotlib_ plotting library to provide this functionality. |
|
33 | 33 | |
|
34 | 34 | To set this up, before any plotting or import of matplotlib is performed you |
|
35 | 35 | must execute the ``%matplotlib`` :ref:`magic command <magics_explained>`. This |
|
36 | 36 | performs the necessary behind-the-scenes setup for IPython to work correctly |
|
37 | 37 | hand in hand with ``matplotlib``; it does *not*, however, actually execute any |
|
38 | 38 | Python ``import`` commands, that is, no names are added to the namespace. |
|
39 | 39 | |
|
40 | 40 | If the ``%matplotlib`` magic is called without an argument, the |
|
41 | 41 | output of a plotting command is displayed using the default ``matplotlib`` |
|
42 | 42 | backend in a separate window. Alternatively, the backend can be explicitly |
|
43 | 43 | requested using, for example:: |
|
44 | 44 | |
|
45 | 45 | %matplotlib gtk |
|
46 | 46 | |
|
47 | 47 | A particularly interesting backend, provided by IPython, is the ``inline`` |
|
48 | 48 | backend. This is available only for the Jupyter Notebook and the |
|
49 | 49 | Jupyter QtConsole. It can be invoked as follows:: |
|
50 | 50 | |
|
51 | 51 | %matplotlib inline |
|
52 | 52 | |
|
53 | 53 | With this backend, the output of plotting commands is displayed *inline* within |
|
54 | 54 | frontends like the Jupyter notebook, directly below the code cell that produced |
|
55 | 55 | it. The resulting plots will then also be stored in the notebook document. |
|
56 | 56 | |
|
57 | 57 | .. seealso:: |
|
58 | 58 | |
|
59 | 59 | `Plotting with Matplotlib`_ example notebook |
|
60 | 60 | |
|
61 | 61 | |
|
62 | 62 | The matplotlib_ library also ships with ``%matplotlib notebook`` command that |
|
63 | 63 | allows interactive figures if your environment allows it. |
|
64 | 64 | |
|
65 | 65 | See the matplotlib_ documentation for more information. |
|
66 | 66 | |
|
67 | 67 | .. include:: ../links.txt |
@@ -1,528 +1,528 b'' | |||
|
1 | 1 | .. _issues_list_011: |
|
2 | 2 | |
|
3 | 3 | Issues closed in the 0.11 development cycle |
|
4 | 4 | =========================================== |
|
5 | 5 | |
|
6 | 6 | In this cycle, we closed a total of 511 issues, 226 pull requests and 285 |
|
7 | 7 | regular issues; this is the full list (generated with the script |
|
8 | 8 | `tools/github_stats.py`). We should note that a few of these were made on the |
|
9 | 9 | 0.10.x series, but we have no automatic way of filtering the issues by branch, |
|
10 | 10 | so this reflects all of our development over the last two years, including work |
|
11 | 11 | already released in 0.10.2: |
|
12 | 12 | |
|
13 | 13 | Pull requests (226): |
|
14 | 14 | |
|
15 | 15 | * `620 <https://github.com/ipython/ipython/issues/620>`_: Release notes and updates to GUI support docs for 0.11 |
|
16 | 16 | * `642 <https://github.com/ipython/ipython/issues/642>`_: fix typo in docs/examples/vim/README.rst |
|
17 | 17 | * `631 <https://github.com/ipython/ipython/issues/631>`_: two-way vim-ipython integration |
|
18 | 18 | * `637 <https://github.com/ipython/ipython/issues/637>`_: print is a function, this allows to properly exit ipython |
|
19 | 19 | * `635 <https://github.com/ipython/ipython/issues/635>`_: support html representations in the notebook frontend |
|
20 | 20 | * `639 <https://github.com/ipython/ipython/issues/639>`_: Updating the credits file |
|
21 | 21 | * `628 <https://github.com/ipython/ipython/issues/628>`_: import pexpect from IPython.external in irunner |
|
22 | 22 | * `596 <https://github.com/ipython/ipython/issues/596>`_: Irunner |
|
23 | 23 | * `598 <https://github.com/ipython/ipython/issues/598>`_: Fix templates for CrashHandler |
|
24 | 24 | * `590 <https://github.com/ipython/ipython/issues/590>`_: Desktop |
|
25 | 25 | * `600 <https://github.com/ipython/ipython/issues/600>`_: Fix bug with non-ascii reprs inside pretty-printed lists. |
|
26 | 26 | * `618 <https://github.com/ipython/ipython/issues/618>`_: I617 |
|
27 | 27 | * `599 <https://github.com/ipython/ipython/issues/599>`_: Gui Qt example and docs |
|
28 | 28 | * `619 <https://github.com/ipython/ipython/issues/619>`_: manpage update |
|
29 | 29 | * `582 <https://github.com/ipython/ipython/issues/582>`_: Updating sympy profile to match the exec_lines of isympy. |
|
30 | 30 | * `578 <https://github.com/ipython/ipython/issues/578>`_: Check to see if correct source for decorated functions can be displayed |
|
31 | 31 | * `589 <https://github.com/ipython/ipython/issues/589>`_: issue 588 |
|
32 | 32 | * `591 <https://github.com/ipython/ipython/issues/591>`_: simulate shell expansion on %run arguments, at least tilde expansion |
|
33 | 33 | * `576 <https://github.com/ipython/ipython/issues/576>`_: Show message about %paste magic on an IndentationError |
|
34 | 34 | * `574 <https://github.com/ipython/ipython/issues/574>`_: Getcwdu |
|
35 | 35 | * `565 <https://github.com/ipython/ipython/issues/565>`_: don't move old config files, keep nagging the user |
|
36 | 36 | * `575 <https://github.com/ipython/ipython/issues/575>`_: Added more docstrings to IPython.zmq.session. |
|
37 | 37 | * `567 <https://github.com/ipython/ipython/issues/567>`_: fix trailing whitespace from resetting indentation |
|
38 | 38 | * `564 <https://github.com/ipython/ipython/issues/564>`_: Command line args in docs |
|
39 | 39 | * `560 <https://github.com/ipython/ipython/issues/560>`_: reorder qt support in kernel |
|
40 | 40 | * `561 <https://github.com/ipython/ipython/issues/561>`_: command-line suggestions |
|
41 | 41 | * `556 <https://github.com/ipython/ipython/issues/556>`_: qt_for_kernel: use matplotlib rcParams to decide between PyQt4 and PySide |
|
42 | 42 | * `557 <https://github.com/ipython/ipython/issues/557>`_: Update usage.py to newapp |
|
43 | 43 | * `555 <https://github.com/ipython/ipython/issues/555>`_: Rm default old config |
|
44 | 44 | * `552 <https://github.com/ipython/ipython/issues/552>`_: update parallel code for py3k |
|
45 | 45 | * `504 <https://github.com/ipython/ipython/issues/504>`_: Updating string formatting |
|
46 | 46 | * `551 <https://github.com/ipython/ipython/issues/551>`_: Make pylab import all configurable |
|
47 | 47 | * `496 <https://github.com/ipython/ipython/issues/496>`_: Qt editing keybindings |
|
48 | 48 | * `550 <https://github.com/ipython/ipython/issues/550>`_: Support v2 PyQt4 APIs and PySide in kernel's GUI support |
|
49 | 49 | * `546 <https://github.com/ipython/ipython/issues/546>`_: doc update |
|
50 | 50 | * `548 <https://github.com/ipython/ipython/issues/548>`_: Fix sympy profile to work with sympy 0.7. |
|
51 | 51 | * `542 <https://github.com/ipython/ipython/issues/542>`_: issue 440 |
|
52 | 52 | * `533 <https://github.com/ipython/ipython/issues/533>`_: Remove unused configobj and validate libraries from externals. |
|
53 | 53 | * `538 <https://github.com/ipython/ipython/issues/538>`_: fix various tests on Windows |
|
54 | 54 | * `540 <https://github.com/ipython/ipython/issues/540>`_: support `-pylab` flag with deprecation warning |
|
55 | 55 | * `537 <https://github.com/ipython/ipython/issues/537>`_: Docs update |
|
56 | 56 | * `536 <https://github.com/ipython/ipython/issues/536>`_: `setup.py install` depends on setuptools on Windows |
|
57 | 57 | * `480 <https://github.com/ipython/ipython/issues/480>`_: Get help mid-command |
|
58 | 58 | * `462 <https://github.com/ipython/ipython/issues/462>`_: Str and Bytes traitlets |
|
59 | 59 | * `534 <https://github.com/ipython/ipython/issues/534>`_: Handle unicode properly in IPython.zmq.iostream |
|
60 | 60 | * `527 <https://github.com/ipython/ipython/issues/527>`_: ZMQ displayhook |
|
61 | 61 | * `526 <https://github.com/ipython/ipython/issues/526>`_: Handle asynchronous output in Qt console |
|
62 | 62 | * `528 <https://github.com/ipython/ipython/issues/528>`_: Do not import deprecated functions from external decorators library. |
|
63 | 63 | * `454 <https://github.com/ipython/ipython/issues/454>`_: New BaseIPythonApplication |
|
64 | 64 | * `532 <https://github.com/ipython/ipython/issues/532>`_: Zmq unicode |
|
65 | 65 | * `531 <https://github.com/ipython/ipython/issues/531>`_: Fix Parallel test |
|
66 | 66 | * `525 <https://github.com/ipython/ipython/issues/525>`_: fallback on lsof if otool not found in libedit detection |
|
67 | 67 | * `517 <https://github.com/ipython/ipython/issues/517>`_: Merge IPython.parallel.streamsession into IPython.zmq.session |
|
68 | 68 | * `521 <https://github.com/ipython/ipython/issues/521>`_: use dict.get(key) instead of dict[key] for safety from KeyErrors |
|
69 | 69 | * `492 <https://github.com/ipython/ipython/issues/492>`_: add QtConsoleApp using newapplication |
|
70 | 70 | * `485 <https://github.com/ipython/ipython/issues/485>`_: terminal IPython with newapp |
|
71 | 71 | * `486 <https://github.com/ipython/ipython/issues/486>`_: Use newapp in parallel code |
|
72 | 72 | * `511 <https://github.com/ipython/ipython/issues/511>`_: Add a new line before displaying multiline strings in the Qt console. |
|
73 | 73 | * `509 <https://github.com/ipython/ipython/issues/509>`_: i508 |
|
74 | 74 | * `501 <https://github.com/ipython/ipython/issues/501>`_: ignore EINTR in channel loops |
|
75 | 75 | * `495 <https://github.com/ipython/ipython/issues/495>`_: Better selection of Qt bindings when QT_API is not specified |
|
76 | 76 | * `498 <https://github.com/ipython/ipython/issues/498>`_: Check for .pyd as extension for binary files. |
|
77 | 77 | * `494 <https://github.com/ipython/ipython/issues/494>`_: QtConsole zoom adjustments |
|
78 | 78 | * `490 <https://github.com/ipython/ipython/issues/490>`_: fix UnicodeEncodeError writing SVG string to .svg file, fixes #489 |
|
79 | 79 | * `491 <https://github.com/ipython/ipython/issues/491>`_: add QtConsoleApp using newapplication |
|
80 | 80 | * `479 <https://github.com/ipython/ipython/issues/479>`_: embed() doesn't load default config |
|
81 | 81 | * `483 <https://github.com/ipython/ipython/issues/483>`_: Links launchpad -> github |
|
82 | 82 | * `419 <https://github.com/ipython/ipython/issues/419>`_: %xdel magic |
|
83 | 83 | * `477 <https://github.com/ipython/ipython/issues/477>`_: Add \n to lines in the log |
|
84 | 84 | * `459 <https://github.com/ipython/ipython/issues/459>`_: use os.system for shell.system in Terminal frontend |
|
85 | 85 | * `475 <https://github.com/ipython/ipython/issues/475>`_: i473 |
|
86 | 86 | * `471 <https://github.com/ipython/ipython/issues/471>`_: Add test decorator onlyif_unicode_paths. |
|
87 | 87 | * `474 <https://github.com/ipython/ipython/issues/474>`_: Fix support for raw GTK and WX matplotlib backends. |
|
88 | 88 | * `472 <https://github.com/ipython/ipython/issues/472>`_: Kernel event loop is robust against random SIGINT. |
|
89 | 89 | * `460 <https://github.com/ipython/ipython/issues/460>`_: Share code for magic_edit |
|
90 | 90 | * `469 <https://github.com/ipython/ipython/issues/469>`_: Add exit code when running all tests with iptest. |
|
91 | 91 | * `464 <https://github.com/ipython/ipython/issues/464>`_: Add home directory expansion to IPYTHON_DIR environment variables. |
|
92 | 92 | * `455 <https://github.com/ipython/ipython/issues/455>`_: Bugfix with logger |
|
93 | 93 | * `448 <https://github.com/ipython/ipython/issues/448>`_: Separate out skip_doctest decorator |
|
94 | 94 | * `453 <https://github.com/ipython/ipython/issues/453>`_: Draft of new main BaseIPythonApplication. |
|
95 | 95 | * `452 <https://github.com/ipython/ipython/issues/452>`_: Use list/tuple/dict/set subclass's overridden __repr__ instead of the pretty |
|
96 | 96 | * `398 <https://github.com/ipython/ipython/issues/398>`_: allow toggle of svg/png inline figure format |
|
97 | 97 | * `381 <https://github.com/ipython/ipython/issues/381>`_: Support inline PNGs of matplotlib plots |
|
98 | 98 | * `413 <https://github.com/ipython/ipython/issues/413>`_: Retries and Resubmit (#411 and #412) |
|
99 | 99 | * `370 <https://github.com/ipython/ipython/issues/370>`_: Fixes to the display system |
|
100 | 100 | * `449 <https://github.com/ipython/ipython/issues/449>`_: Fix issue 447 - inspecting old-style classes. |
|
101 | 101 | * `423 <https://github.com/ipython/ipython/issues/423>`_: Allow type checking on elements of List,Tuple,Set traits |
|
102 | 102 | * `400 <https://github.com/ipython/ipython/issues/400>`_: Config5 |
|
103 | 103 | * `421 <https://github.com/ipython/ipython/issues/421>`_: Generalise mechanism to put text at the next prompt in the Qt console. |
|
104 | 104 | * `443 <https://github.com/ipython/ipython/issues/443>`_: pinfo code duplication |
|
105 | 105 | * `429 <https://github.com/ipython/ipython/issues/429>`_: add check_pid, and handle stale PID info in ipcluster. |
|
106 | 106 | * `431 <https://github.com/ipython/ipython/issues/431>`_: Fix error message in test_irunner |
|
107 | 107 | * `427 <https://github.com/ipython/ipython/issues/427>`_: handle different SyntaxError messages in test_irunner |
|
108 | 108 | * `424 <https://github.com/ipython/ipython/issues/424>`_: Irunner test failure |
|
109 | 109 | * `430 <https://github.com/ipython/ipython/issues/430>`_: Small parallel doc typo |
|
110 | 110 | * `422 <https://github.com/ipython/ipython/issues/422>`_: Make ipython-qtconsole a GUI script |
|
111 | 111 | * `420 <https://github.com/ipython/ipython/issues/420>`_: Permit kernel std* to be redirected |
|
112 | 112 | * `408 <https://github.com/ipython/ipython/issues/408>`_: History request |
|
113 | 113 | * `388 <https://github.com/ipython/ipython/issues/388>`_: Add Emacs-style kill ring to Qt console |
|
114 | 114 | * `414 <https://github.com/ipython/ipython/issues/414>`_: Warn on old config files |
|
115 | 115 | * `415 <https://github.com/ipython/ipython/issues/415>`_: Prevent prefilter from crashing IPython |
|
116 | 116 | * `418 <https://github.com/ipython/ipython/issues/418>`_: Minor configuration doc fixes |
|
117 | 117 | * `407 <https://github.com/ipython/ipython/issues/407>`_: Update What's new documentation |
|
118 | 118 | * `410 <https://github.com/ipython/ipython/issues/410>`_: Install notebook frontend |
|
119 | 119 | * `406 <https://github.com/ipython/ipython/issues/406>`_: install IPython.zmq.gui |
|
120 | 120 | * `393 <https://github.com/ipython/ipython/issues/393>`_: ipdir unicode |
|
121 | 121 | * `397 <https://github.com/ipython/ipython/issues/397>`_: utils.io.Term.cin/out/err -> utils.io.stdin/out/err |
|
122 | 122 | * `389 <https://github.com/ipython/ipython/issues/389>`_: DB fixes and Scheduler HWM |
|
123 | 123 | * `374 <https://github.com/ipython/ipython/issues/374>`_: Various Windows-related fixes to IPython.parallel |
|
124 | 124 | * `362 <https://github.com/ipython/ipython/issues/362>`_: fallback on defaultencoding if filesystemencoding is None |
|
125 | 125 | * `382 <https://github.com/ipython/ipython/issues/382>`_: Shell's reset method clears namespace from last %run command. |
|
126 | 126 | * `385 <https://github.com/ipython/ipython/issues/385>`_: Update iptest exclusions (fix #375) |
|
127 | 127 | * `383 <https://github.com/ipython/ipython/issues/383>`_: Catch errors in querying readline which occur with pyreadline. |
|
128 | 128 | * `373 <https://github.com/ipython/ipython/issues/373>`_: Remove runlines etc. |
|
129 | 129 | * `364 <https://github.com/ipython/ipython/issues/364>`_: Single output |
|
130 | 130 | * `372 <https://github.com/ipython/ipython/issues/372>`_: Multiline input push |
|
131 | 131 | * `363 <https://github.com/ipython/ipython/issues/363>`_: Issue 125 |
|
132 | 132 | * `361 <https://github.com/ipython/ipython/issues/361>`_: don't rely on setuptools for readline dependency check |
|
133 | 133 | * `349 <https://github.com/ipython/ipython/issues/349>`_: Fix %autopx magic |
|
134 | 134 | * `355 <https://github.com/ipython/ipython/issues/355>`_: History save thread |
|
135 | 135 | * `356 <https://github.com/ipython/ipython/issues/356>`_: Usability improvements to history in Qt console |
|
136 | 136 | * `357 <https://github.com/ipython/ipython/issues/357>`_: Exit autocall |
|
137 | 137 | * `353 <https://github.com/ipython/ipython/issues/353>`_: Rewrite quit()/exit()/Quit()/Exit() calls as magic |
|
138 | 138 | * `354 <https://github.com/ipython/ipython/issues/354>`_: Cell tweaks |
|
139 | 139 | * `345 <https://github.com/ipython/ipython/issues/345>`_: Attempt to address (partly) issue ipython/#342 by rewriting quit(), exit(), etc. |
|
140 | 140 | * `352 <https://github.com/ipython/ipython/issues/352>`_: #342: Try to recover as intelligently as possible if user calls magic(). |
|
141 | 141 | * `346 <https://github.com/ipython/ipython/issues/346>`_: Dedent prefix bugfix + tests: #142 |
|
142 | 142 | * `348 <https://github.com/ipython/ipython/issues/348>`_: %reset doesn't reset prompt number. |
|
143 | 143 | * `347 <https://github.com/ipython/ipython/issues/347>`_: Make ip.reset() work the same in interactive or non-interactive code. |
|
144 | 144 | * `343 <https://github.com/ipython/ipython/issues/343>`_: make readline a dependency on OSX |
|
145 | 145 | * `344 <https://github.com/ipython/ipython/issues/344>`_: restore auto debug behavior |
|
146 | 146 | * `339 <https://github.com/ipython/ipython/issues/339>`_: fix for issue 337: incorrect/phantom tooltips for magics |
|
147 | 147 | * `254 <https://github.com/ipython/ipython/issues/254>`_: newparallel branch (add zmq.parallel submodule) |
|
148 | 148 | * `334 <https://github.com/ipython/ipython/issues/334>`_: Hard reset |
|
149 | 149 | * `316 <https://github.com/ipython/ipython/issues/316>`_: Unicode win process |
|
150 | 150 | * `332 <https://github.com/ipython/ipython/issues/332>`_: AST splitter |
|
151 | 151 | * `325 <https://github.com/ipython/ipython/issues/325>`_: Removetwisted |
|
152 | 152 | * `330 <https://github.com/ipython/ipython/issues/330>`_: Magic pastebin |
|
153 | 153 | * `309 <https://github.com/ipython/ipython/issues/309>`_: Bug tests for GH Issues 238, 284, 306, 307. Skip module machinery if not installed. Known failures reported as 'K' |
|
154 | 154 | * `331 <https://github.com/ipython/ipython/issues/331>`_: Tweak config loader for PyPy compatibility. |
|
155 | 155 | * `319 <https://github.com/ipython/ipython/issues/319>`_: Rewrite code to restore readline history after an action |
|
156 | 156 | * `329 <https://github.com/ipython/ipython/issues/329>`_: Do not store file contents in history when running a .ipy file. |
|
157 | 157 | * `179 <https://github.com/ipython/ipython/issues/179>`_: Html notebook |
|
158 | 158 | * `323 <https://github.com/ipython/ipython/issues/323>`_: Add missing external.pexpect to packages |
|
159 | 159 | * `295 <https://github.com/ipython/ipython/issues/295>`_: Magic local scope |
|
160 | 160 | * `315 <https://github.com/ipython/ipython/issues/315>`_: Unicode magic args |
|
161 | 161 | * `310 <https://github.com/ipython/ipython/issues/310>`_: allow Unicode Command-Line options |
|
162 | 162 | * `313 <https://github.com/ipython/ipython/issues/313>`_: Readline shortcuts |
|
163 | 163 | * `311 <https://github.com/ipython/ipython/issues/311>`_: Qtconsole exit |
|
164 | 164 | * `312 <https://github.com/ipython/ipython/issues/312>`_: History memory |
|
165 | 165 | * `294 <https://github.com/ipython/ipython/issues/294>`_: Issue 290 |
|
166 | 166 | * `292 <https://github.com/ipython/ipython/issues/292>`_: Issue 31 |
|
167 | 167 | * `252 <https://github.com/ipython/ipython/issues/252>`_: Unicode issues |
|
168 | 168 | * `235 <https://github.com/ipython/ipython/issues/235>`_: Fix history magic command's bugs wrt to full history and add -O option to display full history |
|
169 | 169 | * `236 <https://github.com/ipython/ipython/issues/236>`_: History minus p flag |
|
170 | 170 | * `261 <https://github.com/ipython/ipython/issues/261>`_: Adapt magic commands to new history system. |
|
171 | 171 | * `282 <https://github.com/ipython/ipython/issues/282>`_: SQLite history |
|
172 | 172 | * `191 <https://github.com/ipython/ipython/issues/191>`_: Unbundle external libraries |
|
173 | 173 | * `199 <https://github.com/ipython/ipython/issues/199>`_: Magic arguments |
|
174 | 174 | * `204 <https://github.com/ipython/ipython/issues/204>`_: Emacs completion bugfix |
|
175 | 175 | * `293 <https://github.com/ipython/ipython/issues/293>`_: Issue 133 |
|
176 | 176 | * `249 <https://github.com/ipython/ipython/issues/249>`_: Writing unicode characters to a log file. (IPython 0.10.2.git) |
|
177 | 177 | * `283 <https://github.com/ipython/ipython/issues/283>`_: Support for 256-color escape sequences in Qt console |
|
178 | 178 | * `281 <https://github.com/ipython/ipython/issues/281>`_: Refactored and improved Qt console's HTML export facility |
|
179 | 179 | * `237 <https://github.com/ipython/ipython/issues/237>`_: Fix185 (take two) |
|
180 | 180 | * `251 <https://github.com/ipython/ipython/issues/251>`_: Issue 129 |
|
181 | 181 | * `278 <https://github.com/ipython/ipython/issues/278>`_: add basic XDG_CONFIG_HOME support |
|
182 | 182 | * `275 <https://github.com/ipython/ipython/issues/275>`_: inline pylab cuts off labels on log plots |
|
183 | 183 | * `280 <https://github.com/ipython/ipython/issues/280>`_: Add %precision magic |
|
184 | 184 | * `259 <https://github.com/ipython/ipython/issues/259>`_: Pyside support |
|
185 | 185 | * `193 <https://github.com/ipython/ipython/issues/193>`_: Make ipython cProfile-able |
|
186 | 186 | * `272 <https://github.com/ipython/ipython/issues/272>`_: Magic examples |
|
187 | 187 | * `219 <https://github.com/ipython/ipython/issues/219>`_: Doc magic pycat |
|
188 | 188 | * `221 <https://github.com/ipython/ipython/issues/221>`_: Doc magic alias |
|
189 | 189 | * `230 <https://github.com/ipython/ipython/issues/230>`_: Doc magic edit |
|
190 | 190 | * `224 <https://github.com/ipython/ipython/issues/224>`_: Doc magic cpaste |
|
191 | 191 | * `229 <https://github.com/ipython/ipython/issues/229>`_: Doc magic pdef |
|
192 | 192 | * `273 <https://github.com/ipython/ipython/issues/273>`_: Docs build |
|
193 | 193 | * `228 <https://github.com/ipython/ipython/issues/228>`_: Doc magic who |
|
194 | 194 | * `233 <https://github.com/ipython/ipython/issues/233>`_: Doc magic cd |
|
195 | 195 | * `226 <https://github.com/ipython/ipython/issues/226>`_: Doc magic pwd |
|
196 | 196 | * `218 <https://github.com/ipython/ipython/issues/218>`_: Doc magic history |
|
197 | 197 | * `231 <https://github.com/ipython/ipython/issues/231>`_: Doc magic reset |
|
198 | 198 | * `225 <https://github.com/ipython/ipython/issues/225>`_: Doc magic save |
|
199 | 199 | * `222 <https://github.com/ipython/ipython/issues/222>`_: Doc magic timeit |
|
200 | 200 | * `223 <https://github.com/ipython/ipython/issues/223>`_: Doc magic colors |
|
201 | 201 | * `203 <https://github.com/ipython/ipython/issues/203>`_: Small typos in zmq/blockingkernelmanager.py |
|
202 | 202 | * `227 <https://github.com/ipython/ipython/issues/227>`_: Doc magic logon |
|
203 | 203 | * `232 <https://github.com/ipython/ipython/issues/232>`_: Doc magic profile |
|
204 | 204 | * `264 <https://github.com/ipython/ipython/issues/264>`_: Kernel logging |
|
205 | 205 | * `220 <https://github.com/ipython/ipython/issues/220>`_: Doc magic edit |
|
206 | 206 | * `268 <https://github.com/ipython/ipython/issues/268>`_: PyZMQ >= 2.0.10 |
|
207 | 207 | * `267 <https://github.com/ipython/ipython/issues/267>`_: GitHub Pages (again) |
|
208 | 208 | * `266 <https://github.com/ipython/ipython/issues/266>`_: OSX-specific fixes to the Qt console |
|
209 | 209 | * `255 <https://github.com/ipython/ipython/issues/255>`_: Gitwash typo |
|
210 | 210 | * `265 <https://github.com/ipython/ipython/issues/265>`_: Fix string input2 |
|
211 | 211 | * `260 <https://github.com/ipython/ipython/issues/260>`_: Kernel crash with empty history |
|
212 | 212 | * `243 <https://github.com/ipython/ipython/issues/243>`_: New display system |
|
213 | 213 | * `242 <https://github.com/ipython/ipython/issues/242>`_: Fix terminal exit |
|
214 | 214 | * `250 <https://github.com/ipython/ipython/issues/250>`_: always use Session.send |
|
215 | 215 | * `239 <https://github.com/ipython/ipython/issues/239>`_: Makefile command & script for GitHub Pages |
|
216 | 216 | * `244 <https://github.com/ipython/ipython/issues/244>`_: My exit |
|
217 | 217 | * `234 <https://github.com/ipython/ipython/issues/234>`_: Timed history save |
|
218 | 218 | * `217 <https://github.com/ipython/ipython/issues/217>`_: Doc magic lsmagic |
|
219 | 219 | * `215 <https://github.com/ipython/ipython/issues/215>`_: History fix |
|
220 | 220 | * `195 <https://github.com/ipython/ipython/issues/195>`_: Formatters |
|
221 | 221 | * `192 <https://github.com/ipython/ipython/issues/192>`_: Ready colorize bug |
|
222 | 222 | * `198 <https://github.com/ipython/ipython/issues/198>`_: Windows workdir |
|
223 | 223 | * `174 <https://github.com/ipython/ipython/issues/174>`_: Whitespace cleanup |
|
224 | 224 | * `188 <https://github.com/ipython/ipython/issues/188>`_: Version info: update our version management system to use git. |
|
225 | 225 | * `158 <https://github.com/ipython/ipython/issues/158>`_: Ready for merge |
|
226 | 226 | * `187 <https://github.com/ipython/ipython/issues/187>`_: Resolved Print shortcut collision with ctrl-P emacs binding |
|
227 | 227 | * `183 <https://github.com/ipython/ipython/issues/183>`_: cleanup of exit/quit commands for qt console |
|
228 | 228 | * `184 <https://github.com/ipython/ipython/issues/184>`_: Logo added to sphinx docs |
|
229 | 229 | * `180 <https://github.com/ipython/ipython/issues/180>`_: Cleanup old code |
|
230 | 230 | * `171 <https://github.com/ipython/ipython/issues/171>`_: Expose Pygments styles as options |
|
231 | 231 | * `170 <https://github.com/ipython/ipython/issues/170>`_: HTML Fixes |
|
232 | 232 | * `172 <https://github.com/ipython/ipython/issues/172>`_: Fix del method exit test |
|
233 | 233 | * `164 <https://github.com/ipython/ipython/issues/164>`_: Qt frontend shutdown behavior fixes and enhancements |
|
234 | 234 | * `167 <https://github.com/ipython/ipython/issues/167>`_: Added HTML export |
|
235 | 235 | * `163 <https://github.com/ipython/ipython/issues/163>`_: Execution refactor |
|
236 | 236 | * `159 <https://github.com/ipython/ipython/issues/159>`_: Ipy3 preparation |
|
237 | 237 | * `155 <https://github.com/ipython/ipython/issues/155>`_: Ready startup fix |
|
238 | 238 | * `152 <https://github.com/ipython/ipython/issues/152>`_: 0.10.1 sge |
|
239 | 239 | * `151 <https://github.com/ipython/ipython/issues/151>`_: mk_object_info -> object_info |
|
240 | 240 | * `149 <https://github.com/ipython/ipython/issues/149>`_: Simple bug-fix |
|
241 | 241 | |
|
242 | 242 | Regular issues (285): |
|
243 | 243 | |
|
244 | 244 | * `630 <https://github.com/ipython/ipython/issues/630>`_: new.py in pwd prevents ipython from starting |
|
245 | 245 | * `623 <https://github.com/ipython/ipython/issues/623>`_: Execute DirectView commands while running LoadBalancedView tasks |
|
246 | 246 | * `437 <https://github.com/ipython/ipython/issues/437>`_: Users should have autocompletion in the notebook |
|
247 | 247 | * `583 <https://github.com/ipython/ipython/issues/583>`_: update manpages |
|
248 | 248 | * `594 <https://github.com/ipython/ipython/issues/594>`_: irunner command line options defer to file extensions |
|
249 | 249 | * `603 <https://github.com/ipython/ipython/issues/603>`_: Users should see colored text in tracebacks and the pager |
|
250 | 250 | * `597 <https://github.com/ipython/ipython/issues/597>`_: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 |
|
251 | 251 | * `608 <https://github.com/ipython/ipython/issues/608>`_: Organize and layout buttons in the notebook panel sections |
|
252 | 252 | * `609 <https://github.com/ipython/ipython/issues/609>`_: Implement controls in the Kernel panel section |
|
253 | 253 | * `611 <https://github.com/ipython/ipython/issues/611>`_: Add kernel status widget back to notebook |
|
254 | 254 | * `610 <https://github.com/ipython/ipython/issues/610>`_: Implement controls in the Cell section panel |
|
255 | 255 | * `612 <https://github.com/ipython/ipython/issues/612>`_: Implement Help panel section |
|
256 | 256 | * `621 <https://github.com/ipython/ipython/issues/621>`_: [qtconsole] on windows xp, cannot PageUp more than once |
|
257 | 257 | * `616 <https://github.com/ipython/ipython/issues/616>`_: Store exit status of last command |
|
258 | 258 | * `605 <https://github.com/ipython/ipython/issues/605>`_: Users should be able to open different notebooks in the cwd |
|
259 | 259 | * `302 <https://github.com/ipython/ipython/issues/302>`_: Users should see a consistent behavior in the Out prompt in the html notebook |
|
260 | 260 | * `435 <https://github.com/ipython/ipython/issues/435>`_: Notebook should not import anything by default |
|
261 | 261 | * `595 <https://github.com/ipython/ipython/issues/595>`_: qtconsole command issue |
|
262 | 262 | * `588 <https://github.com/ipython/ipython/issues/588>`_: ipython-qtconsole uses 100% CPU |
|
263 | 263 | * `586 <https://github.com/ipython/ipython/issues/586>`_: ? + plot() Command B0rks QTConsole Strangely |
|
264 | 264 | * `585 <https://github.com/ipython/ipython/issues/585>`_: %pdoc throws Errors for classes without __init__ or docstring |
|
265 | 265 | * `584 <https://github.com/ipython/ipython/issues/584>`_: %pdoc throws TypeError |
|
266 | 266 | * `580 <https://github.com/ipython/ipython/issues/580>`_: Client instantiation AssertionError |
|
267 | 267 | * `569 <https://github.com/ipython/ipython/issues/569>`_: UnicodeDecodeError during startup |
|
268 | 268 | * `572 <https://github.com/ipython/ipython/issues/572>`_: Indented command hits error |
|
269 | 269 | * `573 <https://github.com/ipython/ipython/issues/573>`_: -wthread breaks indented top-level statements |
|
270 | 270 | * `570 <https://github.com/ipython/ipython/issues/570>`_: "--pylab inline" vs. "--pylab=inline" |
|
271 | 271 | * `566 <https://github.com/ipython/ipython/issues/566>`_: Can't use exec_file in config file |
|
272 | 272 | * `562 <https://github.com/ipython/ipython/issues/562>`_: update docs to reflect '--args=values' |
|
273 | 273 | * `558 <https://github.com/ipython/ipython/issues/558>`_: triple quote and %s at beginning of line |
|
274 | 274 | * `554 <https://github.com/ipython/ipython/issues/554>`_: Update 0.11 docs to explain Qt console and how to do a clean install |
|
275 | 275 | * `553 <https://github.com/ipython/ipython/issues/553>`_: embed() fails if config files not installed |
|
276 | 276 | * `8 <https://github.com/ipython/ipython/issues/8>`_: Ensure %gui qt works with new Mayavi and pylab |
|
277 | 277 | * `269 <https://github.com/ipython/ipython/issues/269>`_: Provide compatibility api for IPython.Shell().start().mainloop() |
|
278 | 278 | * `66 <https://github.com/ipython/ipython/issues/66>`_: Update the main What's New document to reflect work on 0.11 |
|
279 | 279 | * `549 <https://github.com/ipython/ipython/issues/549>`_: Don't check for 'linux2' value in sys.platform |
|
280 | 280 | * `505 <https://github.com/ipython/ipython/issues/505>`_: Qt windows created within imported functions won't show() |
|
281 | 281 | * `545 <https://github.com/ipython/ipython/issues/545>`_: qtconsole ignores exec_lines |
|
282 | 282 | * `371 <https://github.com/ipython/ipython/issues/371>`_: segfault in qtconsole when kernel quits |
|
283 | 283 | * `377 <https://github.com/ipython/ipython/issues/377>`_: Failure: error (nothing to repeat) |
|
284 | 284 | * `544 <https://github.com/ipython/ipython/issues/544>`_: Ipython qtconsole pylab config issue. |
|
285 | 285 | * `543 <https://github.com/ipython/ipython/issues/543>`_: RuntimeError in completer |
|
286 | 286 | * `440 <https://github.com/ipython/ipython/issues/440>`_: %run filename autocompletion "The kernel heartbeat has been inactive ... " error |
|
287 | 287 | * `541 <https://github.com/ipython/ipython/issues/541>`_: log_level is broken in the ipython Application |
|
288 | 288 | * `369 <https://github.com/ipython/ipython/issues/369>`_: windows source install doesn't create scripts correctly |
|
289 | 289 | * `351 <https://github.com/ipython/ipython/issues/351>`_: Make sure that the Windows installer handles the top-level IPython scripts. |
|
290 | 290 | * `512 <https://github.com/ipython/ipython/issues/512>`_: Two displayhooks in zmq |
|
291 | 291 | * `340 <https://github.com/ipython/ipython/issues/340>`_: Make sure that the Windows HPC scheduler support is working for 0.11 |
|
292 | 292 | * `98 <https://github.com/ipython/ipython/issues/98>`_: Should be able to get help on an object mid-command |
|
293 | 293 | * `529 <https://github.com/ipython/ipython/issues/529>`_: unicode problem in qtconsole for windows |
|
294 | 294 | * `476 <https://github.com/ipython/ipython/issues/476>`_: Separate input area in Qt Console |
|
295 | 295 | * `175 <https://github.com/ipython/ipython/issues/175>`_: Qt console needs configuration support |
|
296 | 296 | * `156 <https://github.com/ipython/ipython/issues/156>`_: Key history lost when debugging program crash |
|
297 | 297 | * `470 <https://github.com/ipython/ipython/issues/470>`_: decorator: uses deprecated features |
|
298 | 298 | * `30 <https://github.com/ipython/ipython/issues/30>`_: readline in OS X does not have correct key bindings |
|
299 | 299 | * `503 <https://github.com/ipython/ipython/issues/503>`_: merge IPython.parallel.streamsession and IPython.zmq.session |
|
300 | 300 | * `456 <https://github.com/ipython/ipython/issues/456>`_: pathname in document punctuated by dots not slashes |
|
301 | 301 | * `451 <https://github.com/ipython/ipython/issues/451>`_: Allow switching the default image format for inline mpl backend |
|
302 | 302 | * `79 <https://github.com/ipython/ipython/issues/79>`_: Implement more robust handling of config stages in Application |
|
303 | 303 | * `522 <https://github.com/ipython/ipython/issues/522>`_: Encoding problems |
|
304 | 304 | * `524 <https://github.com/ipython/ipython/issues/524>`_: otool should not be unconditionally called on osx |
|
305 | 305 | * `523 <https://github.com/ipython/ipython/issues/523>`_: Get profile and config file inheritance working |
|
306 | 306 | * `519 <https://github.com/ipython/ipython/issues/519>`_: qtconsole --pure: "TypeError: string indices must be integers, not str" |
|
307 | 307 | * `516 <https://github.com/ipython/ipython/issues/516>`_: qtconsole --pure: "KeyError: 'ismagic'" |
|
308 | 308 | * `520 <https://github.com/ipython/ipython/issues/520>`_: qtconsole --pure: "TypeError: string indices must be integers, not str" |
|
309 | 309 | * `450 <https://github.com/ipython/ipython/issues/450>`_: resubmitted tasks sometimes stuck as pending |
|
310 | 310 | * `518 <https://github.com/ipython/ipython/issues/518>`_: JSON serialization problems with ObjectId type (MongoDB) |
|
311 | 311 | * `178 <https://github.com/ipython/ipython/issues/178>`_: Channels should be named for their function, not their socket type |
|
312 | 312 | * `515 <https://github.com/ipython/ipython/issues/515>`_: [ipcluster] termination on os x |
|
313 | 313 | * `510 <https://github.com/ipython/ipython/issues/510>`_: qtconsole: indentation problem printing numpy arrays |
|
314 | 314 | * `508 <https://github.com/ipython/ipython/issues/508>`_: "AssertionError: Missing message part." in ipython-qtconsole --pure |
|
315 | 315 | * `499 <https://github.com/ipython/ipython/issues/499>`_: "ZMQError: Interrupted system call" when saving inline figure |
|
316 | 316 | * `426 <https://github.com/ipython/ipython/issues/426>`_: %edit magic fails in qtconsole |
|
317 | 317 | * `497 <https://github.com/ipython/ipython/issues/497>`_: Don't show info from .pyd files |
|
318 | 318 | * `493 <https://github.com/ipython/ipython/issues/493>`_: QFont::setPointSize: Point size <= 0 (0), must be greater than 0 |
|
319 | 319 | * `489 <https://github.com/ipython/ipython/issues/489>`_: UnicodeEncodeError in qt.svg.save_svg |
|
320 | 320 | * `458 <https://github.com/ipython/ipython/issues/458>`_: embed() doesn't load default config |
|
321 | 321 | * `488 <https://github.com/ipython/ipython/issues/488>`_: Using IPython with RubyPython leads to problems with IPython.parallel.client.client.Client.__init() |
|
322 | 322 | * `401 <https://github.com/ipython/ipython/issues/401>`_: Race condition when running lbview.apply() fast multiple times in loop |
|
323 | 323 | * `168 <https://github.com/ipython/ipython/issues/168>`_: Scrub Launchpad links from code, docs |
|
324 | 324 | * `141 <https://github.com/ipython/ipython/issues/141>`_: garbage collection problem (revisited) |
|
325 | 325 | * `59 <https://github.com/ipython/ipython/issues/59>`_: test_magic.test_obj_del fails on win32 |
|
326 | 326 | * `457 <https://github.com/ipython/ipython/issues/457>`_: Backgrounded Tasks not Allowed? (but easy to slip by . . .) |
|
327 | 327 | * `297 <https://github.com/ipython/ipython/issues/297>`_: Shouldn't use pexpect for subprocesses in in-process terminal frontend |
|
328 | 328 | * `110 <https://github.com/ipython/ipython/issues/110>`_: magic to return exit status |
|
329 | 329 | * `473 <https://github.com/ipython/ipython/issues/473>`_: OSX readline detection fails in the debugger |
|
330 | 330 | * `466 <https://github.com/ipython/ipython/issues/466>`_: tests fail without unicode filename support |
|
331 | 331 | * `468 <https://github.com/ipython/ipython/issues/468>`_: iptest script has 0 exit code even when tests fail |
|
332 | 332 | * `465 <https://github.com/ipython/ipython/issues/465>`_: client.db_query() behaves different with SQLite and MongoDB |
|
333 | 333 | * `467 <https://github.com/ipython/ipython/issues/467>`_: magic_install_default_config test fails when there is no .ipython directory |
|
334 | 334 | * `463 <https://github.com/ipython/ipython/issues/463>`_: IPYTHON_DIR (and IPYTHONDIR) don't expand tilde to '~' directory |
|
335 | 335 | * `446 <https://github.com/ipython/ipython/issues/446>`_: Test machinery is imported at normal runtime |
|
336 | 336 | * `438 <https://github.com/ipython/ipython/issues/438>`_: Users should be able to use Up/Down for cell navigation |
|
337 | 337 | * `439 <https://github.com/ipython/ipython/issues/439>`_: Users should be able to copy notebook input and output |
|
338 | 338 | * `291 <https://github.com/ipython/ipython/issues/291>`_: Rename special display methods and put them lower in priority than display functions |
|
339 | 339 | * `447 <https://github.com/ipython/ipython/issues/447>`_: Instantiating classes without __init__ function causes kernel to crash |
|
340 | 340 | * `444 <https://github.com/ipython/ipython/issues/444>`_: Ctrl + t in WxIPython Causes Unexpected Behavior |
|
341 | 341 | * `445 <https://github.com/ipython/ipython/issues/445>`_: qt and console Based Startup Errors |
|
342 | 342 | * `428 <https://github.com/ipython/ipython/issues/428>`_: ipcluster doesn't handle stale pid info well |
|
343 | 343 | * `434 <https://github.com/ipython/ipython/issues/434>`_: 10.0.2 seg fault with rpy2 |
|
344 | 344 | * `441 <https://github.com/ipython/ipython/issues/441>`_: Allow running a block of code in a file |
|
345 | 345 | * `432 <https://github.com/ipython/ipython/issues/432>`_: Silent request fails |
|
346 | 346 | * `409 <https://github.com/ipython/ipython/issues/409>`_: Test failure in IPython.lib |
|
347 | 347 | * `402 <https://github.com/ipython/ipython/issues/402>`_: History section of messaging spec is incorrect |
|
348 | 348 | * `88 <https://github.com/ipython/ipython/issues/88>`_: Error when inputting UTF8 CJK characters |
|
349 | 349 | * `366 <https://github.com/ipython/ipython/issues/366>`_: Ctrl-K should kill line and store it, so that Ctrl-y can yank it back |
|
350 | 350 | * `425 <https://github.com/ipython/ipython/issues/425>`_: typo in %gui magic help |
|
351 | 351 | * `304 <https://github.com/ipython/ipython/issues/304>`_: Persistent warnings if old configuration files exist |
|
352 | 352 | * `216 <https://github.com/ipython/ipython/issues/216>`_: crash of ipython when alias is used with %s and echo |
|
353 | 353 | * `412 <https://github.com/ipython/ipython/issues/412>`_: add support to automatic retry of tasks |
|
354 | 354 | * `411 <https://github.com/ipython/ipython/issues/411>`_: add support to continue tasks |
|
355 | 355 | * `417 <https://github.com/ipython/ipython/issues/417>`_: IPython should display things unsorted if it can't sort them |
|
356 | 356 | * `416 <https://github.com/ipython/ipython/issues/416>`_: wrong encode when printing unicode string |
|
357 | 357 | * `376 <https://github.com/ipython/ipython/issues/376>`_: Failing InputsplitterTest |
|
358 | 358 | * `405 <https://github.com/ipython/ipython/issues/405>`_: TraitError in traitlets.py(332) on any input |
|
359 | 359 | * `392 <https://github.com/ipython/ipython/issues/392>`_: UnicodeEncodeError on start |
|
360 | 360 | * `137 <https://github.com/ipython/ipython/issues/137>`_: sys.getfilesystemencoding return value not checked |
|
361 | 361 | * `300 <https://github.com/ipython/ipython/issues/300>`_: Users should be able to manage kernels and kernel sessions from the notebook UI |
|
362 | 362 | * `301 <https://github.com/ipython/ipython/issues/301>`_: Users should have access to working Kernel, Tabs, Edit, Help menus in the notebook |
|
363 | 363 | * `396 <https://github.com/ipython/ipython/issues/396>`_: cursor move triggers a lot of IO access |
|
364 | 364 | * `379 <https://github.com/ipython/ipython/issues/379>`_: Minor doc nit: --paging argument |
|
365 | 365 | * `399 <https://github.com/ipython/ipython/issues/399>`_: Add task queue limit in engine when load-balancing |
|
366 | 366 | * `78 <https://github.com/ipython/ipython/issues/78>`_: StringTask won't take unicode code strings |
|
367 | 367 | * `391 <https://github.com/ipython/ipython/issues/391>`_: MongoDB.add_record() does not work in 0.11dev |
|
368 | 368 | * `365 <https://github.com/ipython/ipython/issues/365>`_: newparallel on Windows |
|
369 | 369 | * `386 <https://github.com/ipython/ipython/issues/386>`_: FAIL: test that pushed functions have access to globals |
|
370 | 370 | * `387 <https://github.com/ipython/ipython/issues/387>`_: Interactively defined functions can't access user namespace |
|
371 | 371 | * `118 <https://github.com/ipython/ipython/issues/118>`_: Snow Leopard ipy_vimserver POLL error |
|
372 | 372 | * `394 <https://github.com/ipython/ipython/issues/394>`_: System escape interpreted in multi-line string |
|
373 | 373 | * `26 <https://github.com/ipython/ipython/issues/26>`_: find_job_cmd is too hasty to fail on Windows |
|
374 | 374 | * `368 <https://github.com/ipython/ipython/issues/368>`_: Installation instructions in dev docs are completely wrong |
|
375 | 375 | * `380 <https://github.com/ipython/ipython/issues/380>`_: qtconsole pager RST - HTML not happening consistently |
|
376 | 376 | * `367 <https://github.com/ipython/ipython/issues/367>`_: Qt console doesn't support ibus input method |
|
377 | 377 | * `375 <https://github.com/ipython/ipython/issues/375>`_: Missing libraries cause ImportError in tests |
|
378 | 378 | * `71 <https://github.com/ipython/ipython/issues/71>`_: temp file errors in iptest IPython.core |
|
379 | 379 | * `350 <https://github.com/ipython/ipython/issues/350>`_: Decide how to handle displayhook being triggered multiple times |
|
380 | 380 | * `360 <https://github.com/ipython/ipython/issues/360>`_: Remove `runlines` method |
|
381 | 381 | * `125 <https://github.com/ipython/ipython/issues/125>`_: Exec lines in config should not contribute to line numbering or history |
|
382 | 382 | * `20 <https://github.com/ipython/ipython/issues/20>`_: Robust readline support on OS X's builtin Python |
|
383 | 383 | * `147 <https://github.com/ipython/ipython/issues/147>`_: On Windows, %page is being too restrictive to split line by \r\n only |
|
384 | 384 | * `326 <https://github.com/ipython/ipython/issues/326>`_: Update docs and examples for parallel stuff to reflect movement away from Twisted |
|
385 | 385 | * `341 <https://github.com/ipython/ipython/issues/341>`_: FIx Parallel Magics for newparallel |
|
386 | 386 | * `338 <https://github.com/ipython/ipython/issues/338>`_: Usability improvements to Qt console |
|
387 | * `142 <https://github.com/ipython/ipython/issues/142>`_: unexpected auto-indenting when varibles names that start with 'pass' | |
|
387 | * `142 <https://github.com/ipython/ipython/issues/142>`_: unexpected auto-indenting when variables names that start with 'pass' | |
|
388 | 388 | * `296 <https://github.com/ipython/ipython/issues/296>`_: Automatic PDB via %pdb doesn't work |
|
389 | 389 | * `337 <https://github.com/ipython/ipython/issues/337>`_: exit( and quit( in Qt console produces phantom signature/docstring popup, even though quit() or exit() raises NameError |
|
390 | 390 | * `318 <https://github.com/ipython/ipython/issues/318>`_: %debug broken in master: invokes missing save_history() method |
|
391 | 391 | * `307 <https://github.com/ipython/ipython/issues/307>`_: lines ending with semicolon should not go to cache |
|
392 | 392 | * `104 <https://github.com/ipython/ipython/issues/104>`_: have ipengine run start-up scripts before registering with the controller |
|
393 | 393 | * `33 <https://github.com/ipython/ipython/issues/33>`_: The skip_doctest decorator is failing to work on Shell.MatplotlibShellBase.magic_run |
|
394 | 394 | * `336 <https://github.com/ipython/ipython/issues/336>`_: Missing figure development/figs/iopubfade.png for docs |
|
395 | 395 | * `49 <https://github.com/ipython/ipython/issues/49>`_: %clear should also delete _NN references and Out[NN] ones |
|
396 | 396 | * `335 <https://github.com/ipython/ipython/issues/335>`_: using setuptools installs every script twice |
|
397 | 397 | * `306 <https://github.com/ipython/ipython/issues/306>`_: multiline strings at end of input cause noop |
|
398 | 398 | * `327 <https://github.com/ipython/ipython/issues/327>`_: PyPy compatibility |
|
399 | 399 | * `328 <https://github.com/ipython/ipython/issues/328>`_: %run script.ipy raises "ERROR! Session/line number was not unique in database." |
|
400 | 400 | * `7 <https://github.com/ipython/ipython/issues/7>`_: Update the changes doc to reflect the kernel config work |
|
401 | 401 | * `303 <https://github.com/ipython/ipython/issues/303>`_: Users should be able to scroll a notebook w/o moving the menu/buttons |
|
402 | 402 | * `322 <https://github.com/ipython/ipython/issues/322>`_: Embedding an interactive IPython shell |
|
403 | 403 | * `321 <https://github.com/ipython/ipython/issues/321>`_: %debug broken in master |
|
404 | 404 | * `287 <https://github.com/ipython/ipython/issues/287>`_: Crash when using %macros in sqlite-history branch |
|
405 | 405 | * `55 <https://github.com/ipython/ipython/issues/55>`_: Can't edit files whose names begin with numbers |
|
406 | 406 | * `284 <https://github.com/ipython/ipython/issues/284>`_: In variable no longer works in 0.11 |
|
407 | 407 | * `92 <https://github.com/ipython/ipython/issues/92>`_: Using multiprocessing module crashes parallel IPython |
|
408 | 408 | * `262 <https://github.com/ipython/ipython/issues/262>`_: Fail to recover history after force-kill. |
|
409 | 409 | * `320 <https://github.com/ipython/ipython/issues/320>`_: Tab completing re.search objects crashes IPython |
|
410 | 410 | * `317 <https://github.com/ipython/ipython/issues/317>`_: IPython.kernel: parallel map issues |
|
411 | 411 | * `197 <https://github.com/ipython/ipython/issues/197>`_: ipython-qtconsole unicode problem in magic ls |
|
412 | 412 | * `305 <https://github.com/ipython/ipython/issues/305>`_: more readline shortcuts in qtconsole |
|
413 | 413 | * `314 <https://github.com/ipython/ipython/issues/314>`_: Multi-line, multi-block cells can't be executed. |
|
414 | 414 | * `308 <https://github.com/ipython/ipython/issues/308>`_: Test suite should set sqlite history to work in :memory: |
|
415 | 415 | * `202 <https://github.com/ipython/ipython/issues/202>`_: Matplotlib native 'MacOSX' backend broken in '-pylab' mode |
|
416 | 416 | * `196 <https://github.com/ipython/ipython/issues/196>`_: IPython can't deal with unicode file name. |
|
417 | 417 | * `25 <https://github.com/ipython/ipython/issues/25>`_: unicode bug - encoding input |
|
418 | 418 | * `290 <https://github.com/ipython/ipython/issues/290>`_: try/except/else clauses can't be typed, code input stops too early. |
|
419 | 419 | * `43 <https://github.com/ipython/ipython/issues/43>`_: Implement SSH support in ipcluster |
|
420 | 420 | * `6 <https://github.com/ipython/ipython/issues/6>`_: Update the Sphinx docs for the new ipcluster |
|
421 | 421 | * `9 <https://github.com/ipython/ipython/issues/9>`_: Getting "DeadReferenceError: Calling Stale Broker" after ipcontroller restart |
|
422 | 422 | * `132 <https://github.com/ipython/ipython/issues/132>`_: Ipython prevent south from working |
|
423 | 423 | * `27 <https://github.com/ipython/ipython/issues/27>`_: generics.complete_object broken |
|
424 | 424 | * `60 <https://github.com/ipython/ipython/issues/60>`_: Improve absolute import management for iptest.py |
|
425 | 425 | * `31 <https://github.com/ipython/ipython/issues/31>`_: Issues in magic_whos code |
|
426 | 426 | * `52 <https://github.com/ipython/ipython/issues/52>`_: Document testing process better |
|
427 | 427 | * `44 <https://github.com/ipython/ipython/issues/44>`_: Merge history from multiple sessions |
|
428 | 428 | * `182 <https://github.com/ipython/ipython/issues/182>`_: ipython q4thread in version 10.1 not starting properly |
|
429 | 429 | * `143 <https://github.com/ipython/ipython/issues/143>`_: Ipython.gui.wx.ipython_view.IPShellWidget: ignores user*_ns arguments |
|
430 | 430 | * `127 <https://github.com/ipython/ipython/issues/127>`_: %edit does not work on filenames consisted of pure numbers |
|
431 | 431 | * `126 <https://github.com/ipython/ipython/issues/126>`_: Can't transfer command line argument to script |
|
432 | 432 | * `28 <https://github.com/ipython/ipython/issues/28>`_: Offer finer control for initialization of input streams |
|
433 | 433 | * `58 <https://github.com/ipython/ipython/issues/58>`_: ipython change char '0xe9' to 4 spaces |
|
434 | 434 | * `68 <https://github.com/ipython/ipython/issues/68>`_: Problems with Control-C stopping ipcluster on Windows/Python2.6 |
|
435 | 435 | * `24 <https://github.com/ipython/ipython/issues/24>`_: ipcluster does not start all the engines |
|
436 | 436 | * `240 <https://github.com/ipython/ipython/issues/240>`_: Incorrect method displayed in %psource |
|
437 | 437 | * `120 <https://github.com/ipython/ipython/issues/120>`_: inspect.getsource fails for functions defined on command line |
|
438 | 438 | * `212 <https://github.com/ipython/ipython/issues/212>`_: IPython ignores exceptions in the first evaulation of class attrs |
|
439 | 439 | * `108 <https://github.com/ipython/ipython/issues/108>`_: ipython disables python logger |
|
440 | 440 | * `100 <https://github.com/ipython/ipython/issues/100>`_: Overzealous introspection |
|
441 | 441 | * `18 <https://github.com/ipython/ipython/issues/18>`_: %cpaste freeze sync frontend |
|
442 | 442 | * `200 <https://github.com/ipython/ipython/issues/200>`_: Unicode error when starting ipython in a folder with non-ascii path |
|
443 | 443 | * `130 <https://github.com/ipython/ipython/issues/130>`_: Deadlock when importing a module that creates an IPython client |
|
444 | 444 | * `134 <https://github.com/ipython/ipython/issues/134>`_: multline block scrolling |
|
445 | 445 | * `46 <https://github.com/ipython/ipython/issues/46>`_: Input to %timeit is not preparsed |
|
446 | 446 | * `285 <https://github.com/ipython/ipython/issues/285>`_: ipcluster local -n 4 fails |
|
447 | 447 | * `205 <https://github.com/ipython/ipython/issues/205>`_: In the Qt console, Tab should insert 4 spaces when not completing |
|
448 | 448 | * `145 <https://github.com/ipython/ipython/issues/145>`_: Bug on MSW systems: idle can not be set as default IPython editor. Fix Suggested. |
|
449 | 449 | * `77 <https://github.com/ipython/ipython/issues/77>`_: ipython oops in cygwin |
|
450 | 450 | * `121 <https://github.com/ipython/ipython/issues/121>`_: If plot windows are closed via window controls, no more plotting is possible. |
|
451 | 451 | * `111 <https://github.com/ipython/ipython/issues/111>`_: Iterator version of TaskClient.map() that returns results as they become available |
|
452 | 452 | * `109 <https://github.com/ipython/ipython/issues/109>`_: WinHPCLauncher is a hard dependency that causes errors in the test suite |
|
453 | 453 | * `86 <https://github.com/ipython/ipython/issues/86>`_: Make IPython work with multiprocessing |
|
454 | 454 | * `15 <https://github.com/ipython/ipython/issues/15>`_: Implement SGE support in ipcluster |
|
455 | 455 | * `3 <https://github.com/ipython/ipython/issues/3>`_: Implement PBS support in ipcluster |
|
456 | 456 | * `53 <https://github.com/ipython/ipython/issues/53>`_: Internal Python error in the inspect module |
|
457 | 457 | * `74 <https://github.com/ipython/ipython/issues/74>`_: Manager() [from multiprocessing module] hangs ipythonx but not ipython |
|
458 | 458 | * `51 <https://github.com/ipython/ipython/issues/51>`_: Out not working with ipythonx |
|
459 | 459 | * `201 <https://github.com/ipython/ipython/issues/201>`_: use session.send throughout zmq code |
|
460 | 460 | * `115 <https://github.com/ipython/ipython/issues/115>`_: multiline specials not defined in 0.11 branch |
|
461 | 461 | * `93 <https://github.com/ipython/ipython/issues/93>`_: when looping, cursor appears at leftmost point in newline |
|
462 | 462 | * `133 <https://github.com/ipython/ipython/issues/133>`_: whitespace after Source introspection |
|
463 | 463 | * `50 <https://github.com/ipython/ipython/issues/50>`_: Ctrl-C with -gthread on Windows, causes uncaught IOError |
|
464 | 464 | * `65 <https://github.com/ipython/ipython/issues/65>`_: Do not use .message attributes in exceptions, deprecated in 2.6 |
|
465 | 465 | * `76 <https://github.com/ipython/ipython/issues/76>`_: syntax error when raise is inside except process |
|
466 | 466 | * `107 <https://github.com/ipython/ipython/issues/107>`_: bdist_rpm causes traceback looking for a non-existant file |
|
467 | 467 | * `113 <https://github.com/ipython/ipython/issues/113>`_: initial magic ? (question mark) fails before wildcard |
|
468 | 468 | * `128 <https://github.com/ipython/ipython/issues/128>`_: Pdb instance has no attribute 'curframe' |
|
469 | 469 | * `139 <https://github.com/ipython/ipython/issues/139>`_: running with -pylab pollutes namespace |
|
470 | 470 | * `140 <https://github.com/ipython/ipython/issues/140>`_: malloc error during tab completion of numpy array member functions starting with 'c' |
|
471 | 471 | * `153 <https://github.com/ipython/ipython/issues/153>`_: ipy_vimserver traceback on Windows |
|
472 | 472 | * `154 <https://github.com/ipython/ipython/issues/154>`_: using ipython in Slicer3 show how os.environ['HOME'] is not defined |
|
473 | 473 | * `185 <https://github.com/ipython/ipython/issues/185>`_: show() blocks in pylab mode with ipython 0.10.1 |
|
474 | 474 | * `189 <https://github.com/ipython/ipython/issues/189>`_: Crash on tab completion |
|
475 | 475 | * `274 <https://github.com/ipython/ipython/issues/274>`_: bashism in sshx.sh |
|
476 | 476 | * `276 <https://github.com/ipython/ipython/issues/276>`_: Calling `sip.setapi` does not work if app has already imported from PyQt4 |
|
477 | 477 | * `277 <https://github.com/ipython/ipython/issues/277>`_: matplotlib.image imgshow from 10.1 segfault |
|
478 | 478 | * `288 <https://github.com/ipython/ipython/issues/288>`_: Incorrect docstring in zmq/kernelmanager.py |
|
479 | 479 | * `286 <https://github.com/ipython/ipython/issues/286>`_: Fix IPython.Shell compatibility layer |
|
480 | 480 | * `99 <https://github.com/ipython/ipython/issues/99>`_: blank lines in history |
|
481 | 481 | * `129 <https://github.com/ipython/ipython/issues/129>`_: psearch: TypeError: expected string or buffer |
|
482 | 482 | * `190 <https://github.com/ipython/ipython/issues/190>`_: Add option to format float point output |
|
483 | 483 | * `246 <https://github.com/ipython/ipython/issues/246>`_: Application not conforms XDG Base Directory Specification |
|
484 | 484 | * `48 <https://github.com/ipython/ipython/issues/48>`_: IPython should follow the XDG Base Directory spec for configuration |
|
485 | 485 | * `176 <https://github.com/ipython/ipython/issues/176>`_: Make client-side history persistence readline-independent |
|
486 | 486 | * `279 <https://github.com/ipython/ipython/issues/279>`_: Backtraces when using ipdb do not respect -colour LightBG setting |
|
487 | 487 | * `119 <https://github.com/ipython/ipython/issues/119>`_: Broken type filter in magic_who_ls |
|
488 | 488 | * `271 <https://github.com/ipython/ipython/issues/271>`_: Intermittent problem with print output in Qt console. |
|
489 | 489 | * `270 <https://github.com/ipython/ipython/issues/270>`_: Small typo in IPython developerβs guide |
|
490 | 490 | * `166 <https://github.com/ipython/ipython/issues/166>`_: Add keyboard accelerators to Qt close dialog |
|
491 | 491 | * `173 <https://github.com/ipython/ipython/issues/173>`_: asymmetrical ctrl-A/ctrl-E behavior in multiline |
|
492 | 492 | * `45 <https://github.com/ipython/ipython/issues/45>`_: Autosave history for robustness |
|
493 | 493 | * `162 <https://github.com/ipython/ipython/issues/162>`_: make command history persist in ipythonqt |
|
494 | 494 | * `161 <https://github.com/ipython/ipython/issues/161>`_: make ipythonqt exit without dialog when exit() is called |
|
495 | 495 | * `263 <https://github.com/ipython/ipython/issues/263>`_: [ipython + numpy] Some test errors |
|
496 | 496 | * `256 <https://github.com/ipython/ipython/issues/256>`_: reset docstring ipython 0.10 |
|
497 | 497 | * `258 <https://github.com/ipython/ipython/issues/258>`_: allow caching to avoid matplotlib object references |
|
498 | 498 | * `248 <https://github.com/ipython/ipython/issues/248>`_: Can't open and read files after upgrade from 0.10 to 0.10.0 |
|
499 | 499 | * `247 <https://github.com/ipython/ipython/issues/247>`_: ipython + Stackless |
|
500 | 500 | * `245 <https://github.com/ipython/ipython/issues/245>`_: Magic save and macro missing newlines, line ranges don't match prompt numbers. |
|
501 | 501 | * `241 <https://github.com/ipython/ipython/issues/241>`_: "exit" hangs on terminal version of IPython |
|
502 | 502 | * `213 <https://github.com/ipython/ipython/issues/213>`_: ipython -pylab no longer plots interactively on 0.10.1 |
|
503 | 503 | * `4 <https://github.com/ipython/ipython/issues/4>`_: wx frontend don't display well commands output |
|
504 | 504 | * `5 <https://github.com/ipython/ipython/issues/5>`_: ls command not supported in ipythonx wx frontend |
|
505 | 505 | * `1 <https://github.com/ipython/ipython/issues/1>`_: Document winhpcjob.py and launcher.py |
|
506 | 506 | * `83 <https://github.com/ipython/ipython/issues/83>`_: Usage of testing.util.DeferredTestCase should be replace with twisted.trial.unittest.TestCase |
|
507 | 507 | * `117 <https://github.com/ipython/ipython/issues/117>`_: Redesign how Component instances are tracked and queried |
|
508 | 508 | * `47 <https://github.com/ipython/ipython/issues/47>`_: IPython.kernel.client cannot be imported inside an engine |
|
509 | 509 | * `105 <https://github.com/ipython/ipython/issues/105>`_: Refactor the task dependencies system |
|
510 | 510 | * `210 <https://github.com/ipython/ipython/issues/210>`_: 0.10.1 doc mistake - New IPython Sphinx directive error |
|
511 | 511 | * `209 <https://github.com/ipython/ipython/issues/209>`_: can't activate IPython parallel magics |
|
512 | 512 | * `206 <https://github.com/ipython/ipython/issues/206>`_: Buggy linewrap in Mac OSX Terminal |
|
513 | 513 | * `194 <https://github.com/ipython/ipython/issues/194>`_: !sudo <command> displays password in plain text |
|
514 | 514 | * `186 <https://github.com/ipython/ipython/issues/186>`_: %edit issue under OS X 10.5 - IPython 0.10.1 |
|
515 | 515 | * `11 <https://github.com/ipython/ipython/issues/11>`_: Create a daily build PPA for ipython |
|
516 | 516 | * `144 <https://github.com/ipython/ipython/issues/144>`_: logo missing from sphinx docs |
|
517 | 517 | * `181 <https://github.com/ipython/ipython/issues/181>`_: cls command does not work on windows |
|
518 | 518 | * `169 <https://github.com/ipython/ipython/issues/169>`_: Kernel can only be bound to localhost |
|
519 | 519 | * `36 <https://github.com/ipython/ipython/issues/36>`_: tab completion does not escape () |
|
520 | 520 | * `177 <https://github.com/ipython/ipython/issues/177>`_: Report tracebacks of interactively entered input |
|
521 | 521 | * `148 <https://github.com/ipython/ipython/issues/148>`_: dictionary having multiple keys having frozenset fails to print on IPython |
|
522 | 522 | * `160 <https://github.com/ipython/ipython/issues/160>`_: magic_gui throws TypeError when gui magic is used |
|
523 | 523 | * `150 <https://github.com/ipython/ipython/issues/150>`_: History entries ending with parentheses corrupt command line on OS X 10.6.4 |
|
524 | 524 | * `146 <https://github.com/ipython/ipython/issues/146>`_: -ipythondir - using an alternative .ipython dir for rc type stuff |
|
525 | 525 | * `114 <https://github.com/ipython/ipython/issues/114>`_: Interactive strings get mangled with "_ip.magic" |
|
526 | 526 | * `135 <https://github.com/ipython/ipython/issues/135>`_: crash on invalid print |
|
527 | 527 | * `69 <https://github.com/ipython/ipython/issues/69>`_: Usage of "mycluster" profile in docs and examples |
|
528 | 528 | * `37 <https://github.com/ipython/ipython/issues/37>`_: Fix colors in output of ResultList on Windows |
@@ -1,1883 +1,1883 b'' | |||
|
1 | 1 | .. _issues_list_100: |
|
2 | 2 | |
|
3 | 3 | Issues closed in the 1.0 development cycle |
|
4 | 4 | ========================================== |
|
5 | 5 | |
|
6 | 6 | |
|
7 | 7 | Issues closed in 1.2 |
|
8 | 8 | -------------------- |
|
9 | 9 | |
|
10 | 10 | GitHub stats for 2013/09/09 - 2014/02/21 |
|
11 | 11 | |
|
12 | 12 | These lists are automatically generated, and may be incomplete or contain duplicates. |
|
13 | 13 | |
|
14 | 14 | The following 13 authors contributed 84 commits. |
|
15 | 15 | |
|
16 | 16 | * Benjamin Ragan-Kelley |
|
17 | 17 | * Daryl Herzmann |
|
18 | 18 | * Doug Blank |
|
19 | 19 | * Fernando Perez |
|
20 | 20 | * James Porter |
|
21 | 21 | * Juergen Hasch |
|
22 | 22 | * Julian Taylor |
|
23 | 23 | * Kyle Kelley |
|
24 | 24 | * Lawrence Fu |
|
25 | 25 | * Matthias Bussonnier |
|
26 | 26 | * Paul Ivanov |
|
27 | 27 | * Pascal Schetelat |
|
28 | 28 | * Puneeth Chaganti |
|
29 | 29 | * Takeshi Kanmae |
|
30 | 30 | * Thomas Kluyver |
|
31 | 31 | |
|
32 | 32 | We closed a total of 55 issues, 38 pull requests and 17 regular issues; |
|
33 | 33 | this is the full list (generated with the script :file:`tools/github_stats.py`): |
|
34 | 34 | |
|
35 | 35 | Pull Requests (38): |
|
36 | 36 | |
|
37 | 37 | 1.2.1: |
|
38 | 38 | |
|
39 | 39 | * :ghpull:`4372`: Don't assume that SyntaxTB is always called with a SyntaxError |
|
40 | 40 | * :ghpull:`5166`: remove mktemp usage |
|
41 | 41 | * :ghpull:`5163`: Simplify implementation of TemporaryWorkingDirectory. |
|
42 | 42 | * :ghpull:`5105`: add index to format to support py2.6 |
|
43 | 43 | |
|
44 | 44 | 1.2.0: |
|
45 | 45 | |
|
46 | 46 | * :ghpull:`4972`: Work around problem in doctest discovery in Python 3.4 with PyQt |
|
47 | 47 | * :ghpull:`4934`: `ipython profile create` respects `--ipython-dir` |
|
48 | 48 | * :ghpull:`4845`: Add Origin Checking. |
|
49 | 49 | * :ghpull:`4928`: use importlib.machinery when available |
|
50 | 50 | * :ghpull:`4849`: Various unicode fixes (mostly on Windows) |
|
51 | 51 | * :ghpull:`4880`: set profile name from profile_dir |
|
52 | 52 | * :ghpull:`4908`: detect builtin docstrings in oinspect |
|
53 | 53 | * :ghpull:`4909`: sort dictionary keys before comparison, ordering is not guaranteed |
|
54 | 54 | * :ghpull:`4903`: use https for all embeds |
|
55 | 55 | * :ghpull:`4868`: Static path fixes |
|
56 | 56 | * :ghpull:`4820`: fix regex for cleaning old logs with ipcluster |
|
57 | 57 | * :ghpull:`4840`: Error in Session.send_raw() |
|
58 | 58 | * :ghpull:`4762`: whitelist alphanumeric characters for cookie_name |
|
59 | 59 | * :ghpull:`4748`: fix race condition in profiledir creation. |
|
60 | 60 | * :ghpull:`4720`: never use ssh multiplexer in tunnels |
|
61 | 61 | * :ghpull:`4738`: don't inject help into user_ns |
|
62 | 62 | * :ghpull:`4722`: allow purging local results as long as they are not outstanding |
|
63 | 63 | * :ghpull:`4668`: Make non-ASCII docstring unicode |
|
64 | 64 | * :ghpull:`4639`: Minor import fix to get qtconsole with --pylab=qt working |
|
65 | 65 | * :ghpull:`4453`: Play nice with App Nap |
|
66 | 66 | * :ghpull:`4609`: Fix bytes regex for Python 3. |
|
67 | 67 | * :ghpull:`4488`: fix typo in message spec doc |
|
68 | 68 | * :ghpull:`4346`: getpass() on Windows & Python 2 needs bytes prompt |
|
69 | 69 | * :ghpull:`4230`: Switch correctly to the user's default matplotlib backend after inline. |
|
70 | 70 | * :ghpull:`4214`: engine ID metadata should be unicode, not bytes |
|
71 | 71 | * :ghpull:`4232`: no highlight if no language specified |
|
72 | 72 | * :ghpull:`4218`: Fix display of SyntaxError when .py file is modified |
|
73 | 73 | * :ghpull:`4217`: avoid importing numpy at the module level |
|
74 | 74 | * :ghpull:`4213`: fixed dead link in examples/notebooks readme to Part 3 |
|
75 | 75 | * :ghpull:`4183`: ESC should be handled by CM if tooltip is not on |
|
76 | 76 | * :ghpull:`4193`: Update for #3549: Append Firefox overflow-x fix |
|
77 | 77 | * :ghpull:`4205`: use TextIOWrapper when communicating with pandoc subprocess |
|
78 | 78 | * :ghpull:`4204`: remove some extraneous print statements from IPython.parallel |
|
79 | 79 | * :ghpull:`4201`: HeadingCells cannot be split or merged |
|
80 | 80 | |
|
81 | 81 | 1.2.1: |
|
82 | 82 | |
|
83 | 83 | * :ghissue:`5101`: IPython 1.2.0: notebook fail with "500 Internal Server Error" |
|
84 | 84 | |
|
85 | 85 | 1.2.0: |
|
86 | 86 | |
|
87 | 87 | * :ghissue:`4892`: IPython.qt test failure with python3.4 |
|
88 | 88 | * :ghissue:`4810`: ipcluster bug in clean_logs flag |
|
89 | 89 | * :ghissue:`4765`: missing build script for highlight.js |
|
90 | 90 | * :ghissue:`4761`: ipv6 address triggers cookie exception |
|
91 | 91 | * :ghissue:`4721`: purge_results with jobid crashing - looking for insight |
|
92 | 92 | * :ghissue:`4602`: "ipcluster stop" fails after "ipcluster start --daemonize" using python3.3 |
|
93 | 93 | * :ghissue:`3386`: Magic %paste not working in Python 3.3.2. TypeError: Type str doesn't support the buffer API |
|
94 | 94 | * :ghissue:`4485`: Incorrect info in "Messaging in IPython" documentation. |
|
95 | 95 | * :ghissue:`4351`: /parallel/apps/launcher.py error |
|
96 | 96 | * :ghissue:`4334`: NotebookApp.webapp_settings static_url_prefix causes crash |
|
97 | 97 | * :ghissue:`4039`: Celltoolbar example issue |
|
98 | 98 | * :ghissue:`4256`: IPython no longer handles unicode file names |
|
99 | 99 | * :ghissue:`4122`: Nbconvert [windows]: Inconsistent line endings in markdown cells exported to latex |
|
100 | 100 | * :ghissue:`3819`: nbconvert add extra blank line to code block on Windows. |
|
101 | 101 | * :ghissue:`4203`: remove spurious print statement from parallel annoted functions |
|
102 | 102 | * :ghissue:`4200`: Notebook: merging a heading cell and markdown cell cannot be undone |
|
103 | 103 | |
|
104 | 104 | |
|
105 | 105 | Issues closed in 1.1 |
|
106 | 106 | -------------------- |
|
107 | 107 | |
|
108 | 108 | GitHub stats for 2013/08/08 - 2013/09/09 (since 1.0) |
|
109 | 109 | |
|
110 | 110 | These lists are automatically generated, and may be incomplete or contain duplicates. |
|
111 | 111 | |
|
112 | 112 | The following 25 authors contributed 337 commits. |
|
113 | 113 | |
|
114 | 114 | * Benjamin Ragan-Kelley |
|
115 | 115 | * Bing Xia |
|
116 | 116 | * Bradley M. Froehle |
|
117 | 117 | * Brian E. Granger |
|
118 | 118 | * DamiΓ‘n Avila |
|
119 | 119 | * dhirschfeld |
|
120 | 120 | * DraΕΎen LuΔanin |
|
121 | 121 | * gmbecker |
|
122 | 122 | * Jake Vanderplas |
|
123 | 123 | * Jason Grout |
|
124 | 124 | * Jonathan Frederic |
|
125 | 125 | * Kevin Burke |
|
126 | 126 | * Kyle Kelley |
|
127 | 127 | * Matt Henderson |
|
128 | 128 | * Matthew Brett |
|
129 | 129 | * Matthias Bussonnier |
|
130 | 130 | * Pankaj Pandey |
|
131 | 131 | * Paul Ivanov |
|
132 | 132 | * rossant |
|
133 | 133 | * Samuel Ainsworth |
|
134 | 134 | * Stephan Rave |
|
135 | 135 | * stonebig |
|
136 | 136 | * Thomas Kluyver |
|
137 | 137 | * Yaroslav Halchenko |
|
138 | 138 | * Zachary Sailer |
|
139 | 139 | |
|
140 | 140 | |
|
141 | 141 | We closed a total of 76 issues, 58 pull requests and 18 regular issues; |
|
142 | 142 | this is the full list (generated with the script :file:`tools/github_stats.py`): |
|
143 | 143 | |
|
144 | 144 | Pull Requests (58): |
|
145 | 145 | |
|
146 | 146 | * :ghpull:`4188`: Allow user_ns trait to be None |
|
147 | 147 | * :ghpull:`4189`: always fire LOCAL_IPS.extend(PUBLIC_IPS) |
|
148 | 148 | * :ghpull:`4174`: various issues in markdown and rst templates |
|
149 | 149 | * :ghpull:`4178`: add missing data_javascript |
|
150 | 150 | * :ghpull:`4181`: nbconvert: Fix, sphinx template not removing new lines from headers |
|
151 | 151 | * :ghpull:`4043`: don't 'restore_bytes' in from_JSON |
|
152 | 152 | * :ghpull:`4163`: Fix for incorrect default encoding on Windows. |
|
153 | 153 | * :ghpull:`4136`: catch javascript errors in any output |
|
154 | 154 | * :ghpull:`4171`: add nbconvert config file when creating profiles |
|
155 | 155 | * :ghpull:`4125`: Basic exercise of `ipython [subcommand] -h` and help-all |
|
156 | 156 | * :ghpull:`4085`: nbconvert: Fix sphinx preprocessor date format string for Windows |
|
157 | 157 | * :ghpull:`4159`: don't split `.cell` and `div.cell` CSS |
|
158 | 158 | * :ghpull:`4158`: generate choices for `--gui` configurable from real mapping |
|
159 | 159 | * :ghpull:`4065`: do not include specific css in embedable one |
|
160 | 160 | * :ghpull:`4092`: nbconvert: Fix for unicode html headers, Windows + Python 2.x |
|
161 | 161 | * :ghpull:`4074`: close Client sockets if connection fails |
|
162 | 162 | * :ghpull:`4064`: Store default codemirror mode in only 1 place |
|
163 | 163 | * :ghpull:`4104`: Add way to install MathJax to a particular profile |
|
164 | 164 | * :ghpull:`4144`: help_end transformer shouldn't pick up ? in multiline string |
|
165 | 165 | * :ghpull:`4143`: update example custom.js |
|
166 | 166 | * :ghpull:`4142`: DOC: unwrap openssl line in public_server doc |
|
167 | 167 | * :ghpull:`4141`: add files with a separate `add` call in backport_pr |
|
168 | 168 | * :ghpull:`4137`: Restore autorestore option for storemagic |
|
169 | 169 | * :ghpull:`4098`: pass profile-dir instead of profile name to Kernel |
|
170 | 170 | * :ghpull:`4120`: support `input` in Python 2 kernels |
|
171 | 171 | * :ghpull:`4088`: nbconvert: Fix coalescestreams line with incorrect nesting causing strange behavior |
|
172 | 172 | * :ghpull:`4060`: only strip continuation prompts if regular prompts seen first |
|
173 | 173 | * :ghpull:`4132`: Fixed name error bug in function safe_unicode in module py3compat. |
|
174 | 174 | * :ghpull:`4121`: move test_kernel from IPython.zmq to IPython.kernel |
|
175 | 175 | * :ghpull:`4118`: ZMQ heartbeat channel: catch EINTR exceptions and continue. |
|
176 | 176 | * :ghpull:`4054`: use unicode for HTML export |
|
177 | 177 | * :ghpull:`4106`: fix a couple of default block values |
|
178 | 178 | * :ghpull:`4115`: Update docs on declaring a magic function |
|
179 | 179 | * :ghpull:`4101`: restore accidentally removed EngineError |
|
180 | 180 | * :ghpull:`4096`: minor docs changes |
|
181 | 181 | * :ghpull:`4056`: respect `pylab_import_all` when `--pylab` specified at the command-line |
|
182 | 182 | * :ghpull:`4091`: Make Qt console banner configurable |
|
183 | 183 | * :ghpull:`4086`: fix missing errno import |
|
184 | 184 | * :ghpull:`4030`: exclude `.git` in MANIFEST.in |
|
185 | 185 | * :ghpull:`4047`: Use istype() when checking if canned object is a dict |
|
186 | 186 | * :ghpull:`4031`: don't close_fds on Windows |
|
187 | 187 | * :ghpull:`4029`: bson.Binary moved |
|
188 | 188 | * :ghpull:`4035`: Fixed custom jinja2 templates being ignored when setting template_path |
|
189 | 189 | * :ghpull:`4026`: small doc fix in nbconvert |
|
190 | 190 | * :ghpull:`4016`: Fix IPython.start_* functions |
|
191 | 191 | * :ghpull:`4021`: Fix parallel.client.View map() on numpy arrays |
|
192 | 192 | * :ghpull:`4022`: DOC: fix links to matplotlib, notebook docs |
|
193 | 193 | * :ghpull:`4018`: Fix warning when running IPython.kernel tests |
|
194 | 194 | * :ghpull:`4019`: Test skipping without unicode paths |
|
195 | 195 | * :ghpull:`4008`: Transform code before %prun/%%prun runs |
|
196 | 196 | * :ghpull:`4014`: Fix typo in ipapp |
|
197 | 197 | * :ghpull:`3987`: get files list in backport_pr |
|
198 | 198 | * :ghpull:`3974`: nbconvert: Fix app tests on Window7 w/ Python 3.3 |
|
199 | 199 | * :ghpull:`3978`: fix `--existing` with non-localhost IP |
|
200 | 200 | * :ghpull:`3939`: minor checkpoint cleanup |
|
201 | 201 | * :ghpull:`3981`: BF: fix nbconvert rst input prompt spacing |
|
202 | 202 | * :ghpull:`3960`: Don't make sphinx a dependency for importing nbconvert |
|
203 | 203 | * :ghpull:`3973`: logging.Formatter is not new-style in 2.6 |
|
204 | 204 | |
|
205 | 205 | Issues (18): |
|
206 | 206 | |
|
207 | 207 | * :ghissue:`4024`: nbconvert markdown issues |
|
208 | 208 | * :ghissue:`4095`: Catch js error in append html in stream/pyerr |
|
209 | 209 | * :ghissue:`4156`: Specifying --gui=tk at the command line |
|
210 | 210 | * :ghissue:`3818`: nbconvert can't handle Heading with Chinese characters on Japanese Windows OS. |
|
211 | 211 | * :ghissue:`4134`: multi-line parser fails on ''' in comment, qtconsole and notebook. |
|
212 | 212 | * :ghissue:`3998`: sample custom.js needs to be updated |
|
213 | 213 | * :ghissue:`4078`: StoreMagic.autorestore not working in 1.0.0 |
|
214 | 214 | * :ghissue:`3990`: Buitlin `input` doesn't work over zmq |
|
215 | 215 | * :ghissue:`4015`: nbconvert fails to convert all the content of a notebook |
|
216 | 216 | * :ghissue:`4059`: Issues with Ellipsis literal in Python 3 |
|
217 | 217 | * :ghissue:`4103`: Wrong default argument of DirectView.clear |
|
218 | 218 | * :ghissue:`4100`: parallel.client.client references undefined error.EngineError |
|
219 | 219 | * :ghissue:`4005`: IPython.start_kernel doesn't work. |
|
220 | 220 | * :ghissue:`4020`: IPython parallel map fails on numpy arrays |
|
221 | 221 | * :ghissue:`3945`: nbconvert: commandline tests fail Win7x64 Py3.3 |
|
222 | 222 | * :ghissue:`3977`: unable to complete remote connections for two-process |
|
223 | 223 | * :ghissue:`3980`: nbconvert rst output lacks needed blank lines |
|
224 | 224 | * :ghissue:`3968`: TypeError: super() argument 1 must be type, not classobj (Python 2.6.6) |
|
225 | 225 | |
|
226 | 226 | Issues closed in 1.0 |
|
227 | 227 | -------------------- |
|
228 | 228 | |
|
229 | 229 | GitHub stats for 2012/06/30 - 2013/08/08 (since 0.13) |
|
230 | 230 | |
|
231 | 231 | These lists are automatically generated, and may be incomplete or contain duplicates. |
|
232 | 232 | |
|
233 | 233 | The following 155 authors contributed 4258 commits. |
|
234 | 234 | |
|
235 | 235 | * Aaron Meurer |
|
236 | 236 | * Adam Davis |
|
237 | 237 | * Ahmet Bakan |
|
238 | 238 | * Alberto Valverde |
|
239 | 239 | * Allen Riddell |
|
240 | 240 | * Anders HovmΓΆller |
|
241 | 241 | * Andrea Bedini |
|
242 | 242 | * Andrew Spiers |
|
243 | 243 | * Andrew Vandever |
|
244 | 244 | * Anthony Scopatz |
|
245 | 245 | * Anton Akhmerov |
|
246 | 246 | * Anton I. Sipos |
|
247 | 247 | * Antony Lee |
|
248 | 248 | * Aron Ahmadia |
|
249 | 249 | * Benedikt Sauer |
|
250 | 250 | * Benjamin Jones |
|
251 | 251 | * Benjamin Ragan-Kelley |
|
252 | 252 | * Benjie Chen |
|
253 | 253 | * Boris de Laage |
|
254 | 254 | * Brad Reisfeld |
|
255 | 255 | * Bradley M. Froehle |
|
256 | 256 | * Brian E. Granger |
|
257 | 257 | * Cameron Bates |
|
258 | 258 | * Cavendish McKay |
|
259 | 259 | * chapmanb |
|
260 | 260 | * Chris Beaumont |
|
261 | 261 | * Chris Laumann |
|
262 | 262 | * Christoph Gohlke |
|
263 | 263 | * codebraker |
|
264 | 264 | * codespaced |
|
265 | 265 | * Corran Webster |
|
266 | 266 | * DamianHeard |
|
267 | 267 | * DamiΓ‘n Avila |
|
268 | 268 | * Dan Kilman |
|
269 | 269 | * Dan McDougall |
|
270 | 270 | * Danny Staple |
|
271 | 271 | * David Hirschfeld |
|
272 | 272 | * David P. Sanders |
|
273 | 273 | * David Warde-Farley |
|
274 | 274 | * David Wolever |
|
275 | 275 | * David Wyde |
|
276 | 276 | * debjan |
|
277 | 277 | * Diane Trout |
|
278 | 278 | * dkua |
|
279 | 279 | * Dominik Dabrowski |
|
280 | 280 | * Donald Curtis |
|
281 | 281 | * DraΕΎen LuΔanin |
|
282 | 282 | * drevicko |
|
283 | 283 | * Eric O. LEBIGOT |
|
284 | 284 | * Erik M. Bray |
|
285 | 285 | * Erik Tollerud |
|
286 | 286 | * Eugene Van den Bulke |
|
287 | 287 | * Evan Patterson |
|
288 | 288 | * Fernando Perez |
|
289 | 289 | * Francesco Montesano |
|
290 | 290 | * Frank Murphy |
|
291 | 291 | * Greg Caporaso |
|
292 | 292 | * Guy Haskin Fernald |
|
293 | 293 | * guziy |
|
294 | 294 | * Hans Meine |
|
295 | 295 | * Harry Moreno |
|
296 | 296 | * henryiii |
|
297 | 297 | * Ivan Djokic |
|
298 | 298 | * Jack Feser |
|
299 | 299 | * Jake Vanderplas |
|
300 | 300 | * jakobgager |
|
301 | 301 | * James Booth |
|
302 | 302 | * Jan Schulz |
|
303 | 303 | * Jason Grout |
|
304 | 304 | * Jeff Knisley |
|
305 | 305 | * Jens Hedegaard Nielsen |
|
306 | 306 | * jeremiahbuddha |
|
307 | 307 | * Jerry Fowler |
|
308 | 308 | * Jessica B. Hamrick |
|
309 | 309 | * Jez Ng |
|
310 | 310 | * John Zwinck |
|
311 | 311 | * Jonathan Frederic |
|
312 | 312 | * Jonathan Taylor |
|
313 | 313 | * Joon Ro |
|
314 | 314 | * Joseph Lansdowne |
|
315 | 315 | * Juergen Hasch |
|
316 | 316 | * Julian Taylor |
|
317 | 317 | * Jussi Sainio |
|
318 | 318 | * JΓΆrgen Stenarson |
|
319 | 319 | * kevin |
|
320 | 320 | * klonuo |
|
321 | 321 | * Konrad Hinsen |
|
322 | 322 | * Kyle Kelley |
|
323 | 323 | * Lars Solberg |
|
324 | 324 | * Lessandro Mariano |
|
325 | 325 | * Mark Sienkiewicz at STScI |
|
326 | 326 | * Martijn Vermaat |
|
327 | 327 | * Martin Spacek |
|
328 | 328 | * Matthias Bussonnier |
|
329 | 329 | * Maxim Grechkin |
|
330 | 330 | * Maximilian Albert |
|
331 | 331 | * MercuryRising |
|
332 | 332 | * Michael Droettboom |
|
333 | 333 | * Michael Shuffett |
|
334 | 334 | * MichaΕ GΓ³rny |
|
335 | 335 | * Mikhail Korobov |
|
336 | 336 | * mr.Shu |
|
337 | 337 | * Nathan Goldbaum |
|
338 | 338 | * ocefpaf |
|
339 | 339 | * Ohad Ravid |
|
340 | 340 | * Olivier Grisel |
|
341 | 341 | * Olivier Verdier |
|
342 | 342 | * Owen Healy |
|
343 | 343 | * Pankaj Pandey |
|
344 | 344 | * Paul Ivanov |
|
345 | 345 | * Pawel Jasinski |
|
346 | 346 | * Pietro Berkes |
|
347 | 347 | * Piti Ongmongkolkul |
|
348 | 348 | * Puneeth Chaganti |
|
349 | 349 | * Rich Wareham |
|
350 | 350 | * Richard Everson |
|
351 | 351 | * Rick Lupton |
|
352 | 352 | * Rob Young |
|
353 | 353 | * Robert Kern |
|
354 | 354 | * Robert Marchman |
|
355 | 355 | * Robert McGibbon |
|
356 | 356 | * Rui Pereira |
|
357 | 357 | * Rustam Safin |
|
358 | 358 | * Ryan May |
|
359 | 359 | * s8weber |
|
360 | 360 | * Samuel Ainsworth |
|
361 | 361 | * Sean Vig |
|
362 | 362 | * Siyu Zhang |
|
363 | 363 | * Skylar Saveland |
|
364 | 364 | * slojo404 |
|
365 | 365 | * smithj1 |
|
366 | 366 | * Stefan Karpinski |
|
367 | 367 | * Stefan van der Walt |
|
368 | 368 | * Steven Silvester |
|
369 | 369 | * Takafumi Arakaki |
|
370 | 370 | * Takeshi Kanmae |
|
371 | 371 | * tcmulcahy |
|
372 | 372 | * teegaar |
|
373 | 373 | * Thomas Kluyver |
|
374 | 374 | * Thomas Robitaille |
|
375 | 375 | * Thomas Spura |
|
376 | 376 | * Thomas WeiΓschuh |
|
377 | 377 | * Timothy O'Donnell |
|
378 | 378 | * Tom Dimiduk |
|
379 | 379 | * ugurthemaster |
|
380 | 380 | * urielshaolin |
|
381 | 381 | * v923z |
|
382 | 382 | * Valentin Haenel |
|
383 | 383 | * Victor Zverovich |
|
384 | 384 | * W. Trevor King |
|
385 | 385 | * y-p |
|
386 | 386 | * Yoav Ram |
|
387 | 387 | * Zbigniew JΔdrzejewski-Szmek |
|
388 | 388 | * ZoltΓ‘n VΓΆrΓΆs |
|
389 | 389 | |
|
390 | 390 | |
|
391 | 391 | We closed a total of 1484 issues, 793 pull requests and 691 regular issues; |
|
392 | 392 | this is the full list (generated with the script |
|
393 | 393 | :file:`tools/github_stats.py`): |
|
394 | 394 | |
|
395 | 395 | Pull Requests (793): |
|
396 | 396 | |
|
397 | 397 | * :ghpull:`3958`: doc update |
|
398 | 398 | * :ghpull:`3965`: Fix ansi color code for background yellow |
|
399 | 399 | * :ghpull:`3964`: Fix casing of message. |
|
400 | 400 | * :ghpull:`3942`: Pass on install docs |
|
401 | 401 | * :ghpull:`3962`: exclude IPython.lib.kernel in iptest |
|
402 | 402 | * :ghpull:`3961`: Longpath test fix |
|
403 | 403 | * :ghpull:`3905`: Remove references to 0.11 and 0.12 from config/overview.rst |
|
404 | 404 | * :ghpull:`3951`: nbconvert: fixed latex characters not escaped properly in nbconvert |
|
405 | 405 | * :ghpull:`3949`: log fatal error when PDF conversion fails |
|
406 | 406 | * :ghpull:`3947`: nbconvert: Make writer & post-processor aliases case insensitive. |
|
407 | 407 | * :ghpull:`3938`: Recompile css. |
|
408 | 408 | * :ghpull:`3948`: sphinx and PDF tweaks |
|
409 | 409 | * :ghpull:`3943`: nbconvert: Serve post-processor Windows fix |
|
410 | 410 | * :ghpull:`3934`: nbconvert: fix logic of verbose flag in PDF post processor |
|
411 | 411 | * :ghpull:`3929`: swallow enter event in rename dialog |
|
412 | 412 | * :ghpull:`3924`: nbconvert: Backport fixes |
|
413 | 413 | * :ghpull:`3925`: Replace --pylab flag with --matplotlib in usage |
|
414 | 414 | * :ghpull:`3910`: Added explicit error message for missing configuration arguments. |
|
415 | 415 | * :ghpull:`3913`: grffile to support spaces in notebook names |
|
416 | 416 | * :ghpull:`3918`: added check_for_tornado, closes #3916 |
|
417 | 417 | * :ghpull:`3917`: change docs/examples refs to be just examples |
|
418 | 418 | * :ghpull:`3908`: what's new tweaks |
|
419 | 419 | * :ghpull:`3896`: two column quickhelp dialog, closes #3895 |
|
420 | 420 | * :ghpull:`3911`: explicitly load python mode before IPython mode |
|
421 | 421 | * :ghpull:`3901`: don't force . relative path, fix #3897 |
|
422 | 422 | * :ghpull:`3891`: fix #3889 |
|
423 | 423 | * :ghpull:`3892`: Fix documentation of Kernel.stop_channels |
|
424 | 424 | * :ghpull:`3888`: posixify paths for Windows latex |
|
425 | 425 | * :ghpull:`3882`: quick fix for #3881 |
|
426 | 426 | * :ghpull:`3877`: don't use `shell=True` in PDF export |
|
427 | 427 | * :ghpull:`3878`: minor template loading cleanup |
|
428 | 428 | * :ghpull:`3855`: nbconvert: Filter tests |
|
429 | 429 | * :ghpull:`3879`: finish 3870 |
|
430 | 430 | * :ghpull:`3870`: Fix for converting notebooks that contain unicode characters. |
|
431 | 431 | * :ghpull:`3876`: Update parallel_winhpc.rst |
|
432 | 432 | * :ghpull:`3872`: removing vim-ipython, since it has it's own repo |
|
433 | 433 | * :ghpull:`3871`: updating docs |
|
434 | 434 | * :ghpull:`3873`: remove old examples |
|
435 | 435 | * :ghpull:`3868`: update CodeMirror component to 3.15 |
|
436 | 436 | * :ghpull:`3865`: Escape filename for pdflatex in nbconvert |
|
437 | 437 | * :ghpull:`3861`: remove old external.js |
|
438 | 438 | * :ghpull:`3864`: add keyboard shortcut to docs |
|
439 | 439 | * :ghpull:`3834`: This PR fixes a few issues with nbconvert tests |
|
440 | 440 | * :ghpull:`3840`: prevent profile_dir from being undefined |
|
441 | 441 | * :ghpull:`3859`: Add "An Afternoon Hack" to docs |
|
442 | 442 | * :ghpull:`3854`: Catch errors filling readline history on startup |
|
443 | 443 | * :ghpull:`3857`: Delete extra auto |
|
444 | 444 | * :ghpull:`3845`: nbconvert: Serve from original build directory |
|
445 | 445 | * :ghpull:`3846`: Add basic logging to nbconvert |
|
446 | 446 | * :ghpull:`3850`: add missing store_history key to Notebook execute_requests |
|
447 | 447 | * :ghpull:`3844`: update payload source |
|
448 | 448 | * :ghpull:`3830`: mention metadata / display_data similarity in pyout spec |
|
449 | 449 | * :ghpull:`3848`: fix incorrect `empty-docstring` |
|
450 | 450 | * :ghpull:`3836`: Parse markdown correctly when mathjax is disabled |
|
451 | 451 | * :ghpull:`3849`: skip a failing test on windows |
|
452 | 452 | * :ghpull:`3828`: signature_scheme lives in Session |
|
453 | 453 | * :ghpull:`3831`: update nbconvert doc with new CLI |
|
454 | 454 | * :ghpull:`3822`: add output flag to nbconvert |
|
455 | 455 | * :ghpull:`3780`: Added serving the output directory if html-based format are selected. |
|
456 | 456 | * :ghpull:`3764`: Cleanup nbconvert templates |
|
457 | 457 | * :ghpull:`3829`: remove now-duplicate 'this is dev' note |
|
458 | 458 | * :ghpull:`3814`: add `ConsoleWidget.execute_on_complete_input` flag |
|
459 | 459 | * :ghpull:`3826`: try rtfd |
|
460 | 460 | * :ghpull:`3821`: add sphinx prolog |
|
461 | 461 | * :ghpull:`3817`: relax timeouts in terminal console and tests |
|
462 | 462 | * :ghpull:`3825`: fix more tests that fail when pandoc is missing |
|
463 | 463 | * :ghpull:`3824`: don't set target on internal markdown links |
|
464 | 464 | * :ghpull:`3816`: s/pylab/matplotlib in docs |
|
465 | 465 | * :ghpull:`3812`: Describe differences between start_ipython and embed |
|
466 | 466 | * :ghpull:`3805`: Print View has been removed |
|
467 | 467 | * :ghpull:`3820`: Make it clear that 1.0 is not released yet |
|
468 | 468 | * :ghpull:`3784`: nbconvert: Export flavors & PDF writer (ipy dev meeting) |
|
469 | 469 | * :ghpull:`3800`: semantic-versionify version number for non-releases |
|
470 | 470 | * :ghpull:`3802`: Documentation .txt to .rst |
|
471 | 471 | * :ghpull:`3765`: cleanup terminal console iopub handling |
|
472 | 472 | * :ghpull:`3720`: Fix for #3719 |
|
473 | 473 | * :ghpull:`3787`: re-raise KeyboardInterrupt in raw_input |
|
474 | 474 | * :ghpull:`3770`: Organizing reveal's templates. |
|
475 | 475 | * :ghpull:`3751`: Use link(2) when possible in nbconvert |
|
476 | 476 | * :ghpull:`3792`: skip tests that require pandoc |
|
477 | 477 | * :ghpull:`3782`: add Importing Notebooks example |
|
478 | 478 | * :ghpull:`3752`: nbconvert: Add cwd to sys.path |
|
479 | 479 | * :ghpull:`3789`: fix raw_input in qtconsole |
|
480 | 480 | * :ghpull:`3756`: document the wire protocol |
|
481 | 481 | * :ghpull:`3749`: convert IPython syntax to Python syntax in nbconvert python template |
|
482 | 482 | * :ghpull:`3793`: Closes #3788 |
|
483 | 483 | * :ghpull:`3794`: Change logo link to ipython.org |
|
484 | 484 | * :ghpull:`3746`: Raise a named exception when pandoc is missing |
|
485 | 485 | * :ghpull:`3781`: comply with the message spec in the notebook |
|
486 | 486 | * :ghpull:`3779`: remove bad `if logged_in` preventing new-notebook without login |
|
487 | 487 | * :ghpull:`3743`: remove notebook read-only view |
|
488 | 488 | * :ghpull:`3732`: add delay to autosave in beforeunload |
|
489 | 489 | * :ghpull:`3761`: Added rm_math_space to markdown cells in the basichtml.tpl to be rendered ok by mathjax after the nbconvertion. |
|
490 | 490 | * :ghpull:`3758`: nbconvert: Filter names cleanup |
|
491 | 491 | * :ghpull:`3769`: Add configurability to tabcompletion timeout |
|
492 | 492 | * :ghpull:`3771`: Update px pylab test to match new output of pylab |
|
493 | 493 | * :ghpull:`3741`: better message when notebook format is not supported |
|
494 | 494 | * :ghpull:`3753`: document Ctrl-C not working in ipython kernel |
|
495 | 495 | * :ghpull:`3766`: handle empty metadata in pyout messages more gracefully. |
|
496 | 496 | * :ghpull:`3736`: my attempt to fix #3735 |
|
497 | 497 | * :ghpull:`3759`: nbconvert: Provide a more useful error for invalid use case. |
|
498 | 498 | * :ghpull:`3760`: nbconvert: Allow notebook filenames without their extensions |
|
499 | 499 | * :ghpull:`3750`: nbconvert: Add cwd to default templates search path. |
|
500 | 500 | * :ghpull:`3748`: Update nbconvert docs |
|
501 | 501 | * :ghpull:`3734`: Nbconvert: Export extracted files into `nbname_files` subdirectory |
|
502 | 502 | * :ghpull:`3733`: Nicer message when pandoc is missing, closes #3730 |
|
503 | 503 | * :ghpull:`3722`: fix two failing test in IPython.lib |
|
504 | 504 | * :ghpull:`3704`: Start what's new for 1.0 |
|
505 | 505 | * :ghpull:`3705`: Complete rewrite of IPython Notebook documentation: docs/source/interactive/htmlnotebook.txt |
|
506 | 506 | * :ghpull:`3709`: Docs cleanup |
|
507 | 507 | * :ghpull:`3716`: raw_input fixes for kernel restarts |
|
508 | 508 | * :ghpull:`3683`: use `%matplotlib` in example notebooks |
|
509 | 509 | * :ghpull:`3686`: remove quarantine |
|
510 | 510 | * :ghpull:`3699`: svg2pdf unicode fix |
|
511 | 511 | * :ghpull:`3695`: fix SVG2PDF |
|
512 | 512 | * :ghpull:`3685`: fix Pager.detach |
|
513 | 513 | * :ghpull:`3675`: document new dependencies |
|
514 | 514 | * :ghpull:`3690`: Fixing some css minors in full_html and reveal. |
|
515 | 515 | * :ghpull:`3671`: nbconvert tests |
|
516 | 516 | * :ghpull:`3692`: Fix rename notebook - show error with invalid name |
|
517 | 517 | * :ghpull:`3409`: Prevent qtconsole frontend freeze on lots of output. |
|
518 | 518 | * :ghpull:`3660`: refocus active cell on dialog close |
|
519 | 519 | * :ghpull:`3598`: Statelessify mathjaxutils |
|
520 | 520 | * :ghpull:`3673`: enable comment/uncomment selection |
|
521 | 521 | * :ghpull:`3677`: remove special-case in get_home_dir for frozen dists |
|
522 | 522 | * :ghpull:`3674`: add CONTRIBUTING.md |
|
523 | 523 | * :ghpull:`3670`: use Popen command list for ipexec |
|
524 | 524 | * :ghpull:`3568`: pylab import adjustments |
|
525 | 525 | * :ghpull:`3559`: add create.Cell and delete.Cell js events |
|
526 | 526 | * :ghpull:`3606`: push cell magic to the head of the transformer line |
|
527 | 527 | * :ghpull:`3607`: NbConvert: Writers, No YAML, and stuff... |
|
528 | 528 | * :ghpull:`3665`: Pywin32 skips |
|
529 | 529 | * :ghpull:`3669`: set default client_class for QtKernelManager |
|
530 | 530 | * :ghpull:`3662`: add strip_encoding_cookie transformer |
|
531 | 531 | * :ghpull:`3641`: increase patience for slow kernel startup in tests |
|
532 | 532 | * :ghpull:`3651`: remove a bunch of unused `default_config_file` assignments |
|
533 | 533 | * :ghpull:`3630`: CSS adjustments |
|
534 | 534 | * :ghpull:`3645`: Don't require HistoryManager to have a shell |
|
535 | 535 | * :ghpull:`3643`: don't assume tested ipython is on the PATH |
|
536 | 536 | * :ghpull:`3654`: fix single-result AsyncResults |
|
537 | 537 | * :ghpull:`3601`: Markdown in heading cells (take 2) |
|
538 | 538 | * :ghpull:`3652`: Remove old `docs/examples` |
|
539 | 539 | * :ghpull:`3621`: catch any exception appending output |
|
540 | 540 | * :ghpull:`3585`: don't blacklist builtin names |
|
541 | 541 | * :ghpull:`3647`: Fix `frontend` deprecation warnings in several examples |
|
542 | 542 | * :ghpull:`3649`: fix AsyncResult.get_dict for single result |
|
543 | 543 | * :ghpull:`3648`: Fix store magic test |
|
544 | 544 | * :ghpull:`3650`: Fix, config_file_name was ignored |
|
545 | 545 | * :ghpull:`3640`: Gcf.get_active() can return None |
|
546 | 546 | * :ghpull:`3571`: Added shorcuts to split cell, merge cell above and merge cell below. |
|
547 | 547 | * :ghpull:`3635`: Added missing slash to print-pdf call. |
|
548 | 548 | * :ghpull:`3487`: Drop patch for compatibility with pyreadline 1.5 |
|
549 | 549 | * :ghpull:`3338`: Allow filename with extension in find_cmd in Windows. |
|
550 | 550 | * :ghpull:`3628`: Fix test for Python 3 on Windows. |
|
551 | 551 | * :ghpull:`3642`: Fix typo in docs |
|
552 | 552 | * :ghpull:`3627`: use DEFAULT_STATIC_FILES_PATH in a test instead of package dir |
|
553 | 553 | * :ghpull:`3624`: fix some unicode in zmqhandlers |
|
554 | 554 | * :ghpull:`3460`: Set calling program to UNKNOWN, when argv not in sys |
|
555 | 555 | * :ghpull:`3632`: Set calling program to UNKNOWN, when argv not in sys (take #2) |
|
556 | 556 | * :ghpull:`3629`: Use new entry point for python -m IPython |
|
557 | 557 | * :ghpull:`3626`: passing cell to showInPager, closes #3625 |
|
558 | 558 | * :ghpull:`3618`: expand terminal color support |
|
559 | 559 | * :ghpull:`3623`: raise UsageError for unsupported GUI backends |
|
560 | 560 | * :ghpull:`3071`: Add magic function %drun to run code in debugger |
|
561 | 561 | * :ghpull:`3608`: a nicer error message when using %pylab magic |
|
562 | 562 | * :ghpull:`3592`: add extra_config_file |
|
563 | 563 | * :ghpull:`3612`: updated .mailmap |
|
564 | 564 | * :ghpull:`3616`: Add examples for interactive use of MPI. |
|
565 | 565 | * :ghpull:`3615`: fix regular expression for ANSI escapes |
|
566 | 566 | * :ghpull:`3586`: Corrected a typo in the format string for strftime the sphinx.py transformer of nbconvert |
|
567 | 567 | * :ghpull:`3611`: check for markdown no longer needed, closes #3610 |
|
568 | 568 | * :ghpull:`3555`: Simplify caching of modules with %run |
|
569 | 569 | * :ghpull:`3583`: notebook small things |
|
570 | 570 | * :ghpull:`3594`: Fix duplicate completion in notebook |
|
571 | 571 | * :ghpull:`3600`: parallel: Improved logging for errors during BatchSystemLauncher.stop |
|
572 | 572 | * :ghpull:`3595`: Revert "allow markdown in heading cells" |
|
573 | 573 | * :ghpull:`3538`: add IPython.start_ipython |
|
574 | 574 | * :ghpull:`3562`: Allow custom nbconvert template loaders |
|
575 | 575 | * :ghpull:`3582`: pandoc adjustments |
|
576 | 576 | * :ghpull:`3560`: Remove max_msg_size |
|
577 | 577 | * :ghpull:`3591`: Refer to Setuptools instead of Distribute |
|
578 | 578 | * :ghpull:`3590`: IPython.sphinxext needs an __init__.py |
|
579 | 579 | * :ghpull:`3581`: Added the possibility to read a custom.css file for tweaking the final html in full_html and reveal templates. |
|
580 | 580 | * :ghpull:`3576`: Added support for markdown in heading cells when they are nbconverted. |
|
581 | 581 | * :ghpull:`3575`: tweak `run -d` message to 'continue execution' |
|
582 | 582 | * :ghpull:`3569`: add PYTHONSTARTUP to startup files |
|
583 | * :ghpull:`3567`: Trigger a single event on js app initilized | |
|
583 | * :ghpull:`3567`: Trigger a single event on js app initialized | |
|
584 | 584 | * :ghpull:`3565`: style.min.css should always exist... |
|
585 | 585 | * :ghpull:`3531`: allow markdown in heading cells |
|
586 | 586 | * :ghpull:`3577`: Simplify codemirror ipython-mode |
|
587 | 587 | * :ghpull:`3495`: Simplified regexp, and suggestions for clearer regexps. |
|
588 | 588 | * :ghpull:`3578`: Use adjustbox to specify figure size in nbconvert -> latex |
|
589 | 589 | * :ghpull:`3572`: Skip import irunner test on Windows. |
|
590 | 590 | * :ghpull:`3574`: correct static path for CM modes autoload |
|
591 | 591 | * :ghpull:`3558`: Add IPython.sphinxext |
|
592 | 592 | * :ghpull:`3561`: mention double-control-C to stop notebook server |
|
593 | 593 | * :ghpull:`3566`: fix event names |
|
594 | 594 | * :ghpull:`3564`: Remove trivial nbconvert example |
|
595 | 595 | * :ghpull:`3540`: allow cython cache dir to be deleted |
|
596 | 596 | * :ghpull:`3527`: cleanup stale, unused exceptions in parallel.error |
|
597 | 597 | * :ghpull:`3529`: ensure raw_input returns str in zmq shell |
|
598 | 598 | * :ghpull:`3541`: respect image size metadata in qtconsole |
|
599 | 599 | * :ghpull:`3550`: Fixing issue preventing the correct read of images by full_html and reveal exporters. |
|
600 | 600 | * :ghpull:`3557`: open markdown links in new tabs |
|
601 | 601 | * :ghpull:`3556`: remove mention of nonexistent `_margv` in macro |
|
602 | 602 | * :ghpull:`3552`: set overflow-x: hidden on Firefox only |
|
603 | 603 | * :ghpull:`3554`: Fix missing import os in latex exporter. |
|
604 | 604 | * :ghpull:`3546`: Don't hardcode **latex** posix paths in nbconvert |
|
605 | 605 | * :ghpull:`3551`: fix path prefix in nbconvert |
|
606 | 606 | * :ghpull:`3533`: Use a CDN to get reveal.js library. |
|
607 | 607 | * :ghpull:`3498`: When a notebook is written to file, name the metadata name u''. |
|
608 | 608 | * :ghpull:`3548`: Change to standard save icon in Notebook toolbar |
|
609 | 609 | * :ghpull:`3539`: Don't hardcode posix paths in nbconvert |
|
610 | 610 | * :ghpull:`3508`: notebook supports raw_input and %debug now |
|
611 | 611 | * :ghpull:`3526`: ensure 'default' is first in cluster profile list |
|
612 | 612 | * :ghpull:`3525`: basic timezone info |
|
613 | 613 | * :ghpull:`3532`: include nbconvert templates in installation |
|
614 | 614 | * :ghpull:`3515`: update CodeMirror component to 3.14 |
|
615 | 615 | * :ghpull:`3513`: add 'No Checkpoints' to Revert menu |
|
616 | 616 | * :ghpull:`3536`: format positions are required in Python 2.6.x |
|
617 | 617 | * :ghpull:`3521`: Nbconvert fix, silent fail if template doesn't exist |
|
618 | 618 | * :ghpull:`3530`: update %store magic docstring |
|
619 | 619 | * :ghpull:`3528`: fix local mathjax with custom base_project_url |
|
620 | 620 | * :ghpull:`3518`: Clear up unused imports |
|
621 | 621 | * :ghpull:`3506`: %store -r restores saved aliases and directory history, as well as variables |
|
622 | 622 | * :ghpull:`3516`: make css highlight style configurable |
|
623 | 623 | * :ghpull:`3523`: Exclude frontend shim from docs build |
|
624 | 624 | * :ghpull:`3514`: use bootstrap `disabled` instead of `ui-state-disabled` |
|
625 | 625 | * :ghpull:`3520`: Added relative import of RevealExporter to __init__.py inside exporters module |
|
626 | 626 | * :ghpull:`3507`: fix HTML capitalization in nbconvert exporter classes |
|
627 | 627 | * :ghpull:`3512`: fix nbconvert filter validation |
|
628 | 628 | * :ghpull:`3511`: Get Tracer working after ipapi.get replaced with get_ipython |
|
629 | 629 | * :ghpull:`3510`: use `window.onbeforeunload=` for nav-away warning |
|
630 | 630 | * :ghpull:`3504`: don't use parent=self in handlers |
|
631 | 631 | * :ghpull:`3500`: Merge nbconvert into IPython |
|
632 | 632 | * :ghpull:`3478`: restore "unsaved changes" warning on unload |
|
633 | 633 | * :ghpull:`3493`: add a dialog when the kernel is auto-restarted |
|
634 | 634 | * :ghpull:`3488`: Add test suite for autoreload extension |
|
635 | 635 | * :ghpull:`3484`: Catch some pathological cases inside oinspect |
|
636 | 636 | * :ghpull:`3481`: Display R errors without Python traceback |
|
637 | 637 | * :ghpull:`3468`: fix `%magic` output |
|
638 | 638 | * :ghpull:`3430`: add parent to Configurable |
|
639 | 639 | * :ghpull:`3491`: Remove unexpected keyword parameter to remove_kernel |
|
640 | 640 | * :ghpull:`3485`: SymPy has changed its recommended way to initialize printing |
|
641 | 641 | * :ghpull:`3486`: Add test for non-ascii characters in docstrings |
|
642 | 642 | * :ghpull:`3483`: Inputtransformer: Allow classic prompts without space |
|
643 | 643 | * :ghpull:`3482`: Use an absolute path to iptest, because the tests are not always run from $IPYTHONDIR. |
|
644 | 644 | * :ghpull:`3381`: enable 2x (retina) display |
|
645 | 645 | * :ghpull:`3450`: Flatten IPython.frontend |
|
646 | 646 | * :ghpull:`3477`: pass config to subapps |
|
647 | 647 | * :ghpull:`3466`: Kernel fails to start when username has non-ascii characters |
|
648 | 648 | * :ghpull:`3465`: Add HTCondor bindings to IPython.parallel |
|
649 | 649 | * :ghpull:`3463`: fix typo, closes #3462 |
|
650 | 650 | * :ghpull:`3456`: Notice for users who disable javascript |
|
651 | 651 | * :ghpull:`3453`: fix cell execution in firefox, closes #3447 |
|
652 | 652 | * :ghpull:`3393`: [WIP] bootstrapify |
|
653 | 653 | * :ghpull:`3440`: Fix installing mathjax from downloaded file via command line |
|
654 | 654 | * :ghpull:`3431`: Provide means for starting the Qt console maximized and with the menu bar hidden |
|
655 | 655 | * :ghpull:`3425`: base IPClusterApp inherits from BaseIPythonApp |
|
656 | 656 | * :ghpull:`3433`: Update IPython\external\path\__init__.py |
|
657 | 657 | * :ghpull:`3298`: Some fixes in IPython Sphinx directive |
|
658 | 658 | * :ghpull:`3428`: process escapes in mathjax |
|
659 | 659 | * :ghpull:`3420`: thansk -> thanks |
|
660 | 660 | * :ghpull:`3416`: Fix doc: "principle" not "principal" |
|
661 | 661 | * :ghpull:`3413`: more unique filename for test |
|
662 | 662 | * :ghpull:`3364`: Inject requirejs in notebook and start using it. |
|
663 | 663 | * :ghpull:`3390`: Fix %paste with blank lines |
|
664 | 664 | * :ghpull:`3403`: fix creating config objects from dicts |
|
665 | 665 | * :ghpull:`3401`: rollback #3358 |
|
666 | 666 | * :ghpull:`3373`: make cookie_secret configurable |
|
667 | 667 | * :ghpull:`3307`: switch default ws_url logic to js side |
|
668 | 668 | * :ghpull:`3392`: Restore anchor link on h2-h6 |
|
669 | 669 | * :ghpull:`3369`: Use different threshold for (auto)scroll in output |
|
670 | 670 | * :ghpull:`3370`: normalize unicode notebook filenames |
|
671 | 671 | * :ghpull:`3372`: base default cookie name on request host+port |
|
672 | 672 | * :ghpull:`3378`: disable CodeMirror drag/drop on Safari |
|
673 | 673 | * :ghpull:`3358`: workaround spurious CodeMirror scrollbars |
|
674 | 674 | * :ghpull:`3371`: make setting the notebook dirty flag an event |
|
675 | 675 | * :ghpull:`3366`: remove long-dead zmq frontend.py and completer.py |
|
676 | 676 | * :ghpull:`3382`: cull Session digest history |
|
677 | 677 | * :ghpull:`3330`: Fix get_ipython_dir when $HOME is / |
|
678 | 678 | * :ghpull:`3319`: IPEP 13: user-expressions and user-variables |
|
679 | 679 | * :ghpull:`3384`: comments in tools/gitwash_dumper.py changed (''' to """) |
|
680 | 680 | * :ghpull:`3387`: Make submodule checks work under Python 3. |
|
681 | 681 | * :ghpull:`3357`: move anchor-link off of heading text |
|
682 | 682 | * :ghpull:`3351`: start basic tests of ipcluster Launchers |
|
683 | 683 | * :ghpull:`3377`: allow class.__module__ to be None |
|
684 | 684 | * :ghpull:`3340`: skip submodule check in package managers |
|
685 | 685 | * :ghpull:`3328`: decode subprocess output in launchers |
|
686 | 686 | * :ghpull:`3368`: Reenable bracket matching |
|
687 | 687 | * :ghpull:`3356`: Mpr fixes |
|
688 | 688 | * :ghpull:`3336`: Use new input transformation API in %time magic |
|
689 | 689 | * :ghpull:`3325`: Organize the JS and less files by component. |
|
690 | 690 | * :ghpull:`3342`: fix test_find_cmd_python |
|
691 | 691 | * :ghpull:`3354`: catch socket.error in utils.localinterfaces |
|
692 | 692 | * :ghpull:`3341`: fix default cluster count |
|
693 | 693 | * :ghpull:`3286`: don't use `get_ipython` from builtins in library code |
|
694 | 694 | * :ghpull:`3333`: notebookapp: add missing whitespace to warnings |
|
695 | 695 | * :ghpull:`3323`: Strip prompts even if the prompt isn't present on the first line. |
|
696 | 696 | * :ghpull:`3321`: Reorganize the python/server side of the notebook |
|
697 | 697 | * :ghpull:`3320`: define `__file__` in config files |
|
698 | 698 | * :ghpull:`3317`: rename `%%file` to `%%writefile` |
|
699 | 699 | * :ghpull:`3304`: set unlimited HWM for all relay devices |
|
700 | 700 | * :ghpull:`3315`: Update Sympy_printing extension load |
|
701 | 701 | * :ghpull:`3310`: further clarify Image docstring |
|
702 | 702 | * :ghpull:`3285`: load extensions in builtin trap |
|
703 | 703 | * :ghpull:`3308`: Speed up AsyncResult._wait_for_outputs(0) |
|
704 | 704 | * :ghpull:`3294`: fix callbacks as optional in js kernel.execute |
|
705 | 705 | * :ghpull:`3276`: Fix: "python ABS/PATH/TO/ipython.py" fails |
|
706 | 706 | * :ghpull:`3301`: allow python3 tests without python installed |
|
707 | 707 | * :ghpull:`3282`: allow view.map to work with a few more things |
|
708 | 708 | * :ghpull:`3284`: remove `ipython.py` entry point |
|
709 | 709 | * :ghpull:`3281`: fix ignored IOPub messages with no parent |
|
710 | 710 | * :ghpull:`3275`: improve submodule messages / git hooks |
|
711 | 711 | * :ghpull:`3239`: Allow "x" icon and esc key to close pager in notebook |
|
712 | 712 | * :ghpull:`3290`: Improved heartbeat controller to engine monitoring for long running tasks |
|
713 | 713 | * :ghpull:`3142`: Better error message when CWD doesn't exist on startup |
|
714 | 714 | * :ghpull:`3066`: Add support for relative import to %run -m (fixes #2727) |
|
715 | 715 | * :ghpull:`3269`: protect highlight.js against unknown languages |
|
716 | 716 | * :ghpull:`3267`: add missing return |
|
717 | 717 | * :ghpull:`3101`: use marked / highlight.js instead of pagedown and prettify |
|
718 | 718 | * :ghpull:`3264`: use https url for submodule |
|
719 | 719 | * :ghpull:`3263`: fix set_last_checkpoint when no checkpoint |
|
720 | 720 | * :ghpull:`3258`: Fix submodule location in setup.py |
|
721 | 721 | * :ghpull:`3254`: fix a few URLs from previous PR |
|
722 | 722 | * :ghpull:`3240`: remove js components from the repo |
|
723 | 723 | * :ghpull:`3158`: IPEP 15: autosave the notebook |
|
724 | 724 | * :ghpull:`3252`: move images out of _static folder into _images |
|
725 | 725 | * :ghpull:`3251`: Fix for cell magics in Qt console |
|
726 | 726 | * :ghpull:`3250`: Added a simple __html__() method to the HTML class |
|
727 | 727 | * :ghpull:`3249`: remove copy of sphinx inheritance_diagram.py |
|
728 | 728 | * :ghpull:`3235`: Remove the unused print notebook view |
|
729 | 729 | * :ghpull:`3238`: Improve the design of the tab completion UI |
|
730 | 730 | * :ghpull:`3242`: Make changes of Application.log_format effective |
|
731 | 731 | * :ghpull:`3219`: Workaround so only one CTRL-C is required for a new prompt in --gui=qt |
|
732 | 732 | * :ghpull:`3190`: allow formatters to specify metadata |
|
733 | 733 | * :ghpull:`3231`: improve discovery of public IPs |
|
734 | 734 | * :ghpull:`3233`: check prefixes for swallowing kernel args |
|
735 | 735 | * :ghpull:`3234`: Removing old autogrow JS code. |
|
736 | 736 | * :ghpull:`3232`: Update to CodeMirror 3 and start to ship our components |
|
737 | 737 | * :ghpull:`3229`: The HTML output type accidentally got removed from the OutputArea. |
|
738 | 738 | * :ghpull:`3228`: Typo in IPython.Parallel documentation |
|
739 | 739 | * :ghpull:`3226`: Text in rename dialog was way too big - making it <p>. |
|
740 | 740 | * :ghpull:`3225`: Removing old restuctured text handler and web service. |
|
741 | 741 | * :ghpull:`3222`: make BlockingKernelClient the default Client |
|
742 | 742 | * :ghpull:`3223`: add missing mathjax_url to new settings dict |
|
743 | 743 | * :ghpull:`3089`: add stdin to the notebook |
|
744 | 744 | * :ghpull:`3221`: Remove references to HTMLCell (dead code) |
|
745 | 745 | * :ghpull:`3205`: add ignored ``*args`` to HasTraits constructor |
|
746 | 746 | * :ghpull:`3088`: cleanup IPython handler settings |
|
747 | 747 | * :ghpull:`3201`: use much faster regexp for ansi coloring |
|
748 | 748 | * :ghpull:`3220`: avoid race condition in profile creation |
|
749 | 749 | * :ghpull:`3011`: IPEP 12: add KernelClient |
|
750 | 750 | * :ghpull:`3217`: informative error when trying to load directories |
|
751 | 751 | * :ghpull:`3174`: Simple class |
|
752 | 752 | * :ghpull:`2979`: CM configurable Take 2 |
|
753 | 753 | * :ghpull:`3215`: Updates storemagic extension to allow for specifying variable name to load |
|
754 | 754 | * :ghpull:`3181`: backport If-Modified-Since fix from tornado |
|
755 | 755 | * :ghpull:`3200`: IFrame (VimeoVideo, ScribdDocument, ...) |
|
756 | 756 | * :ghpull:`3186`: Fix small inconsistency in nbconvert: etype -> ename |
|
757 | 757 | * :ghpull:`3212`: Fix issue #2563, "core.profiledir.check_startup_dir() doesn't work inside py2exe'd installation" |
|
758 | 758 | * :ghpull:`3211`: Fix inheritance_diagram Sphinx extension for Sphinx 1.2 |
|
759 | 759 | * :ghpull:`3208`: Update link to extensions index |
|
760 | 760 | * :ghpull:`3203`: Separate InputSplitter for transforming whole cells |
|
761 | 761 | * :ghpull:`3189`: Improve completer |
|
762 | 762 | * :ghpull:`3194`: finish up PR #3116 |
|
763 | 763 | * :ghpull:`3188`: Add new keycodes |
|
764 | 764 | * :ghpull:`2695`: Key the root modules cache by sys.path entries. |
|
765 | 765 | * :ghpull:`3182`: clarify %%file docstring |
|
766 | 766 | * :ghpull:`3163`: BUG: Fix the set and frozenset pretty printer to handle the empty case correctly |
|
767 | 767 | * :ghpull:`3180`: better UsageError for cell magic with no body |
|
768 | 768 | * :ghpull:`3184`: Cython cache |
|
769 | 769 | * :ghpull:`3175`: Added missing s |
|
770 | 770 | * :ghpull:`3173`: Little bits of documentation cleanup |
|
771 | 771 | * :ghpull:`2635`: Improve Windows start menu shortcuts (#2) |
|
772 | 772 | * :ghpull:`3172`: Add missing import in IPython parallel magics example |
|
773 | 773 | * :ghpull:`3170`: default application logger shouldn't propagate |
|
774 | 774 | * :ghpull:`3159`: Autocompletion for zsh |
|
775 | 775 | * :ghpull:`3105`: move DEFAULT_STATIC_FILES_PATH to IPython.html |
|
776 | 776 | * :ghpull:`3144`: minor bower tweaks |
|
777 | 777 | * :ghpull:`3141`: Default color output for ls on OSX |
|
778 | 778 | * :ghpull:`3137`: fix dot syntax error in inheritance diagram |
|
779 | 779 | * :ghpull:`3072`: raise UnsupportedOperation on iostream.fileno() |
|
780 | 780 | * :ghpull:`3147`: Notebook support for a reverse proxy which handles SSL |
|
781 | 781 | * :ghpull:`3152`: make qtconsole size at startup configurable |
|
782 | 782 | * :ghpull:`3162`: adding stream kwarg to current.new_output |
|
783 | 783 | * :ghpull:`2981`: IPEP 10: kernel side filtering of display formats |
|
784 | 784 | * :ghpull:`3058`: add redirect handler for notebooks by name |
|
785 | 785 | * :ghpull:`3041`: support non-modules in @require |
|
786 | 786 | * :ghpull:`2447`: Stateful line transformers |
|
787 | 787 | * :ghpull:`3108`: fix some O(N) and O(N^2) operations in parallel.map |
|
788 | 788 | * :ghpull:`2791`: forward stdout from forked processes |
|
789 | 789 | * :ghpull:`3157`: use Python 3-style for pretty-printed sets |
|
790 | 790 | * :ghpull:`3148`: closes #3045, #3123 for tornado < version 3.0 |
|
791 | 791 | * :ghpull:`3143`: minor heading-link tweaks |
|
792 | 792 | * :ghpull:`3136`: Strip useless ANSI escape codes in notebook |
|
793 | 793 | * :ghpull:`3126`: Prevent errors when pressing arrow keys in an empty notebook |
|
794 | 794 | * :ghpull:`3135`: quick dev installation instructions |
|
795 | 795 | * :ghpull:`2889`: Push pandas dataframes to R magic |
|
796 | 796 | * :ghpull:`3068`: Don't monkeypatch doctest during IPython startup. |
|
797 | 797 | * :ghpull:`3133`: fix argparse version check |
|
798 | 798 | * :ghpull:`3102`: set `spellcheck=false` in CodeCell inputarea |
|
799 | 799 | * :ghpull:`3064`: add anchors to heading cells |
|
800 | 800 | * :ghpull:`3097`: PyQt 4.10: use self._document = self.document() |
|
801 | 801 | * :ghpull:`3117`: propagate automagic change to shell |
|
802 | 802 | * :ghpull:`3118`: don't give up on weird os names |
|
803 | 803 | * :ghpull:`3115`: Fix example |
|
804 | 804 | * :ghpull:`2640`: fix quarantine/ipy_editors.py |
|
805 | 805 | * :ghpull:`3070`: Add info make target that was missing in old Sphinx |
|
806 | 806 | * :ghpull:`3082`: A few small patches to image handling |
|
807 | 807 | * :ghpull:`3078`: fix regular expression for detecting links in stdout |
|
808 | 808 | * :ghpull:`3054`: restore default behavior for automatic cluster size |
|
809 | 809 | * :ghpull:`3073`: fix ipython usage text |
|
810 | 810 | * :ghpull:`3083`: fix DisplayMagics.html docstring |
|
811 | 811 | * :ghpull:`3080`: noted sub_channel being renamed to iopub_channel |
|
812 | 812 | * :ghpull:`3079`: actually use IPKernelApp.kernel_class |
|
813 | 813 | * :ghpull:`3076`: Improve notebook.js documentation |
|
814 | 814 | * :ghpull:`3063`: add missing `%%html` magic |
|
815 | 815 | * :ghpull:`3075`: check for SIGUSR1 before using it, closes #3074 |
|
816 | 816 | * :ghpull:`3051`: add width:100% to vbox for webkit / FF consistency |
|
817 | 817 | * :ghpull:`2999`: increase registration timeout |
|
818 | 818 | * :ghpull:`2997`: fix DictDB default size limit |
|
819 | 819 | * :ghpull:`3033`: on resume, print server info again |
|
820 | 820 | * :ghpull:`3062`: test double pyximport |
|
821 | 821 | * :ghpull:`3046`: cast kernel cwd to bytes on Python 2 on Windows |
|
822 | 822 | * :ghpull:`3038`: remove xml from notebook magic docstrings |
|
823 | 823 | * :ghpull:`3032`: fix time format to international time format |
|
824 | 824 | * :ghpull:`3022`: Fix test for Windows |
|
825 | 825 | * :ghpull:`3024`: changed instances of 'outout' to 'output' in alt texts |
|
826 | 826 | * :ghpull:`3013`: py3 workaround for reload in cythonmagic |
|
827 | 827 | * :ghpull:`2961`: time magic: shorten unnecessary output on windows |
|
828 | 828 | * :ghpull:`2987`: fix local files examples in markdown |
|
829 | 829 | * :ghpull:`2998`: fix css in .output_area pre |
|
830 | 830 | * :ghpull:`3003`: add $include /etc/inputrc to suggested ~/.inputrc |
|
831 | 831 | * :ghpull:`2957`: Refactor qt import logic. Fixes #2955 |
|
832 | 832 | * :ghpull:`2994`: expanduser on %%file targets |
|
833 | 833 | * :ghpull:`2983`: fix run-all (that-> this) |
|
834 | 834 | * :ghpull:`2964`: fix count when testing composite error output |
|
835 | 835 | * :ghpull:`2967`: shows entire session history when only startsess is given |
|
836 | 836 | * :ghpull:`2942`: Move CM IPython theme out of codemirror folder |
|
837 | 837 | * :ghpull:`2929`: Cleanup cell insertion |
|
838 | 838 | * :ghpull:`2933`: Minordocupdate |
|
839 | 839 | * :ghpull:`2968`: fix notebook deletion. |
|
840 | 840 | * :ghpull:`2966`: Added assert msg to extract_hist_ranges() |
|
841 | 841 | * :ghpull:`2959`: Add command to trim the history database. |
|
842 | 842 | * :ghpull:`2681`: Don't enable pylab mode, when matplotlib is not importable |
|
843 | 843 | * :ghpull:`2901`: Fix inputhook_wx on osx |
|
844 | 844 | * :ghpull:`2871`: truncate potentially long CompositeErrors |
|
845 | 845 | * :ghpull:`2951`: use istype on lists/tuples |
|
846 | 846 | * :ghpull:`2946`: fix qtconsole history logic for end-of-line |
|
847 | 847 | * :ghpull:`2954`: fix logic for append_javascript |
|
848 | 848 | * :ghpull:`2941`: fix baseUrl |
|
849 | 849 | * :ghpull:`2903`: Specify toggle value on cell line number |
|
850 | 850 | * :ghpull:`2911`: display order in output area configurable |
|
851 | 851 | * :ghpull:`2897`: Don't rely on BaseProjectUrl data in body tag |
|
852 | 852 | * :ghpull:`2894`: Cm configurable |
|
853 | 853 | * :ghpull:`2927`: next release will be 1.0 |
|
854 | 854 | * :ghpull:`2932`: Simplify using notebook static files from external code |
|
855 | 855 | * :ghpull:`2915`: added small config section to notebook docs page |
|
856 | 856 | * :ghpull:`2924`: safe_run_module: Silence SystemExit codes 0 and None. |
|
857 | 857 | * :ghpull:`2906`: Unpatch/Monkey patch CM |
|
858 | 858 | * :ghpull:`2921`: add menu item for undo delete cell |
|
859 | 859 | * :ghpull:`2917`: Don't add logging handler if one already exists. |
|
860 | 860 | * :ghpull:`2910`: Respect DB_IP and DB_PORT in mongodb tests |
|
861 | 861 | * :ghpull:`2926`: Don't die if stderr/stdout do not support set_parent() #2925 |
|
862 | 862 | * :ghpull:`2885`: get monospace pager back |
|
863 | 863 | * :ghpull:`2876`: fix celltoolbar layout on FF |
|
864 | 864 | * :ghpull:`2904`: Skip remaining IPC test on Windows |
|
865 | 865 | * :ghpull:`2908`: fix last remaining KernelApp reference |
|
866 | 866 | * :ghpull:`2905`: fix a few remaining KernelApp/IPKernelApp changes |
|
867 | 867 | * :ghpull:`2900`: Don't assume test case for %time will finish in 0 time |
|
868 | 868 | * :ghpull:`2893`: exclude fabfile from tests |
|
869 | 869 | * :ghpull:`2884`: Correct import for kernelmanager on Windows |
|
870 | 870 | * :ghpull:`2882`: Utils cleanup |
|
871 | 871 | * :ghpull:`2883`: Don't call ast.fix_missing_locations unless the AST could have been modified |
|
872 | 872 | * :ghpull:`2855`: time(it) magic: Implement minutes/hour formatting and "%%time" cell magic |
|
873 | 873 | * :ghpull:`2874`: Empty cell warnings |
|
874 | 874 | * :ghpull:`2819`: tweak history prefix search (up/^p) in qtconsole |
|
875 | 875 | * :ghpull:`2868`: Import performance |
|
876 | 876 | * :ghpull:`2877`: minor css fixes |
|
877 | 877 | * :ghpull:`2880`: update examples docs with kernel move |
|
878 | 878 | * :ghpull:`2878`: Pass host environment on to kernel |
|
879 | 879 | * :ghpull:`2599`: func_kw_complete for builtin and cython with embededsignature=True using docstring |
|
880 | 880 | * :ghpull:`2792`: Add key "unique" to history_request protocol |
|
881 | 881 | * :ghpull:`2872`: fix payload keys |
|
882 | 882 | * :ghpull:`2869`: Fixing styling of toolbar selects on FF. |
|
883 | 883 | * :ghpull:`2708`: Less css |
|
884 | 884 | * :ghpull:`2854`: Move kernel code into IPython.kernel |
|
885 | 885 | * :ghpull:`2864`: Fix %run -t -N<N> TypeError |
|
886 | 886 | * :ghpull:`2852`: future pyzmq compatibility |
|
887 | 887 | * :ghpull:`2863`: whatsnew/version0.9.txt: Fix '~./ipython' -> '~/.ipython' typo |
|
888 | 888 | * :ghpull:`2861`: add missing KernelManager to ConsoleApp class list |
|
889 | 889 | * :ghpull:`2850`: Consolidate host IP detection in utils.localinterfaces |
|
890 | 890 | * :ghpull:`2859`: Correct docstring of ipython.py |
|
891 | 891 | * :ghpull:`2831`: avoid string version comparisons in external.qt |
|
892 | 892 | * :ghpull:`2844`: this should address the failure in #2732 |
|
893 | 893 | * :ghpull:`2849`: utils/data: Use list comprehension for uniq_stable() |
|
894 | 894 | * :ghpull:`2839`: add jinja to install docs / setup.py |
|
895 | 895 | * :ghpull:`2841`: Miscellaneous docs fixes |
|
896 | 896 | * :ghpull:`2811`: Still more KernelManager cleanup |
|
897 | 897 | * :ghpull:`2820`: add '=' to greedy completer delims |
|
898 | 898 | * :ghpull:`2818`: log user tracebacks in the kernel (INFO-level) |
|
899 | 899 | * :ghpull:`2828`: Clean up notebook Javascript |
|
900 | 900 | * :ghpull:`2829`: avoid comparison error in dictdb hub history |
|
901 | 901 | * :ghpull:`2830`: BUG: Opening parenthesis after non-callable raises ValueError |
|
902 | 902 | * :ghpull:`2718`: try to fallback to pysqlite2.dbapi2 as sqlite3 in core.history |
|
903 | 903 | * :ghpull:`2816`: in %edit, don't save "last_call" unless last call succeeded |
|
904 | 904 | * :ghpull:`2817`: change ol format order |
|
905 | 905 | * :ghpull:`2537`: Organize example notebooks |
|
906 | 906 | * :ghpull:`2815`: update release/authors |
|
907 | 907 | * :ghpull:`2808`: improve patience for slow Hub in client tests |
|
908 | 908 | * :ghpull:`2812`: remove nonfunctional `-la` short arg in cython magic |
|
909 | 909 | * :ghpull:`2810`: remove dead utils.upgradedir |
|
910 | 910 | * :ghpull:`1671`: __future__ environments |
|
911 | 911 | * :ghpull:`2804`: skip ipc tests on Windows |
|
912 | 912 | * :ghpull:`2789`: Fixing styling issues with CellToolbar. |
|
913 | 913 | * :ghpull:`2805`: fix KeyError creating ZMQStreams in notebook |
|
914 | 914 | * :ghpull:`2775`: General cleanup of kernel manager code. |
|
915 | 915 | * :ghpull:`2340`: Initial Code to reduce parallel.Client caching |
|
916 | 916 | * :ghpull:`2799`: Exit code |
|
917 | 917 | * :ghpull:`2800`: use `type(obj) is cls` as switch when canning |
|
918 | 918 | * :ghpull:`2801`: Fix a breakpoint bug |
|
919 | 919 | * :ghpull:`2795`: Remove outdated code from extensions.autoreload |
|
920 | 920 | * :ghpull:`2796`: P3K: fix cookie parsing under Python 3.x (+ duplicate import is removed) |
|
921 | 921 | * :ghpull:`2724`: In-process kernel support (take 3) |
|
922 | 922 | * :ghpull:`2687`: [WIP] Metaui slideshow |
|
923 | 923 | * :ghpull:`2788`: Chrome frame awareness |
|
924 | 924 | * :ghpull:`2649`: Add version_request/reply messaging protocol |
|
925 | 925 | * :ghpull:`2753`: add `%%px --local` for local execution |
|
926 | 926 | * :ghpull:`2783`: Prefilter shouldn't touch execution_count |
|
927 | 927 | * :ghpull:`2333`: UI For Metadata |
|
928 | 928 | * :ghpull:`2396`: create a ipynbv3 json schema and a validator |
|
929 | 929 | * :ghpull:`2757`: check for complete pyside presence before trying to import |
|
930 | 930 | * :ghpull:`2782`: Allow the %run magic with '-b' to specify a file. |
|
931 | 931 | * :ghpull:`2778`: P3K: fix DeprecationWarning under Python 3.x |
|
932 | 932 | * :ghpull:`2776`: remove non-functional View.kill method |
|
933 | 933 | * :ghpull:`2755`: can interactively defined classes |
|
934 | 934 | * :ghpull:`2774`: Removing unused code in the notebook MappingKernelManager. |
|
935 | 935 | * :ghpull:`2773`: Fixed minor typo causing AttributeError to be thrown. |
|
936 | 936 | * :ghpull:`2609`: Add 'unique' option to history_request messaging protocol |
|
937 | 937 | * :ghpull:`2769`: Allow shutdown when no engines are registered |
|
938 | 938 | * :ghpull:`2766`: Define __file__ when we %edit a real file. |
|
939 | 939 | * :ghpull:`2476`: allow %edit <variable> to work when interactively defined |
|
940 | 940 | * :ghpull:`2763`: Reset readline delimiters after loading rmagic. |
|
941 | 941 | * :ghpull:`2460`: Better handling of `__file__` when running scripts. |
|
942 | 942 | * :ghpull:`2617`: Fix for `units` argument. Adds a `res` argument. |
|
943 | 943 | * :ghpull:`2738`: Unicode content crashes the pager (console) |
|
944 | 944 | * :ghpull:`2749`: Tell Travis CI to test on Python 3.3 as well |
|
945 | 945 | * :ghpull:`2744`: Don't show 'try %paste' message while using magics |
|
946 | 946 | * :ghpull:`2728`: shift tab for tooltip |
|
947 | 947 | * :ghpull:`2741`: Add note to `%cython` Black-Scholes example warning of missing erf. |
|
948 | 948 | * :ghpull:`2743`: BUG: Octavemagic inline plots not working on Windows: Fixed |
|
949 | 949 | * :ghpull:`2740`: Following #2737 this error is now a name error |
|
950 | 950 | * :ghpull:`2737`: Rmagic: error message when moving an non-existant variable from python to R |
|
951 | 951 | * :ghpull:`2723`: diverse fixes for project url |
|
952 | 952 | * :ghpull:`2731`: %Rpush: Look for variables in the local scope first. |
|
953 | 953 | * :ghpull:`2544`: Infinite loop when multiple debuggers have been attached. |
|
954 | 954 | * :ghpull:`2726`: Add qthelp docs creation |
|
955 | 955 | * :ghpull:`2730`: added blockquote CSS |
|
956 | 956 | * :ghpull:`2729`: Fix Read the doc build, Again |
|
957 | 957 | * :ghpull:`2446`: [alternate 2267] Offline mathjax |
|
958 | 958 | * :ghpull:`2716`: remove unexisting headings level |
|
959 | 959 | * :ghpull:`2717`: One liner to fix debugger printing stack traces when lines of context are larger than source. |
|
960 | 960 | * :ghpull:`2713`: Doc bugfix: user_ns is not an attribute of Magic objects. |
|
961 | 961 | * :ghpull:`2690`: Fix 'import '... completion for py3 & egg files. |
|
962 | 962 | * :ghpull:`2691`: Document OpenMP in %%cython magic |
|
963 | 963 | * :ghpull:`2699`: fix jinja2 rendering for password protected notebooks |
|
964 | 964 | * :ghpull:`2700`: Skip notebook testing if jinja2 is not available. |
|
965 | 965 | * :ghpull:`2692`: Add %%cython magics to generated documentation. |
|
966 | 966 | * :ghpull:`2685`: Fix pretty print of types when `__module__` is not available. |
|
967 | 967 | * :ghpull:`2686`: Fix tox.ini |
|
968 | 968 | * :ghpull:`2604`: Backslashes are misinterpreted as escape-sequences by the R-interpreter. |
|
969 | 969 | * :ghpull:`2689`: fix error in doc (arg->kwarg) and pep-8 |
|
970 | 970 | * :ghpull:`2683`: for downloads, replaced window.open with window.location.assign |
|
971 | 971 | * :ghpull:`2659`: small bugs in js are fixed |
|
972 | 972 | * :ghpull:`2363`: Refactor notebook templates to use Jinja2 |
|
973 | 973 | * :ghpull:`2662`: qtconsole: wrap argument list in tooltip to match width of text body |
|
974 | 974 | * :ghpull:`2328`: addition of classes to generate a link or list of links from files local to the IPython HTML notebook |
|
975 | 975 | * :ghpull:`2668`: pylab_not_importable: Catch all exceptions, not just RuntimeErrors. |
|
976 | 976 | * :ghpull:`2663`: Fix issue #2660: parsing of help and version arguments |
|
977 | 977 | * :ghpull:`2656`: Fix irunner tests when $PYTHONSTARTUP is set |
|
978 | 978 | * :ghpull:`2312`: Add bracket matching to code cells in notebook |
|
979 | 979 | * :ghpull:`2571`: Start to document Javascript |
|
980 | 980 | * :ghpull:`2641`: undefinied that -> this |
|
981 | 981 | * :ghpull:`2638`: Fix %paste in Python 3 on Mac |
|
982 | 982 | * :ghpull:`2301`: Ast transfomers |
|
983 | 983 | * :ghpull:`2616`: Revamp API docs |
|
984 | 984 | * :ghpull:`2572`: Make 'Paste Above' the default paste behavior. |
|
985 | 985 | * :ghpull:`2574`: Fix #2244 |
|
986 | 986 | * :ghpull:`2582`: Fix displaying history when output cache is disabled. |
|
987 | 987 | * :ghpull:`2591`: Fix for Issue #2584 |
|
988 | 988 | * :ghpull:`2526`: Don't kill paramiko tunnels when receiving ^C |
|
989 | 989 | * :ghpull:`2559`: Add psource, pfile, pinfo2 commands to ipdb. |
|
990 | 990 | * :ghpull:`2546`: use 4 Pythons to build 4 Windows installers |
|
991 | 991 | * :ghpull:`2561`: Fix display of plain text containing multiple carriage returns before line feed |
|
992 | 992 | * :ghpull:`2549`: Add a simple 'undo' for cell deletion. |
|
993 | 993 | * :ghpull:`2525`: Add event to kernel execution/shell reply. |
|
994 | 994 | * :ghpull:`2554`: Avoid stopping in ipdb until we reach the main script. |
|
995 | 995 | * :ghpull:`2404`: Option to limit search result in history magic command |
|
996 | 996 | * :ghpull:`2294`: inputhook_qt4: Use QEventLoop instead of starting up the QCoreApplication |
|
997 | 997 | * :ghpull:`2233`: Refactored Drag and Drop Support in Qt Console |
|
998 | 998 | * :ghpull:`1747`: switch between hsplit and vsplit paging (request for feedback) |
|
999 | 999 | * :ghpull:`2530`: Adding time offsets to the video |
|
1000 | 1000 | * :ghpull:`2542`: Allow starting IPython as `python -m IPython`. |
|
1001 | 1001 | * :ghpull:`2534`: Do not unescape backslashes in Windows (shellglob) |
|
1002 | 1002 | * :ghpull:`2517`: Improved MathJax, bug fixes |
|
1003 | 1003 | * :ghpull:`2511`: trigger default remote_profile_dir when profile_dir is set |
|
1004 | 1004 | * :ghpull:`2491`: color is supported in ironpython |
|
1005 | 1005 | * :ghpull:`2462`: Track which extensions are loaded |
|
1006 | 1006 | * :ghpull:`2464`: Locate URLs in text output and convert them to hyperlinks. |
|
1007 | 1007 | * :ghpull:`2490`: add ZMQInteractiveShell to IPEngineApp class list |
|
1008 | 1008 | * :ghpull:`2498`: Don't catch tab press when something selected |
|
1009 | 1009 | * :ghpull:`2527`: Run All Above and Run All Below |
|
1010 | 1010 | * :ghpull:`2513`: add GitHub uploads to release script |
|
1011 | 1011 | * :ghpull:`2529`: Windows aware tests for shellglob |
|
1012 | 1012 | * :ghpull:`2478`: Fix doctest_run_option_parser for Windows |
|
1013 | 1013 | * :ghpull:`2519`: clear In[ ] prompt numbers again |
|
1014 | 1014 | * :ghpull:`2467`: Clickable links |
|
1015 | 1015 | * :ghpull:`2500`: Add `encoding` attribute to `OutStream` class. |
|
1016 | 1016 | * :ghpull:`2349`: ENH: added StackExchange-style MathJax filtering |
|
1017 | 1017 | * :ghpull:`2503`: Fix traceback handling of SyntaxErrors without line numbers. |
|
1018 | 1018 | * :ghpull:`2492`: add missing 'qtconsole' extras_require |
|
1019 | 1019 | * :ghpull:`2480`: Add deprecation warnings for sympyprinting |
|
1020 | 1020 | * :ghpull:`2334`: Make the ipengine monitor the ipcontroller heartbeat and die if the ipcontroller goes down |
|
1021 | 1021 | * :ghpull:`2479`: use new _winapi instead of removed _subprocess |
|
1022 | 1022 | * :ghpull:`2474`: fix bootstrap name conflicts |
|
1023 | 1023 | * :ghpull:`2469`: Treat __init__.pyc same as __init__.py in module_list |
|
1024 | 1024 | * :ghpull:`2165`: Add -g option to %run to glob expand arguments |
|
1025 | 1025 | * :ghpull:`2468`: Tell git to ignore __pycache__ directories. |
|
1026 | 1026 | * :ghpull:`2421`: Some notebook tweaks. |
|
1027 | 1027 | * :ghpull:`2291`: Remove old plugin system |
|
1028 | 1028 | * :ghpull:`2127`: Ability to build toolbar in JS |
|
1029 | 1029 | * :ghpull:`2445`: changes for ironpython |
|
1030 | 1030 | * :ghpull:`2420`: Pass ipython_dir to __init__() method of TerminalInteractiveShell's superclass. |
|
1031 | 1031 | * :ghpull:`2432`: Revert #1831, the `__file__` injection in safe_execfile / safe_execfile_ipy. |
|
1032 | 1032 | * :ghpull:`2216`: Autochange highlight with cell magics |
|
1033 | 1033 | * :ghpull:`1946`: Add image message handler in ZMQTerminalInteractiveShell |
|
1034 | 1034 | * :ghpull:`2424`: skip find_cmd when setting up script magics |
|
1035 | 1035 | * :ghpull:`2389`: Catch sqlite DatabaseErrors in more places when reading the history database |
|
1036 | 1036 | * :ghpull:`2395`: Don't catch ImportError when trying to unpack module functions |
|
1037 | 1037 | * :ghpull:`1868`: enable IPC transport for kernels |
|
1038 | 1038 | * :ghpull:`2437`: don't let log cleanup prevent engine start |
|
1039 | 1039 | * :ghpull:`2441`: `sys.maxsize` is the maximum length of a container. |
|
1040 | 1040 | * :ghpull:`2442`: allow iptest to be interrupted |
|
1041 | 1041 | * :ghpull:`2240`: fix message built for engine dying during task |
|
1042 | 1042 | * :ghpull:`2369`: Block until kernel termination after sending a kill signal |
|
1043 | 1043 | * :ghpull:`2439`: Py3k: Octal (0777 -> 0o777) |
|
1044 | 1044 | * :ghpull:`2326`: Detachable pager in notebook. |
|
1045 | 1045 | * :ghpull:`2377`: Fix installation of man pages in Python 3 |
|
1046 | 1046 | * :ghpull:`2407`: add IPython version to message headers |
|
1047 | 1047 | * :ghpull:`2408`: Fix Issue #2366 |
|
1048 | 1048 | * :ghpull:`2405`: clarify TaskScheduler.hwm doc |
|
1049 | 1049 | * :ghpull:`2399`: IndentationError display |
|
1050 | 1050 | * :ghpull:`2400`: Add scroll_to_cell(cell_number) to the notebook |
|
1051 | 1051 | * :ghpull:`2401`: unmock read-the-docs modules |
|
1052 | 1052 | * :ghpull:`2311`: always perform requested trait assignments |
|
1053 | 1053 | * :ghpull:`2393`: New option `n` to limit history search hits |
|
1054 | 1054 | * :ghpull:`2386`: Adapt inline backend to changes in matplotlib |
|
1055 | 1055 | * :ghpull:`2392`: Remove suspicious double quote |
|
1056 | 1056 | * :ghpull:`2387`: Added -L library search path to cythonmagic cell magic |
|
1057 | 1057 | * :ghpull:`2370`: qtconsole: Create a prompt newline by inserting a new block (w/o formatting) |
|
1058 | 1058 | * :ghpull:`1715`: Fix for #1688, traceback-unicode issue |
|
1059 | 1059 | * :ghpull:`2378`: use Singleton.instance() for embed() instead of manual global |
|
1060 | 1060 | * :ghpull:`2373`: fix missing imports in core.interactiveshell |
|
1061 | 1061 | * :ghpull:`2368`: remove notification widget leftover |
|
1062 | 1062 | * :ghpull:`2327`: Parallel: Support get/set of nested objects in view (e.g. dv['a.b']) |
|
1063 | 1063 | * :ghpull:`2362`: Clean up ProgressBar class in example notebook |
|
1064 | 1064 | * :ghpull:`2346`: Extra xterm identification in set_term_title |
|
1065 | 1065 | * :ghpull:`2352`: Notebook: Store the username in a cookie whose name is unique. |
|
1066 | 1066 | * :ghpull:`2358`: add backport_pr to tools |
|
1067 | 1067 | * :ghpull:`2365`: fix names of notebooks for download/save |
|
1068 | 1068 | * :ghpull:`2364`: make clients use 'location' properly (fixes #2361) |
|
1069 | 1069 | * :ghpull:`2354`: Refactor notebook templates to use Jinja2 |
|
1070 | 1070 | * :ghpull:`2339`: add bash completion example |
|
1071 | 1071 | * :ghpull:`2345`: Remove references to 'version' no longer in argparse. Github issue #2343. |
|
1072 | 1072 | * :ghpull:`2347`: adjust division error message checking to account for Python 3 |
|
1073 | 1073 | * :ghpull:`2305`: RemoteError._render_traceback_ calls self.render_traceback |
|
1074 | 1074 | * :ghpull:`2338`: Normalize line endings for ipexec_validate, fix for #2315. |
|
1075 | 1075 | * :ghpull:`2192`: Introduce Notification Area |
|
1076 | 1076 | * :ghpull:`2329`: Better error messages for common magic commands. |
|
1077 | 1077 | * :ghpull:`2337`: ENH: added StackExchange-style MathJax filtering |
|
1078 | 1078 | * :ghpull:`2331`: update css for qtconsole in doc |
|
1079 | 1079 | * :ghpull:`2317`: adding cluster_id to parallel.Client.__init__ |
|
1080 | 1080 | * :ghpull:`2130`: Add -l option to %R magic to allow passing in of local namespace |
|
1081 | 1081 | * :ghpull:`2196`: Fix for bad command line argument to latex |
|
1082 | 1082 | * :ghpull:`2300`: bug fix: was crashing when sqlite3 is not installed |
|
1083 | 1083 | * :ghpull:`2184`: Expose store_history to execute_request messages. |
|
1084 | 1084 | * :ghpull:`2308`: Add welcome_message option to enable_pylab |
|
1085 | 1085 | * :ghpull:`2302`: Fix variable expansion on 'self' |
|
1086 | 1086 | * :ghpull:`2299`: Remove code from prefilter that duplicates functionality in inputsplitter |
|
1087 | 1087 | * :ghpull:`2295`: allow pip install from github repository directly |
|
1088 | 1088 | * :ghpull:`2280`: fix SSH passwordless check for OpenSSH |
|
1089 | 1089 | * :ghpull:`2290`: nbmanager |
|
1090 | 1090 | * :ghpull:`2288`: s/assertEquals/assertEqual (again) |
|
1091 | 1091 | * :ghpull:`2287`: Removed outdated dev docs. |
|
1092 | 1092 | * :ghpull:`2218`: Use redirect for new notebooks |
|
1093 | 1093 | * :ghpull:`2277`: nb: up/down arrow keys move to begin/end of line at top/bottom of cell |
|
1094 | 1094 | * :ghpull:`2045`: Refactoring notebook managers and adding Azure backed storage. |
|
1095 | 1095 | * :ghpull:`2271`: use display instead of send_figure in inline backend hooks |
|
1096 | 1096 | * :ghpull:`2278`: allow disabling SQLite history |
|
1097 | 1097 | * :ghpull:`2225`: Add "--annotate" option to `%%cython` magic. |
|
1098 | 1098 | * :ghpull:`2246`: serialize individual args/kwargs rather than the containers |
|
1099 | 1099 | * :ghpull:`2274`: CLN: Use name to id mapping of notebooks instead of searching. |
|
1100 | 1100 | * :ghpull:`2270`: SSHLauncher tweaks |
|
1101 | 1101 | * :ghpull:`2269`: add missing location when disambiguating controller IP |
|
1102 | 1102 | * :ghpull:`2263`: Allow docs to build on http://readthedocs.io/ |
|
1103 | 1103 | * :ghpull:`2256`: Adding data publication example notebook. |
|
1104 | 1104 | * :ghpull:`2255`: better flush iopub with AsyncResults |
|
1105 | 1105 | * :ghpull:`2261`: Fix: longest_substr([]) -> '' |
|
1106 | 1106 | * :ghpull:`2260`: fix mpr again |
|
1107 | 1107 | * :ghpull:`2242`: Document globbing in `%history -g <pattern>`. |
|
1108 | 1108 | * :ghpull:`2250`: fix html in notebook example |
|
1109 | 1109 | * :ghpull:`2245`: Fix regression in embed() from pull-request #2096. |
|
1110 | 1110 | * :ghpull:`2248`: track sha of master in test_pr messages |
|
1111 | 1111 | * :ghpull:`2238`: Fast tests |
|
1112 | 1112 | * :ghpull:`2211`: add data publication message |
|
1113 | 1113 | * :ghpull:`2236`: minor test_pr tweaks |
|
1114 | 1114 | * :ghpull:`2231`: Improve Image format validation and add html width,height |
|
1115 | 1115 | * :ghpull:`2232`: Reapply monkeypatch to inspect.findsource() |
|
1116 | 1116 | * :ghpull:`2235`: remove spurious print statement from setupbase.py |
|
1117 | 1117 | * :ghpull:`2222`: adjust how canning deals with import strings |
|
1118 | 1118 | * :ghpull:`2224`: fix css typo |
|
1119 | 1119 | * :ghpull:`2223`: Custom tracebacks |
|
1120 | 1120 | * :ghpull:`2214`: use KernelApp.exec_lines/files in IPEngineApp |
|
1121 | 1121 | * :ghpull:`2199`: Wrap JS published by %%javascript in try/catch |
|
1122 | 1122 | * :ghpull:`2212`: catch errors in markdown javascript |
|
1123 | 1123 | * :ghpull:`2190`: Update code mirror 2.22 to 2.32 |
|
1124 | 1124 | * :ghpull:`2200`: documentation build broken in bb429da5b |
|
1125 | 1125 | * :ghpull:`2194`: clean nan/inf in json_clean |
|
1126 | 1126 | * :ghpull:`2198`: fix mpr for earlier git version |
|
1127 | 1127 | * :ghpull:`2175`: add FileFindHandler for Notebook static files |
|
1128 | 1128 | * :ghpull:`1990`: can func_defaults |
|
1129 | 1129 | * :ghpull:`2069`: start improving serialization in parallel code |
|
1130 | 1130 | * :ghpull:`2202`: Create a unique & temporary IPYTHONDIR for each testing group. |
|
1131 | 1131 | * :ghpull:`2204`: Work around lack of os.kill in win32. |
|
1132 | 1132 | * :ghpull:`2148`: win32 iptest: Use subprocess.Popen() instead of os.system(). |
|
1133 | 1133 | * :ghpull:`2179`: Pylab switch |
|
1134 | 1134 | * :ghpull:`2124`: Add an API for registering magic aliases. |
|
1135 | 1135 | * :ghpull:`2169`: ipdb: pdef, pdoc, pinfo magics all broken |
|
1136 | 1136 | * :ghpull:`2174`: Ensure consistent indentation in `%magic`. |
|
1137 | 1137 | * :ghpull:`1930`: add size-limiting to the DictDB backend |
|
1138 | 1138 | * :ghpull:`2189`: Fix IPython.lib.latextools for Python 3 |
|
1139 | 1139 | * :ghpull:`2186`: removed references to h5py dependence in octave magic documentation |
|
1140 | 1140 | * :ghpull:`2183`: Include the kernel object in the event object passed to kernel events |
|
1141 | 1141 | * :ghpull:`2185`: added test for %store, fixed storemagic |
|
1142 | 1142 | * :ghpull:`2138`: Use breqn.sty in dvipng backend if possible |
|
1143 | 1143 | * :ghpull:`2182`: handle undefined param in notebooklist |
|
1144 | 1144 | * :ghpull:`1831`: fix #1814 set __file__ when running .ipy files |
|
1145 | 1145 | * :ghpull:`2051`: Add a metadata attribute to messages |
|
1146 | 1146 | * :ghpull:`1471`: simplify IPython.parallel connections and enable Controller Resume |
|
1147 | 1147 | * :ghpull:`2181`: add %%javascript, %%svg, and %%latex display magics |
|
1148 | 1148 | * :ghpull:`2116`: different images in 00_notebook-tour |
|
1149 | 1149 | * :ghpull:`2092`: %prun: Restore `stats.stream` after running `print_stream`. |
|
1150 | 1150 | * :ghpull:`2159`: show message on notebook list if server is unreachable |
|
1151 | 1151 | * :ghpull:`2176`: fix git mpr |
|
1152 | 1152 | * :ghpull:`2152`: [qtconsole] Namespace not empty at startup |
|
1153 | 1153 | * :ghpull:`2177`: remove numpy install from travis/tox scripts |
|
1154 | 1154 | * :ghpull:`2090`: New keybinding for code cell execution + cell insertion |
|
1155 | 1155 | * :ghpull:`2160`: Updating the parallel options pricing example |
|
1156 | 1156 | * :ghpull:`2168`: expand line in cell magics |
|
1157 | 1157 | * :ghpull:`2170`: Fix tab completion with IPython.embed_kernel(). |
|
1158 | 1158 | * :ghpull:`2096`: embed(): Default to the future compiler flags of the calling frame. |
|
1159 | 1159 | * :ghpull:`2163`: fix 'remote_profie_dir' typo in SSH launchers |
|
1160 | 1160 | * :ghpull:`2158`: [2to3 compat ] Tuple params in func defs |
|
1161 | 1161 | * :ghpull:`2089`: Fix unittest DeprecationWarnings |
|
1162 | 1162 | * :ghpull:`2142`: Refactor test_pr.py |
|
1163 | 1163 | * :ghpull:`2140`: 2to3: Apply `has_key` fixer. |
|
1164 | 1164 | * :ghpull:`2131`: Add option append (-a) to %save |
|
1165 | 1165 | * :ghpull:`2117`: use explicit url in notebook example |
|
1166 | 1166 | * :ghpull:`2133`: Tell git that ``*.py`` files contain Python code, for use in word-diffs. |
|
1167 | 1167 | * :ghpull:`2134`: Apply 2to3 `next` fix. |
|
1168 | 1168 | * :ghpull:`2126`: ipcluster broken with any batch launcher (PBS/LSF/SGE) |
|
1169 | 1169 | * :ghpull:`2104`: Windows make file for Sphinx documentation |
|
1170 | 1170 | * :ghpull:`2074`: Make BG color of inline plot configurable |
|
1171 | 1171 | * :ghpull:`2123`: BUG: Look up the `_repr_pretty_` method on the class within the MRO rath... |
|
1172 | 1172 | * :ghpull:`2100`: [in progress] python 2 and 3 compatibility without 2to3, second try |
|
1173 | 1173 | * :ghpull:`2128`: open notebook copy in different tabs |
|
1174 | 1174 | * :ghpull:`2073`: allows password and prefix for notebook |
|
1175 | 1175 | * :ghpull:`1993`: Print View |
|
1176 | 1176 | * :ghpull:`2086`: re-aliad %ed to %edit in qtconsole |
|
1177 | 1177 | * :ghpull:`2110`: Fixes and improvements to the input splitter |
|
1178 | 1178 | * :ghpull:`2101`: fix completer deletting newline |
|
1179 | 1179 | * :ghpull:`2102`: Fix logging on interactive shell. |
|
1180 | 1180 | * :ghpull:`2088`: Fix (some) Python 3.2 ResourceWarnings |
|
1181 | 1181 | * :ghpull:`2064`: conform to pep 3110 |
|
1182 | 1182 | * :ghpull:`2076`: Skip notebook 'static' dir in test suite. |
|
1183 | 1183 | * :ghpull:`2063`: Remove umlauts so py3 installations on LANG=C systems succeed. |
|
1184 | 1184 | * :ghpull:`2068`: record sysinfo in sdist |
|
1185 | 1185 | * :ghpull:`2067`: update tools/release_windows.py |
|
1186 | 1186 | * :ghpull:`2065`: Fix parentheses typo |
|
1187 | 1187 | * :ghpull:`2062`: Remove duplicates and auto-generated files from repo. |
|
1188 | 1188 | * :ghpull:`2061`: use explicit tuple in exception |
|
1189 | 1189 | * :ghpull:`2060`: change minus to \- or \(hy in manpages |
|
1190 | 1190 | |
|
1191 | 1191 | Issues (691): |
|
1192 | 1192 | |
|
1193 | 1193 | * :ghissue:`3940`: Install process documentation overhaul |
|
1194 | 1194 | * :ghissue:`3946`: The PDF option for `--post` should work with lowercase |
|
1195 | 1195 | * :ghissue:`3957`: Notebook help page broken in Firefox |
|
1196 | 1196 | * :ghissue:`3894`: nbconvert test failure |
|
1197 | 1197 | * :ghissue:`3887`: 1.0.0a1 shows blank screen in both firefox and chrome (windows 7) |
|
1198 |
* :ghissue:`3703`: `nbconvert`: Output options -- names and documentat |
|
|
1198 | * :ghissue:`3703`: `nbconvert`: Output options -- names and documentation | |
|
1199 | 1199 | * :ghissue:`3931`: Tab completion not working during debugging in the notebook |
|
1200 | 1200 | * :ghissue:`3936`: Ipcluster plugin is not working with Ipython 1.0dev |
|
1201 | 1201 | * :ghissue:`3941`: IPython Notebook kernel crash on Win7x64 |
|
1202 | 1202 | * :ghissue:`3926`: Ending Notebook renaming dialog with return creates new-line |
|
1203 | 1203 | * :ghissue:`3932`: Incorrect empty docstring |
|
1204 | 1204 | * :ghissue:`3928`: Passing variables to script from the workspace |
|
1205 | 1205 | * :ghissue:`3774`: Notebooks with spaces in their names breaks nbconvert latex graphics |
|
1206 | 1206 | * :ghissue:`3916`: tornado needs its own check |
|
1207 | 1207 | * :ghissue:`3915`: Link to Parallel examples "found on GitHub" broken in docs |
|
1208 | 1208 | * :ghissue:`3895`: Keyboard shortcuts box in notebook doesn't fit the screen |
|
1209 | 1209 | * :ghissue:`3912`: IPython.utils fails automated test for RC1 1.0.0 |
|
1210 | 1210 | * :ghissue:`3636`: Code cell missing highlight on load |
|
1211 | 1211 | * :ghissue:`3897`: under Windows, "ipython3 nbconvert "C:/blabla/first_try.ipynb" --to latex --post PDF" POST processing action fails because of a bad parameter |
|
1212 | 1212 | * :ghissue:`3900`: python3 install syntax errors (OS X 10.8.4) |
|
1213 | 1213 | * :ghissue:`3899`: nbconvert to latex fails on notebooks with spaces in file name |
|
1214 | 1214 | * :ghissue:`3881`: Temporary Working Directory Test Fails |
|
1215 | 1215 | * :ghissue:`2750`: A way to freeze code cells in the notebook |
|
1216 | 1216 | * :ghissue:`3893`: Resize Local Image Files in Notebook doesn't work |
|
1217 | 1217 | * :ghissue:`3823`: nbconvert on windows: tex and paths |
|
1218 | 1218 | * :ghissue:`3885`: under Windows, "ipython3 nbconvert "C:/blabla/first_try.ipynb" --to latex" write "\" instead of "/" to reference file path in the .tex file |
|
1219 | 1219 | * :ghissue:`3889`: test_qt fails due to assertion error 'qt4' != 'qt' |
|
1220 | 1220 | * :ghissue:`3890`: double post, disregard this issue |
|
1221 | 1221 | * :ghissue:`3689`: nbconvert, remaining tests |
|
1222 | 1222 | * :ghissue:`3874`: Up/Down keys don't work to "Search previous command history" (besides Ctrl-p/Ctrl-n) |
|
1223 | 1223 | * :ghissue:`3853`: CodeMirror locks up in the notebook |
|
1224 | 1224 | * :ghissue:`3862`: can only connect to an ipcluster started with v1.0.0-dev (master branch) using an older ipython (v0.13.2), but cannot connect using ipython (v1.0.0-dev) |
|
1225 | 1225 | * :ghissue:`3869`: custom css not working. |
|
1226 | 1226 | * :ghissue:`2960`: Keyboard shortcuts |
|
1227 | 1227 | * :ghissue:`3795`: ipcontroller process goes to 100% CPU, ignores connection requests |
|
1228 | 1228 | * :ghissue:`3553`: Ipython and pylab crashes in windows and canopy |
|
1229 | 1229 | * :ghissue:`3837`: Cannot set custom mathjax url, crash notebook server. |
|
1230 | 1230 | * :ghissue:`3808`: "Naming" releases ? |
|
1231 | 1231 | * :ghissue:`2431`: TypeError: must be string without null bytes, not str |
|
1232 | 1232 | * :ghissue:`3856`: `?` at end of comment causes line to execute |
|
1233 | 1233 | * :ghissue:`3731`: nbconvert: add logging for the different steps of nbconvert |
|
1234 | 1234 | * :ghissue:`3835`: Markdown cells do not render correctly when mathjax is disabled |
|
1235 | 1235 | * :ghissue:`3843`: nbconvert to rst: leftover "In[ ]" |
|
1236 | 1236 | * :ghissue:`3799`: nbconvert: Ability to specify name of output file |
|
1237 | 1237 | * :ghissue:`3726`: Document when IPython.start_ipython() should be used versus IPython.embed() |
|
1238 | 1238 | * :ghissue:`3778`: Add no more readonly view in what's new |
|
1239 | 1239 | * :ghissue:`3754`: No Print View in Notebook in 1.0dev |
|
1240 | 1240 | * :ghissue:`3798`: IPython 0.12.1 Crashes on autocompleting sqlalchemy.func.row_number properties |
|
1241 | 1241 | * :ghissue:`3811`: Opening notebook directly from the command line with multi-directory support installed |
|
1242 | 1242 | * :ghissue:`3775`: Annoying behavior when clicking on cell after execution (Ctrl+Enter) |
|
1243 | 1243 | * :ghissue:`3809`: Possible to add some bpython features? |
|
1244 | 1244 | * :ghissue:`3810`: Printing the contents of an image file messes up shell text |
|
1245 | 1245 | * :ghissue:`3702`: `nbconvert`: Default help message should be that of --help |
|
1246 | 1246 | * :ghissue:`3735`: Nbconvert 1.0.0a1 does not take into account the pdf extensions in graphs |
|
1247 | 1247 | * :ghissue:`3719`: Bad strftime format, for windows, in nbconvert exporter |
|
1248 | 1248 | * :ghissue:`3786`: Zmq errors appearing with `Ctrl-C` in console/qtconsole |
|
1249 | 1249 | * :ghissue:`3019`: disappearing scrollbar on tooltip in Chrome 24 on Ubuntu 12.04 |
|
1250 | 1250 | * :ghissue:`3785`: ipdb completely broken in Qt console |
|
1251 | 1251 | * :ghissue:`3796`: Document the meaning of milestone/issues-tags for users. |
|
1252 | 1252 | * :ghissue:`3788`: Do not auto show tooltip if docstring empty. |
|
1253 | 1253 | * :ghissue:`1366`: [Web page] No link to front page from documentation |
|
1254 | 1254 | * :ghissue:`3739`: nbconvert (to slideshow) misses some of the math in markdown cells |
|
1255 | 1255 | * :ghissue:`3768`: increase and make timeout configurable in console completion. |
|
1256 | 1256 | * :ghissue:`3724`: ipcluster only running on one cpu |
|
1257 | 1257 | * :ghissue:`1592`: better message for unsupported nbformat |
|
1258 | 1258 | * :ghissue:`2049`: Can not stop "ipython kernel" on windows |
|
1259 | 1259 | * :ghissue:`3757`: Need direct entry point to given notebook |
|
1260 | 1260 | * :ghissue:`3745`: ImportError: cannot import name check_linecache_ipython |
|
1261 | 1261 | * :ghissue:`3701`: `nbconvert`: Final output file should be in same directory as input file |
|
1262 | 1262 | * :ghissue:`3738`: history -o works but history with -n produces identical results |
|
1263 | 1263 | * :ghissue:`3740`: error when attempting to run 'make' in docs directory |
|
1264 | 1264 | * :ghissue:`3737`: ipython nbconvert crashes with ValueError: Invalid format string. |
|
1265 | 1265 | * :ghissue:`3730`: nbconvert: unhelpful error when pandoc isn't installed |
|
1266 | 1266 | * :ghissue:`3718`: markdown cell cursor misaligned in notebook |
|
1267 | * :ghissue:`3710`: mutiple input fields for %debug in the notebook after resetting the kernel | |
|
1267 | * :ghissue:`3710`: multiple input fields for %debug in the notebook after resetting the kernel | |
|
1268 | 1268 | * :ghissue:`3713`: PyCharm has problems with IPython working inside PyPy created by virtualenv |
|
1269 | 1269 | * :ghissue:`3712`: Code completion: Complete on dictionary keys |
|
1270 | 1270 | * :ghissue:`3680`: --pylab and --matplotlib flag |
|
1271 | 1271 | * :ghissue:`3698`: nbconvert: Unicode error with minus sign |
|
1272 | 1272 | * :ghissue:`3693`: nbconvert does not process SVGs into PDFs |
|
1273 | 1273 | * :ghissue:`3688`: nbconvert, figures not extracting with Python 3.x |
|
1274 | 1274 | * :ghissue:`3542`: note new dependencies in docs / setup.py |
|
1275 | 1275 | * :ghissue:`2556`: [pagedown] do not target_blank anchor link |
|
1276 | 1276 | * :ghissue:`3684`: bad message when %pylab fails due import *other* than matplotlib |
|
1277 | 1277 | * :ghissue:`3682`: ipython notebook pylab inline import_all=False |
|
1278 | 1278 | * :ghissue:`3596`: MathjaxUtils race condition? |
|
1279 | 1279 | * :ghissue:`1540`: Comment/uncomment selection in notebook |
|
1280 | 1280 | * :ghissue:`2702`: frozen setup: permission denied for default ipython_dir |
|
1281 | 1281 | * :ghissue:`3672`: allow_none on Number-like traits. |
|
1282 | 1282 | * :ghissue:`2411`: add CONTRIBUTING.md |
|
1283 | 1283 | * :ghissue:`481`: IPython terminal issue with Qt4Agg on XP SP3 |
|
1284 | 1284 | * :ghissue:`2664`: How to preserve user variables from import clashing? |
|
1285 | 1285 | * :ghissue:`3436`: enable_pylab(import_all=False) still imports np |
|
1286 | 1286 | * :ghissue:`2630`: lib.pylabtools.figsize : NameError when using Qt4Agg backend and %pylab magic. |
|
1287 | 1287 | * :ghissue:`3154`: Notebook: no event triggered when a Cell is created |
|
1288 | 1288 | * :ghissue:`3579`: Nbconvert: SVG are not transformed to PDF anymore |
|
1289 | 1289 | * :ghissue:`3604`: MathJax rendering problem in `%%latex` cell |
|
1290 | 1290 | * :ghissue:`3668`: AttributeError: 'BlockingKernelClient' object has no attribute 'started_channels' |
|
1291 | 1291 | * :ghissue:`3245`: SyntaxError: encoding declaration in Unicode string |
|
1292 | 1292 | * :ghissue:`3639`: %pylab inline in IPYTHON notebook throws "RuntimeError: Cannot activate multiple GUI eventloops" |
|
1293 | 1293 | * :ghissue:`3663`: frontend deprecation warnings |
|
1294 | 1294 | * :ghissue:`3661`: run -m not behaving like python -m |
|
1295 | 1295 | * :ghissue:`3597`: re-do PR #3531 - allow markdown in Header cell |
|
1296 | 1296 | * :ghissue:`3053`: Markdown in header cells is not rendered |
|
1297 | 1297 | * :ghissue:`3655`: IPython finding its way into pasted strings. |
|
1298 | 1298 | * :ghissue:`3620`: uncaught errors in HTML output |
|
1299 | 1299 | * :ghissue:`3646`: get_dict() error |
|
1300 | 1300 | * :ghissue:`3004`: `%load_ext rmagic` fails when legacy ipy_user_conf.py is installed (in ipython 0.13.1 / OSX 10.8) |
|
1301 | 1301 | * :ghissue:`3638`: setp() issue in ipython notebook with figure references |
|
1302 | 1302 | * :ghissue:`3634`: nbconvert reveal to pdf conversion ignores styling, prints only a single page. |
|
1303 | 1303 | * :ghissue:`1307`: Remove pyreadline workarounds, we now require pyreadline >= 1.7.1 |
|
1304 | 1304 | * :ghissue:`3316`: find_cmd test failure on Windows |
|
1305 | 1305 | * :ghissue:`3494`: input() in notebook doesn't work in Python 3 |
|
1306 | 1306 | * :ghissue:`3427`: Deprecate `$` as mathjax delimiter |
|
1307 | 1307 | * :ghissue:`3625`: Pager does not open from button |
|
1308 | 1308 | * :ghissue:`3149`: Miscellaneous small nbconvert feedback |
|
1309 | 1309 | * :ghissue:`3617`: 256 color escapes support |
|
1310 | 1310 | * :ghissue:`3609`: %pylab inline blows up for single process ipython |
|
1311 | 1311 | * :ghissue:`2934`: Publish the Interactive MPI Demo Notebook |
|
1312 | 1312 | * :ghissue:`3614`: ansi escapes broken in master (ls --color) |
|
1313 | 1313 | * :ghissue:`3610`: If you don't have markdown, python setup.py install says no pygments |
|
1314 | 1314 | * :ghissue:`3547`: %run modules clobber each other |
|
1315 | 1315 | * :ghissue:`3602`: import_item fails when one tries to use DottedObjectName instead of a string |
|
1316 | 1316 | * :ghissue:`3563`: Duplicate tab completions in the notebook |
|
1317 | 1317 | * :ghissue:`3599`: Problems trying to run IPython on python3 without installing... |
|
1318 | 1318 | * :ghissue:`2937`: too long completion in notebook |
|
1319 | 1319 | * :ghissue:`3479`: Write empty name for the notebooks |
|
1320 | 1320 | * :ghissue:`3505`: nbconvert: Failure in specifying user filter |
|
1321 | 1321 | * :ghissue:`1537`: think a bit about namespaces |
|
1322 | 1322 | * :ghissue:`3124`: Long multiline strings in Notebook |
|
1323 | 1323 | * :ghissue:`3464`: run -d message unclear |
|
1324 | 1324 | * :ghissue:`2706`: IPython 0.13.1 ignoring $PYTHONSTARTUP |
|
1325 | 1325 | * :ghissue:`3587`: LaTeX escaping bug in nbconvert when exporting to HTML |
|
1326 | 1326 | * :ghissue:`3213`: Long running notebook died with a coredump |
|
1327 | 1327 | * :ghissue:`3580`: Running ipython with pypy on windows |
|
1328 | 1328 | * :ghissue:`3573`: custom.js not working |
|
1329 | 1329 | * :ghissue:`3544`: IPython.lib test failure on Windows |
|
1330 | 1330 | * :ghissue:`3352`: Install Sphinx extensions |
|
1331 | 1331 | * :ghissue:`2971`: [notebook]user needs to press ctrl-c twice to stop notebook server should be put into terminal window |
|
1332 | 1332 | * :ghissue:`2413`: ipython3 qtconsole fails to install: ipython 0.13 has no such extra feature 'qtconsole' |
|
1333 | 1333 | * :ghissue:`2618`: documentation is incorrect for install process |
|
1334 | 1334 | * :ghissue:`2595`: mac 10.8 qtconsole export history |
|
1335 | 1335 | * :ghissue:`2586`: cannot store aliases |
|
1336 | 1336 | * :ghissue:`2714`: ipython qtconsole print unittest messages in console instead his own window. |
|
1337 | 1337 | * :ghissue:`2669`: cython magic failing to work with openmp. |
|
1338 | 1338 | * :ghissue:`3256`: Vagrant pandas instance of IPython Notebook does not respect additional plotting arguments |
|
1339 | 1339 | * :ghissue:`3010`: cython magic fail if cache dir is deleted while in session |
|
1340 | 1340 | * :ghissue:`2044`: prune unused names from parallel.error |
|
1341 | 1341 | * :ghissue:`1145`: Online help utility broken in QtConsole |
|
1342 | 1342 | * :ghissue:`3439`: Markdown links no longer open in new window (with change from pagedown to marked) |
|
1343 | 1343 | * :ghissue:`3476`: _margv for macros seems to be missing |
|
1344 | 1344 | * :ghissue:`3499`: Add reveal.js library (version 2.4.0) inside IPython |
|
1345 | 1345 | * :ghissue:`2771`: Wiki Migration to GitHub |
|
1346 | 1346 | * :ghissue:`2887`: ipcontroller purging some engines during connect |
|
1347 | 1347 | * :ghissue:`626`: Enable Resuming Controller |
|
1348 | 1348 | * :ghissue:`2824`: Kernel restarting after message "Kernel XXXX failed to respond to heartbeat" |
|
1349 | 1349 | * :ghissue:`2823`: %%cython magic gives ImportError: dlopen(long_file_name.so, 2): image not found |
|
1350 | 1350 | * :ghissue:`2891`: In IPython for Python 3, system site-packages comes before user site-packages |
|
1351 | 1351 | * :ghissue:`2928`: Add magic "watch" function (example) |
|
1352 | 1352 | * :ghissue:`2931`: Problem rendering pandas dataframe in Firefox for Windows |
|
1353 | 1353 | * :ghissue:`2939`: [notebook] Figure legend not shown in inline backend if ouside the box of the axes |
|
1354 | 1354 | * :ghissue:`2972`: [notebook] in Markdown mode, press Enter key at the end of <some http link>, the next line is indented unexpectly |
|
1355 | 1355 | * :ghissue:`3069`: Instructions for installing IPython notebook on Windows |
|
1356 | 1356 | * :ghissue:`3444`: Encoding problem: cannot use if user's name is not ascii? |
|
1357 | 1357 | * :ghissue:`3335`: Reenable bracket matching |
|
1358 | 1358 | * :ghissue:`3386`: Magic %paste not working in Python 3.3.2. TypeError: Type str doesn't support the buffer API |
|
1359 | 1359 | * :ghissue:`3543`: Exception shutting down kernel from notebook dashboard (0.13.1) |
|
1360 | 1360 | * :ghissue:`3549`: Codecell size changes with selection |
|
1361 | 1361 | * :ghissue:`3445`: Adding newlines in %%latex cell |
|
1362 | 1362 | * :ghissue:`3237`: [notebook] Can't close a notebook without errors |
|
1363 | 1363 | * :ghissue:`2916`: colon invokes auto(un)indent in markdown cells |
|
1364 | 1364 | * :ghissue:`2167`: Indent and dedent in htmlnotebook |
|
1365 | 1365 | * :ghissue:`3545`: Notebook save button icon not clear |
|
1366 | 1366 | * :ghissue:`3534`: nbconvert incompatible with Windows? |
|
1367 | 1367 | * :ghissue:`3489`: Update example notebook that raw_input is allowed |
|
1368 | 1368 | * :ghissue:`3396`: Notebook checkpoint time is displayed an hour out |
|
1369 | 1369 | * :ghissue:`3261`: Empty revert to checkpoint menu if no checkpoint... |
|
1370 | 1370 | * :ghissue:`2984`: "print" magic does not work in Python 3 |
|
1371 | 1371 | * :ghissue:`3524`: Issues with pyzmq and ipython on EPD update |
|
1372 | 1372 | * :ghissue:`2434`: %store magic not auto-restoring |
|
1373 | 1373 | * :ghissue:`2720`: base_url and static path |
|
1374 | 1374 | * :ghissue:`2234`: Update various low resolution graphics for retina displays |
|
1375 | 1375 | * :ghissue:`2842`: Remember passwords for pw-protected notebooks |
|
1376 | 1376 | * :ghissue:`3244`: qtconsole: ValueError('close_fds is not supported on Windows platforms if you redirect stdin/stdout/stderr',) |
|
1377 | 1377 | * :ghissue:`2215`: AsyncResult.wait(0) can hang waiting for the client to get results? |
|
1378 | 1378 | * :ghissue:`2268`: provide mean to retrieve static data path |
|
1379 | 1379 | * :ghissue:`1905`: Expose UI for worksheets within each notebook |
|
1380 | 1380 | * :ghissue:`2380`: Qt inputhook prevents modal dialog boxes from displaying |
|
1381 | 1381 | * :ghissue:`3185`: prettify on double // |
|
1382 | 1382 | * :ghissue:`2821`: Test failure: IPython.parallel.tests.test_client.test_resubmit_header |
|
1383 | 1383 | * :ghissue:`2475`: [Notebook] Line is deindented when typing eg a colon in markdown mode |
|
1384 | 1384 | * :ghissue:`2470`: Do not destroy valid notebooks |
|
1385 | 1385 | * :ghissue:`860`: Allow the standalone export of a notebook to HTML |
|
1386 | 1386 | * :ghissue:`2652`: notebook with qt backend crashes at save image location popup |
|
1387 | 1387 | * :ghissue:`1587`: Improve kernel restarting in the notebook |
|
1388 | 1388 | * :ghissue:`2710`: Saving a plot in Mac OS X backend crashes IPython |
|
1389 | 1389 | * :ghissue:`2596`: notebook "Last saved:" is misleading on file opening. |
|
1390 | 1390 | * :ghissue:`2671`: TypeError :NoneType when executed "ipython qtconsole" in windows console |
|
1391 | 1391 | * :ghissue:`2703`: Notebook scrolling breaks after pager is shown |
|
1392 | 1392 | * :ghissue:`2803`: KernelManager and KernelClient should be two separate objects |
|
1393 | 1393 | * :ghissue:`2693`: TerminalIPythonApp configuration fails without ipython_config.py |
|
1394 | 1394 | * :ghissue:`2531`: IPython 0.13.1 python 2 32-bit installer includes 64-bit ipython*.exe launchers in the scripts folder |
|
1395 | 1395 | * :ghissue:`2520`: Control-C kills port forwarding |
|
1396 | 1396 | * :ghissue:`2279`: Setting `__file__` to None breaks Mayavi import |
|
1397 | 1397 | * :ghissue:`2161`: When logged into notebook, long titles are incorrectly positioned |
|
1398 | 1398 | * :ghissue:`1292`: Notebook, Print view should not be editable... |
|
1399 | 1399 | * :ghissue:`1731`: test parallel launchers |
|
1400 | 1400 | * :ghissue:`3227`: Improve documentation of ipcontroller and possible BUG |
|
1401 | 1401 | * :ghissue:`2896`: IPController very unstable |
|
1402 | 1402 | * :ghissue:`3517`: documentation build broken in head |
|
1403 | 1403 | * :ghissue:`3522`: UnicodeDecodeError: 'ascii' codec can't decode byte on Pycharm on Windows |
|
1404 | 1404 | * :ghissue:`3448`: Please include MathJax fonts with IPython Notebook |
|
1405 | 1405 | * :ghissue:`3519`: IPython Parallel map mysteriously turns pandas Series into numpy ndarray |
|
1406 | 1406 | * :ghissue:`3345`: IPython embedded shells ask if I want to exit, but I set confirm_exit = False |
|
1407 | 1407 | * :ghissue:`3509`: IPython won't close without asking "Are you sure?" in Firefox |
|
1408 | * :ghissue:`3471`: Notebook jinja2/markupsafe depedencies in manual | |
|
1408 | * :ghissue:`3471`: Notebook jinja2/markupsafe dependencies in manual | |
|
1409 | 1409 | * :ghissue:`3502`: Notebook broken in master |
|
1410 | 1410 | * :ghissue:`3302`: autoreload does not work in ipython 0.13.x, python 3.3 |
|
1411 | 1411 | * :ghissue:`3475`: no warning when leaving/closing notebook on master without saved changes |
|
1412 | 1412 | * :ghissue:`3490`: No obvious feedback when kernel crashes |
|
1413 | 1413 | * :ghissue:`1912`: Move all autoreload tests to their own group |
|
1414 | 1414 | * :ghissue:`2577`: sh.py and ipython for python 3.3 |
|
1415 | 1415 | * :ghissue:`3467`: %magic doesn't work |
|
1416 | 1416 | * :ghissue:`3501`: Editing markdown cells that wrap has off-by-one errors in cursor positioning |
|
1417 | 1417 | * :ghissue:`3492`: IPython for Python3 |
|
1418 | 1418 | * :ghissue:`3474`: unexpected keyword argument to remove_kernel |
|
1419 | 1419 | * :ghissue:`2283`: TypeError when using '?' after a string in a %logstart session |
|
1420 | 1420 | * :ghissue:`2787`: rmagic and pandas DataFrame |
|
1421 | 1421 | * :ghissue:`2605`: Ellipsis literal triggers AttributeError |
|
1422 | 1422 | * :ghissue:`1179`: Test unicode source in pinfo |
|
1423 | 1423 | * :ghissue:`2055`: drop Python 3.1 support |
|
1424 | 1424 | * :ghissue:`2293`: IPEP 2: Input transformations |
|
1425 | 1425 | * :ghissue:`2790`: %paste and %cpaste not removing "..." lines |
|
1426 | 1426 | * :ghissue:`3480`: Testing fails because iptest.py cannot be found |
|
1427 | 1427 | * :ghissue:`2580`: will not run within PIL build directory |
|
1428 | 1428 | * :ghissue:`2797`: RMagic, Dataframe Conversion Problem |
|
1429 | 1429 | * :ghissue:`2838`: Empty lines disappear from triple-quoted literals. |
|
1430 | 1430 | * :ghissue:`3050`: Broken link on IPython.core.display page |
|
1431 | 1431 | * :ghissue:`3473`: Config not passed down to subcommands |
|
1432 | 1432 | * :ghissue:`3462`: Setting log_format in config file results in error (and no format changes) |
|
1433 | 1433 | * :ghissue:`3311`: Notebook (occasionally) not working on windows (Sophos AV) |
|
1434 | 1434 | * :ghissue:`3461`: Cursor positioning off by a character in auto-wrapped lines |
|
1435 | 1435 | * :ghissue:`3454`: _repr_html_ error |
|
1436 | 1436 | * :ghissue:`3457`: Space in long Paragraph Markdown cell with Chinese or Japanese |
|
1437 | 1437 | * :ghissue:`3447`: Run Cell Does not Work |
|
1438 | 1438 | * :ghissue:`1373`: Last lines in long cells are hidden |
|
1439 | 1439 | * :ghissue:`1504`: Revisit serialization in IPython.parallel |
|
1440 | 1440 | * :ghissue:`1459`: Can't connect to 2 HTTPS notebook servers on the same host |
|
1441 | 1441 | * :ghissue:`678`: Input prompt stripping broken with multiline data structures |
|
1442 | 1442 | * :ghissue:`3001`: IPython.notebook.dirty flag is not set when a cell has unsaved changes |
|
1443 | 1443 | * :ghissue:`3077`: Multiprocessing semantics in parallel.view.map |
|
1444 | 1444 | * :ghissue:`3056`: links across notebooks |
|
1445 | 1445 | * :ghissue:`3120`: Tornado 3.0 |
|
1446 | 1446 | * :ghissue:`3156`: update pretty to use Python 3 style for sets |
|
1447 | 1447 | * :ghissue:`3197`: Can't escape multiple dollar signs in a markdown cell |
|
1448 | 1448 | * :ghissue:`3309`: `Image()` signature/doc improvements |
|
1449 | 1449 | * :ghissue:`3415`: Bug in IPython/external/path/__init__.py |
|
1450 | 1450 | * :ghissue:`3446`: Feature suggestion: Download matplotlib figure to client browser |
|
1451 | 1451 | * :ghissue:`3295`: autoexported notebooks: only export explicitly marked cells |
|
1452 | 1452 | * :ghissue:`3442`: Notebook: Summary table extracted from markdown headers |
|
1453 | 1453 | * :ghissue:`3438`: Zooming notebook in chrome is broken in master |
|
1454 | 1454 | * :ghissue:`1378`: Implement autosave in notebook |
|
1455 | 1455 | * :ghissue:`3437`: Highlighting matching parentheses |
|
1456 | 1456 | * :ghissue:`3435`: module search segfault |
|
1457 | 1457 | * :ghissue:`3424`: ipcluster --version |
|
1458 | 1458 | * :ghissue:`3434`: 0.13.2 Ipython/genutils.py doesn't exist |
|
1459 | 1459 | * :ghissue:`3426`: Feature request: Save by cell and not by line #: IPython %save magic |
|
1460 | 1460 | * :ghissue:`3412`: Non Responsive Kernel: Running a Django development server from an IPython Notebook |
|
1461 | 1461 | * :ghissue:`3408`: Save cell toolbar and slide type metadata in notebooks |
|
1462 | 1462 | * :ghissue:`3246`: %paste regression with blank lines |
|
1463 | 1463 | * :ghissue:`3404`: Weird error with $variable and grep in command line magic (!command) |
|
1464 | 1464 | * :ghissue:`3405`: Key auto-completion in dictionaries? |
|
1465 | 1465 | * :ghissue:`3259`: Codemirror linenumber css broken |
|
1466 | 1466 | * :ghissue:`3397`: Vertical text misalignment in Markdown cells |
|
1467 | 1467 | * :ghissue:`3391`: Revert #3358 once fix integrated into CM |
|
1468 | 1468 | * :ghissue:`3360`: Error 500 while saving IPython notebook |
|
1469 | 1469 | * :ghissue:`3375`: Frequent Safari/Webkit crashes |
|
1470 | 1470 | * :ghissue:`3365`: zmq frontend |
|
1471 | 1471 | * :ghissue:`2654`: User_expression issues |
|
1472 | 1472 | * :ghissue:`3389`: Store history as plain text |
|
1473 | 1473 | * :ghissue:`3388`: Ipython parallel: open TCP connection created for each result returned from engine |
|
1474 | 1474 | * :ghissue:`3385`: setup.py failure on Python 3 |
|
1475 | 1475 | * :ghissue:`3376`: Setting `__module__` to None breaks pretty printing |
|
1476 | 1476 | * :ghissue:`3374`: ipython qtconsole does not display the prompt on OSX |
|
1477 | 1477 | * :ghissue:`3380`: simple call to kernel |
|
1478 | 1478 | * :ghissue:`3379`: TaskRecord key 'started' not set |
|
1479 | 1479 | * :ghissue:`3241`: notebook connection time out |
|
1480 |
* :ghissue:`3334`: magic interpreter interpret |
|
|
1480 | * :ghissue:`3334`: magic interpreter interprets non magic commands? | |
|
1481 | 1481 | * :ghissue:`3326`: python3.3: Type error when launching SGE cluster in IPython notebook |
|
1482 | 1482 | * :ghissue:`3349`: pip3 doesn't run 2to3? |
|
1483 | 1483 | * :ghissue:`3347`: Longlist support in ipdb |
|
1484 | 1484 | * :ghissue:`3343`: Make pip install / easy_install faster |
|
1485 | 1485 | * :ghissue:`3337`: git submodules broke nightly PPA builds |
|
1486 | 1486 | * :ghissue:`3206`: Copy/Paste Regression in QtConsole |
|
1487 | 1487 | * :ghissue:`3329`: Buggy linewrap in Mac OSX Terminal (Mountain Lion) |
|
1488 | 1488 | * :ghissue:`3327`: Qt version check broken |
|
1489 | 1489 | * :ghissue:`3303`: parallel tasks never finish under heavy load |
|
1490 | 1490 | * :ghissue:`1381`: '\\' for equation continuations require an extra '\' in markdown cells |
|
1491 | 1491 | * :ghissue:`3314`: Error launching IPython |
|
1492 | 1492 | * :ghissue:`3306`: Test failure when running on a Vagrant VM |
|
1493 | 1493 | * :ghissue:`3280`: IPython.utils.process.getoutput returns stderr |
|
1494 | 1494 | * :ghissue:`3299`: variables named _ or __ exhibit incorrect behavior |
|
1495 | 1495 | * :ghissue:`3196`: add an "x" or similar to htmlnotebook pager |
|
1496 | 1496 | * :ghissue:`3293`: Several 404 errors for js files Firefox |
|
1497 | 1497 | * :ghissue:`3292`: syntax highlighting in chrome on OSX 10.8.3 |
|
1498 | 1498 | * :ghissue:`3288`: Latest dev version hangs on page load |
|
1499 | 1499 | * :ghissue:`3283`: ipython dev retains directory information after directory change |
|
1500 | 1500 | * :ghissue:`3279`: custom.css is not overridden in the dev IPython (1.0) |
|
1501 | 1501 | * :ghissue:`2727`: %run -m doesn't support relative imports |
|
1502 | 1502 | * :ghissue:`3268`: GFM triple backquote and unknown language |
|
1503 | 1503 | * :ghissue:`3273`: Suppressing all plot related outputs |
|
1504 | 1504 | * :ghissue:`3272`: Backspace while completing load previous page |
|
1505 | 1505 | * :ghissue:`3260`: Js error in savewidget |
|
1506 | 1506 | * :ghissue:`3247`: scrollbar in notebook when not needed? |
|
1507 | 1507 | * :ghissue:`3243`: notebook: option to view json source from browser |
|
1508 | 1508 | * :ghissue:`3265`: 404 errors when running IPython 1.0dev |
|
1509 | 1509 | * :ghissue:`3257`: setup.py not finding submodules |
|
1510 | 1510 | * :ghissue:`3253`: Incorrect Qt and PySide version comparison |
|
1511 | 1511 | * :ghissue:`3248`: Cell magics broken in Qt console |
|
1512 | 1512 | * :ghissue:`3012`: Problems with the less based style.min.css |
|
1513 | 1513 | * :ghissue:`2390`: Image width/height don't work in embedded images |
|
1514 | 1514 | * :ghissue:`3236`: cannot set TerminalIPythonApp.log_format |
|
1515 | 1515 | * :ghissue:`3214`: notebook kernel dies if started with invalid parameter |
|
1516 | 1516 | * :ghissue:`2980`: Remove HTMLCell ? |
|
1517 | 1517 | * :ghissue:`3128`: qtconsole hangs on importing pylab (using X forwarding) |
|
1518 | 1518 | * :ghissue:`3198`: Hitting recursive depth causing all notebook pages to hang |
|
1519 | 1519 | * :ghissue:`3218`: race conditions in profile directory creation |
|
1520 | 1520 | * :ghissue:`3177`: OverflowError execption in handlers.py |
|
1521 | 1521 | * :ghissue:`2563`: core.profiledir.check_startup_dir() doesn't work inside py2exe'd installation |
|
1522 | 1522 | * :ghissue:`3207`: [Feature] folders for ipython notebook dashboard |
|
1523 | 1523 | * :ghissue:`3178`: cell magics do not work with empty lines after #2447 |
|
1524 | 1524 | * :ghissue:`3204`: Default plot() colors unsuitable for red-green colorblind users |
|
1525 | 1525 | * :ghissue:`1789`: ``:\n/*foo`` turns into ``:\n*(foo)`` in triple-quoted strings. |
|
1526 | 1526 | * :ghissue:`3202`: File cell magic fails with blank lines |
|
1527 | 1527 | * :ghissue:`3199`: %%cython -a stopped working? |
|
1528 | 1528 | * :ghissue:`2688`: obsolete imports in import autocompletion |
|
1529 | 1529 | * :ghissue:`3192`: Python2, Unhandled exception, __builtin__.True = False |
|
1530 | 1530 | * :ghissue:`3179`: script magic error message loop |
|
1531 | 1531 | * :ghissue:`3009`: use XDG_CACHE_HOME for cython objects |
|
1532 | 1532 | * :ghissue:`3059`: Bugs in 00_notebook_tour example. |
|
1533 | 1533 | * :ghissue:`3104`: Integrate a javascript file manager into the notebook front end |
|
1534 | 1534 | * :ghissue:`3176`: Particular equation not rendering (notebook) |
|
1535 | 1535 | * :ghissue:`1133`: [notebook] readonly and upload files/UI |
|
1536 | 1536 | * :ghissue:`2975`: [notebook] python file and cell toolbar |
|
1537 | 1537 | * :ghissue:`3017`: SciPy.weave broken in IPython notebook/ qtconsole |
|
1538 | 1538 | * :ghissue:`3161`: paste macro not reading spaces correctly |
|
1539 | 1539 | * :ghissue:`2835`: %paste not working on WinXpSP3/ipython-0.13.1.py2-win32-PROPER.exe/python27 |
|
1540 | 1540 | * :ghissue:`2628`: Make transformers work for lines following decorators |
|
1541 | 1541 | * :ghissue:`2612`: Multiline String containing ":\n?foo\n" confuses interpreter to replace ?foo with get_ipython().magic(u'pinfo foo') |
|
1542 | 1542 | * :ghissue:`2539`: Request: Enable cell magics inside of .ipy scripts |
|
1543 | 1543 | * :ghissue:`2507`: Multiline string does not work (includes `...`) with doctest type input in IPython notebook |
|
1544 | 1544 | * :ghissue:`2164`: Request: Line breaks in line magic command |
|
1545 | 1545 | * :ghissue:`3106`: poor parallel performance with many jobs |
|
1546 | 1546 | * :ghissue:`2438`: print inside multiprocessing crashes Ipython kernel |
|
1547 | 1547 | * :ghissue:`3155`: Bad md5 hash for package 0.13.2 |
|
1548 | 1548 | * :ghissue:`3045`: [Notebook] Ipython Kernel does not start if disconnected from internet(/network?) |
|
1549 | 1549 | * :ghissue:`3146`: Using celery in python 3.3 |
|
1550 | 1550 | * :ghissue:`3145`: The notebook viewer is down |
|
1551 | 1551 | * :ghissue:`2385`: grep --color not working well with notebook |
|
1552 | 1552 | * :ghissue:`3131`: Quickly install from source in a clean virtualenv? |
|
1553 | 1553 | * :ghissue:`3139`: Rolling log for ipython |
|
1554 | 1554 | * :ghissue:`3127`: notebook with pylab=inline appears to call figure.draw twice |
|
1555 | 1555 | * :ghissue:`3129`: Walking up and down the call stack |
|
1556 | 1556 | * :ghissue:`3123`: Notebook crashed if unplugged ethernet cable |
|
1557 | 1557 | * :ghissue:`3121`: NB should use normalize.css? was #3049 |
|
1558 | 1558 | * :ghissue:`3087`: Disable spellchecking in notebook |
|
1559 | 1559 | * :ghissue:`3084`: ipython pyqt 4.10 incompatibilty, QTextBlockUserData |
|
1560 | 1560 | * :ghissue:`3113`: Fails to install under Jython 2.7 beta |
|
1561 | 1561 | * :ghissue:`3110`: Render of h4 headers is not correct in notebook (error in renderedhtml.css) |
|
1562 | 1562 | * :ghissue:`3109`: BUG: read_csv: dtype={'id' : np.str}: Datatype not understood |
|
1563 | 1563 | * :ghissue:`3107`: Autocompletion of object attributes in arrays |
|
1564 | 1564 | * :ghissue:`3103`: Reset locale setting in qtconsole |
|
1565 | 1565 | * :ghissue:`3090`: python3.3 Entry Point not found |
|
1566 | 1566 | * :ghissue:`3081`: UnicodeDecodeError when using Image(data="some.jpeg") |
|
1567 | 1567 | * :ghissue:`2834`: url regexp only finds one link |
|
1568 | 1568 | * :ghissue:`3091`: qtconsole breaks doctest.testmod() in Python 3.3 |
|
1569 | 1569 | * :ghissue:`3074`: SIGUSR1 not available on Windows |
|
1570 | 1570 | * :ghissue:`2996`: registration::purging stalled registration high occurrence in small clusters |
|
1571 | 1571 | * :ghissue:`3065`: diff-ability of notebooks |
|
1572 | 1572 | * :ghissue:`3067`: Crash with pygit2 |
|
1573 | 1573 | * :ghissue:`3061`: Bug handling Ellipsis |
|
1574 | 1574 | * :ghissue:`3049`: NB css inconsistent behavior between ff and webkit |
|
1575 | 1575 | * :ghissue:`3039`: unicode errors when opening a new notebook |
|
1576 | 1576 | * :ghissue:`3048`: Installning ipython qtConsole should be easyer att Windows |
|
1577 | 1577 | * :ghissue:`3042`: Profile creation fails on 0.13.2 branch |
|
1578 | 1578 | * :ghissue:`3035`: docstring typo/inconsistency: mention of an xml notebook format? |
|
1579 | 1579 | * :ghissue:`3031`: HDF5 library segfault (possibly due to mismatching headers?) |
|
1580 | 1580 | * :ghissue:`2991`: In notebook importing sympy closes ipython kernel |
|
1581 | 1581 | * :ghissue:`3027`: f.__globals__ causes an error in Python 3.3 |
|
1582 | 1582 | * :ghissue:`3020`: Failing test test_interactiveshell.TestAstTransform on Windows |
|
1583 | 1583 | * :ghissue:`3023`: alt text for "click to expand output" has typo in alt text |
|
1584 | 1584 | * :ghissue:`2963`: %history to print all input history of a previous session when line range is omitted |
|
1585 | 1585 | * :ghissue:`3018`: IPython installed within virtualenv. WARNING "Please install IPython inside the virtualtenv" |
|
1586 | 1586 | * :ghissue:`2484`: Completion in Emacs *Python* buffer causes prompt to be increased. |
|
1587 | 1587 | * :ghissue:`3014`: Ctrl-C finishes notebook immediately |
|
1588 | 1588 | * :ghissue:`3007`: cython_pyximport reload broken in python3 |
|
1589 | 1589 | * :ghissue:`2955`: Incompatible Qt imports when running inprocess_qtconsole |
|
1590 | 1590 | * :ghissue:`3006`: [IPython 0.13.1] The check of PyQt version is wrong |
|
1591 | 1591 | * :ghissue:`3005`: Renaming a notebook to an existing notebook name overwrites the other file |
|
1592 | 1592 | * :ghissue:`2940`: Abort trap in IPython Notebook after installing matplotlib |
|
1593 | 1593 | * :ghissue:`3000`: issue #3000 |
|
1594 | 1594 | * :ghissue:`2995`: ipython_directive.py fails on multiline when prompt number < 100 |
|
1595 | 1595 | * :ghissue:`2993`: File magic (%%file) does not work with paths beginning with tilde (e.g., ~/anaconda/stuff.txt) |
|
1596 | 1596 | * :ghissue:`2992`: Cell-based input for console and qt frontends? |
|
1597 | 1597 | * :ghissue:`2425`: Liaise with Spyder devs to integrate newer IPython |
|
1598 | 1598 | * :ghissue:`2986`: requesting help in a loop can damage a notebook |
|
1599 | 1599 | * :ghissue:`2978`: v1.0-dev build errors on Arch with Python 3. |
|
1600 | 1600 | * :ghissue:`2557`: [refactor] Insert_cell_at_index() |
|
1601 | 1601 | * :ghissue:`2969`: ipython command does not work in terminal |
|
1602 | 1602 | * :ghissue:`2762`: OSX wxPython (osx_cocoa, 64bit) command "%gui wx" blocks the interpreter |
|
1603 | 1603 | * :ghissue:`2956`: Silent importing of submodules differs from standard Python3.2 interpreter's behavior |
|
1604 | 1604 | * :ghissue:`2943`: Up arrow key history search gets stuck in QTConsole |
|
1605 | 1605 | * :ghissue:`2953`: using 'nonlocal' declaration in global scope causes ipython3 crash |
|
1606 | 1606 | * :ghissue:`2952`: qtconsole ignores exec_lines |
|
1607 | 1607 | * :ghissue:`2949`: ipython crashes due to atexit() |
|
1608 | 1608 | * :ghissue:`2947`: From rmagic to an R console |
|
1609 | 1609 | * :ghissue:`2938`: docstring pane not showing in notebook |
|
1610 | 1610 | * :ghissue:`2936`: Tornado assumes invalid signature for parse_qs on Python 3.1 |
|
1611 | 1611 | * :ghissue:`2935`: unable to find python after easy_install / pip install |
|
1612 | 1612 | * :ghissue:`2920`: Add undo-cell deletion menu |
|
1613 | 1613 | * :ghissue:`2914`: BUG:saving a modified .py file after loading a module kills the kernel |
|
1614 | 1614 | * :ghissue:`2925`: BUG: kernel dies if user sets sys.stderr or sys.stdout to a file object |
|
1615 | 1615 | * :ghissue:`2909`: LaTeX sometimes fails to render in markdown cells with some curly bracket + underscore combinations |
|
1616 | 1616 | * :ghissue:`2898`: Skip ipc tests on Windows |
|
1617 | 1617 | * :ghissue:`2902`: ActiveState attempt to build ipython 0.12.1 for python 3.2.2 for Mac OS failed |
|
1618 | 1618 | * :ghissue:`2899`: Test failure in IPython.core.tests.test_magic.test_time |
|
1619 | 1619 | * :ghissue:`2890`: Test failure when fabric not installed |
|
1620 | 1620 | * :ghissue:`2892`: IPython tab completion bug for paths |
|
1621 | 1621 | * :ghissue:`1340`: Allow input cells to be collapsed |
|
1622 | 1622 | * :ghissue:`2881`: ? command in notebook does not show help in Safari |
|
1623 | 1623 | * :ghissue:`2751`: %%timeit should use minutes to format running time in long running cells |
|
1624 | 1624 | * :ghissue:`2879`: When importing a module with a wrong name, ipython crashes |
|
1625 | 1625 | * :ghissue:`2862`: %%timeit should warn of empty contents |
|
1626 | 1626 | * :ghissue:`2485`: History navigation breaks in qtconsole |
|
1627 | 1627 | * :ghissue:`2785`: gevent input hook |
|
1628 | 1628 | * :ghissue:`2843`: Sliently running code in clipboard (with paste, cpaste and variants) |
|
1629 | 1629 | * :ghissue:`2784`: %run -t -N<N> error |
|
1630 | 1630 | * :ghissue:`2732`: Test failure with FileLinks class on Windows |
|
1631 | 1631 | * :ghissue:`2860`: ipython help notebook -> KeyError: 'KernelManager' |
|
1632 | 1632 | * :ghissue:`2858`: Where is the installed `ipython` script? |
|
1633 | 1633 | * :ghissue:`2856`: Edit code entered from ipython in external editor |
|
1634 | 1634 | * :ghissue:`2722`: IPC transport option not taking effect ? |
|
1635 | 1635 | * :ghissue:`2473`: Better error messages in ipengine/ipcontroller |
|
1636 | 1636 | * :ghissue:`2836`: Cannot send builtin module definitions to IP engines |
|
1637 | 1637 | * :ghissue:`2833`: Any reason not to use super() ? |
|
1638 | 1638 | * :ghissue:`2781`: Cannot interrupt infinite loops in the notebook |
|
1639 | 1639 | * :ghissue:`2150`: clippath_demo.py in matplotlib example does not work with inline backend |
|
1640 | 1640 | * :ghissue:`2634`: Numbered list in notebook markdown cell renders with Roman numerals instead of numbers |
|
1641 | 1641 | * :ghissue:`2230`: IPython crashing during startup with "AttributeError: 'NoneType' object has no attribute 'rstrip'" |
|
1642 | 1642 | * :ghissue:`2483`: nbviewer bug? with multi-file gists |
|
1643 | 1643 | * :ghissue:`2466`: mistyping `ed -p` breaks `ed -p` |
|
1644 | 1644 | * :ghissue:`2477`: Glob expansion tests fail on Windows |
|
1645 | 1645 | * :ghissue:`2622`: doc issue: notebooks that ship with Ipython .13 are written for python 2.x |
|
1646 | 1646 | * :ghissue:`2626`: Add "Cell -> Run All Keep Going" for notebooks |
|
1647 | 1647 | * :ghissue:`1223`: Show last modification date of each notebook |
|
1648 | 1648 | * :ghissue:`2621`: user request: put link to example notebooks in Dashboard |
|
1649 | 1649 | * :ghissue:`2564`: grid blanks plots in ipython pylab inline mode (interactive) |
|
1650 | 1650 | * :ghissue:`2532`: Django shell (IPython) gives NameError on dict comprehensions |
|
1651 | 1651 | * :ghissue:`2188`: ipython crashes on ctrl-c |
|
1652 | 1652 | * :ghissue:`2391`: Request: nbformat API to load/save without changing version |
|
1653 | 1653 | * :ghissue:`2355`: Restart kernel message even though kernel is perfectly alive |
|
1654 | 1654 | * :ghissue:`2306`: Garbled input text after reverse search on Mac OS X |
|
1655 | 1655 | * :ghissue:`2297`: ipdb with separate kernel/client pushing stdout to kernel process only |
|
1656 | 1656 | * :ghissue:`2180`: Have [kernel busy] overridden only by [kernel idle] |
|
1657 | 1657 | * :ghissue:`1188`: Pylab with OSX backend keyboard focus issue and hang |
|
1658 | 1658 | * :ghissue:`2107`: test_octavemagic.py[everything] fails |
|
1659 | 1659 | * :ghissue:`1212`: Better understand/document browser compatibility |
|
1660 | 1660 | * :ghissue:`1585`: Refactor notebook templates to use Jinja2 and make each page a separate directory |
|
1661 | 1661 | * :ghissue:`1443`: xticks scaling factor partially obscured with qtconsole and inline plotting |
|
1662 | 1662 | * :ghissue:`1209`: can't make %result work as in doc. |
|
1663 | 1663 | * :ghissue:`1200`: IPython 0.12 Windows install fails on Vista |
|
1664 | 1664 | * :ghissue:`1127`: Interactive test scripts for Qt/nb issues |
|
1665 | 1665 | * :ghissue:`959`: Matplotlib figures hide |
|
1666 | 1666 | * :ghissue:`2071`: win32 installer issue on Windows XP |
|
1667 | 1667 | * :ghissue:`2610`: ZMQInteractiveShell.colors being ignored |
|
1668 | 1668 | * :ghissue:`2505`: Markdown Cell incorrectly highlighting after "<" |
|
1669 | 1669 | * :ghissue:`165`: Installer fails to create Start Menu entries on Windows |
|
1670 | 1670 | * :ghissue:`2356`: failing traceback in terminal ipython for first exception |
|
1671 | 1671 | * :ghissue:`2145`: Have dashboad show when server disconect |
|
1672 | 1672 | * :ghissue:`2098`: Do not crash on kernel shutdow if json file is missing |
|
1673 | 1673 | * :ghissue:`2813`: Offline MathJax is broken on 0.14dev |
|
1674 | 1674 | * :ghissue:`2807`: Test failure: IPython.parallel.tests.test_client.TestClient.test_purge_everything |
|
1675 | 1675 | * :ghissue:`2486`: Readline's history search in ipython console does not clear properly after cancellation with Ctrl+C |
|
1676 | 1676 | * :ghissue:`2709`: Cython -la doesn't work |
|
1677 | 1677 | * :ghissue:`2767`: What is IPython.utils.upgradedir ? |
|
1678 | 1678 | * :ghissue:`2210`: Placing matplotlib legend outside axis bounds causes inline display to clip it |
|
1679 | 1679 | * :ghissue:`2553`: IPython Notebooks not robust against client failures |
|
1680 | 1680 | * :ghissue:`2536`: ImageDraw in Ipython notebook not drawing lines |
|
1681 | 1681 | * :ghissue:`2264`: Feature request: Versioning messaging protocol |
|
1682 | 1682 | * :ghissue:`2589`: Creation of ~300+ MPI-spawned engines causes instability in ipcluster |
|
1683 | 1683 | * :ghissue:`2672`: notebook: inline option without pylab |
|
1684 | 1684 | * :ghissue:`2673`: Indefinite Articles & Traitlets |
|
1685 | 1685 | * :ghissue:`2705`: Notebook crashes Safari with select and drag |
|
1686 | 1686 | * :ghissue:`2721`: dreload kills ipython when it hits zmq |
|
1687 | 1687 | * :ghissue:`2806`: ipython.parallel doesn't discover globals under Python 3.3 |
|
1688 | 1688 | * :ghissue:`2794`: _exit_code behaves differently in terminal vs ZMQ frontends |
|
1689 | 1689 | * :ghissue:`2793`: IPython.parallel issue with pushing pandas TimeSeries |
|
1690 | 1690 | * :ghissue:`1085`: In process kernel for Qt frontend |
|
1691 | 1691 | * :ghissue:`2760`: IndexError: list index out of range with Python 3.2 |
|
1692 | 1692 | * :ghissue:`2780`: Save and load notebooks from github |
|
1693 | 1693 | * :ghissue:`2772`: AttributeError: 'Client' object has no attribute 'kill' |
|
1694 | 1694 | * :ghissue:`2754`: Fail to send class definitions from interactive session to engines namespaces |
|
1695 | 1695 | * :ghissue:`2764`: TypeError while using 'cd' |
|
1696 | 1696 | * :ghissue:`2765`: name '__file__' is not defined |
|
1697 | 1697 | * :ghissue:`2540`: Wrap tooltip if line exceeds threshold? |
|
1698 | 1698 | * :ghissue:`2394`: Startup error on ipython qtconsole (version 0.13 and 0.14-dev |
|
1699 | 1699 | * :ghissue:`2440`: IPEP 4: Python 3 Compatibility |
|
1700 | 1700 | * :ghissue:`1814`: __file__ is not defined when file end with .ipy |
|
1701 | 1701 | * :ghissue:`2759`: R magic extension interferes with tab completion |
|
1702 | 1702 | * :ghissue:`2615`: Small change needed to rmagic extension. |
|
1703 | 1703 | * :ghissue:`2748`: collapse parts of a html notebook |
|
1704 | 1704 | * :ghissue:`1661`: %paste still bugs about IndentationError and says to use %paste |
|
1705 | 1705 | * :ghissue:`2742`: Octavemagic fails to deliver inline images in IPython (on Windows) |
|
1706 | 1706 | * :ghissue:`2739`: wiki.ipython.org contaminated with prescription drug spam |
|
1707 | 1707 | * :ghissue:`2588`: Link error while executing code from cython example notebook |
|
1708 | 1708 | * :ghissue:`2550`: Rpush magic doesn't find local variables and doesn't support comma separated lists of variables |
|
1709 | 1709 | * :ghissue:`2675`: Markdown/html blockquote need css. |
|
1710 | 1710 | * :ghissue:`2419`: TerminalInteractiveShell.__init__() ignores value of ipython_dir argument |
|
1711 | 1711 | * :ghissue:`1523`: Better LaTeX printing in the qtconsole with the sympy profile |
|
1712 | 1712 | * :ghissue:`2719`: ipython fails with `pkg_resources.DistributionNotFound: ipython==0.13` |
|
1713 | 1713 | * :ghissue:`2715`: url crashes nbviewer.ipython.org |
|
1714 | 1714 | * :ghissue:`2555`: "import" module completion on MacOSX |
|
1715 | 1715 | * :ghissue:`2707`: Problem installing the new version of IPython in Windows |
|
1716 | 1716 | * :ghissue:`2696`: SymPy magic bug in IPython Notebook |
|
1717 | 1717 | * :ghissue:`2684`: pretty print broken for types created with PyType_FromSpec |
|
1718 | 1718 | * :ghissue:`2533`: rmagic breaks on Windows |
|
1719 | 1719 | * :ghissue:`2661`: Qtconsole tooltip is too wide when the function has many arguments |
|
1720 | 1720 | * :ghissue:`2679`: ipython3 qtconsole via Homebrew on Mac OS X 10.8 - pyqt/pyside import error |
|
1721 | 1721 | * :ghissue:`2646`: pylab_not_importable |
|
1722 | 1722 | * :ghissue:`2587`: cython magic pops 2 CLI windows upon execution on Windows |
|
1723 | 1723 | * :ghissue:`2660`: Certain arguments (-h, --help, --version) never passed to scripts run with ipython |
|
1724 | 1724 | * :ghissue:`2665`: Missing docs for rmagic and some other extensions |
|
1725 | 1725 | * :ghissue:`2611`: Travis wants to drop 3.1 support |
|
1726 | 1726 | * :ghissue:`2658`: Incorrect parsing of raw multiline strings |
|
1727 | 1727 | * :ghissue:`2655`: Test fails if `from __future__ import print_function` in .pythonrc.py |
|
1728 | 1728 | * :ghissue:`2651`: nonlocal with no existing variable produces too many errors |
|
1729 | 1729 | * :ghissue:`2645`: python3 is a pain (minor unicode bug) |
|
1730 | 1730 | * :ghissue:`2637`: %paste in Python 3 on Mac doesn't work |
|
1731 | 1731 | * :ghissue:`2624`: Error on launching IPython on Win 7 and Python 2.7.3 |
|
1732 | 1732 | * :ghissue:`2608`: disk IO activity on cursor press |
|
1733 | 1733 | * :ghissue:`1275`: Markdown parses LaTeX math symbols as its formatting syntax in notebook |
|
1734 | 1734 | * :ghissue:`2613`: display(Math(...)) doesn't render \tau correctly |
|
1735 | 1735 | * :ghissue:`925`: Tab-completion in Qt console needn't use pager |
|
1736 | 1736 | * :ghissue:`2607`: %load_ext sympy.interactive.ipythonprinting dammaging output |
|
1737 | 1737 | * :ghissue:`2593`: Toolbar button to open qtconsole from notebook |
|
1738 | 1738 | * :ghissue:`2602`: IPython html documentation for downloading |
|
1739 | 1739 | * :ghissue:`2598`: ipython notebook --pylab=inline replaces built-in any() |
|
1740 | 1740 | * :ghissue:`2244`: small issue: wrong printout |
|
1741 | 1741 | * :ghissue:`2590`: add easier way to execute scripts in the current directory |
|
1742 | 1742 | * :ghissue:`2581`: %hist does not work when InteractiveShell.cache_size = 0 |
|
1743 | 1743 | * :ghissue:`2584`: No file COPYING |
|
1744 | 1744 | * :ghissue:`2578`: AttributeError: 'module' object has no attribute 'TestCase' |
|
1745 | 1745 | * :ghissue:`2576`: One of my notebooks won't load any more -- is there a maximum notebook size? |
|
1746 | 1746 | * :ghissue:`2560`: Notebook output is invisible when printing strings with \r\r\n line endings |
|
1747 | 1747 | * :ghissue:`2566`: if pyside partially present ipython qtconsole fails to load even if pyqt4 present |
|
1748 | 1748 | * :ghissue:`1308`: ipython qtconsole --ssh=server --existing ... hangs |
|
1749 | 1749 | * :ghissue:`1679`: List command doesn't work in ipdb debugger the first time |
|
1750 | 1750 | * :ghissue:`2545`: pypi win32 installer creates 64bit executibles |
|
1751 | 1751 | * :ghissue:`2080`: Event loop issues with IPython 0.12 and PyQt4 (``QDialog.exec_`` and more) |
|
1752 | 1752 | * :ghissue:`2541`: Allow `python -m IPython` |
|
1753 | 1753 | * :ghissue:`2508`: subplots_adjust() does not work correctly in ipython notebook |
|
1754 | 1754 | * :ghissue:`2289`: Incorrect mathjax rendering of certain arrays of equations |
|
1755 | 1755 | * :ghissue:`2487`: Selecting and indenting |
|
1756 | 1756 | * :ghissue:`2521`: more fine-grained 'run' controls, such as 'run from here' and 'run until here' |
|
1757 | 1757 | * :ghissue:`2535`: Funny bounding box when plot with text |
|
1758 | 1758 | * :ghissue:`2523`: History not working |
|
1759 | 1759 | * :ghissue:`2514`: Issue with zooming in qtconsole |
|
1760 | 1760 | * :ghissue:`2220`: No sys.stdout.encoding in kernel based IPython |
|
1761 | 1761 | * :ghissue:`2512`: ERROR: Internal Python error in the inspect module. |
|
1762 | 1762 | * :ghissue:`2496`: Function passwd does not work in QtConsole |
|
1763 | 1763 | * :ghissue:`1453`: make engines reconnect/die when controller was restarted |
|
1764 | 1764 | * :ghissue:`2481`: ipython notebook -- clicking in a code cell's output moves the screen to the top of the code cell |
|
1765 | 1765 | * :ghissue:`2488`: Undesired plot outputs in Notebook inline mode |
|
1766 | 1766 | * :ghissue:`2482`: ipython notebook -- download may not get the latest notebook |
|
1767 | 1767 | * :ghissue:`2471`: _subprocess module removed in Python 3.3 |
|
1768 | 1768 | * :ghissue:`2374`: Issues with man pages |
|
1769 | 1769 | * :ghissue:`2316`: parallel.Client.__init__ should take cluster_id kwarg |
|
1770 | 1770 | * :ghissue:`2457`: Can a R library wrapper be created with Rmagic? |
|
1771 | 1771 | * :ghissue:`1575`: Fallback frontend for console when connecting pylab=inlnie -enabled kernel? |
|
1772 | 1772 | * :ghissue:`2097`: Do not crash if history db is corrupted |
|
1773 | 1773 | * :ghissue:`2435`: ipengines fail if clean_logs enabled |
|
1774 | 1774 | * :ghissue:`2429`: Using warnings.warn() results in TypeError |
|
1775 | 1775 | * :ghissue:`2422`: Multiprocessing in ipython notebook kernel crash |
|
1776 | 1776 | * :ghissue:`2426`: ipython crashes with the following message. I do not what went wrong. Can you help me identify the problem? |
|
1777 | 1777 | * :ghissue:`2423`: Docs typo? |
|
1778 | 1778 | * :ghissue:`2257`: pip install -e fails |
|
1779 | 1779 | * :ghissue:`2418`: rmagic can't run R's read.csv on data files with NA data |
|
1780 | 1780 | * :ghissue:`2417`: HTML notebook: Backspace sometimes deletes multiple characters |
|
1781 | 1781 | * :ghissue:`2275`: notebook: "Down_Arrow" on last line of cell should move to end of line |
|
1782 | 1782 | * :ghissue:`2414`: 0.13.1 does not work with current EPD 7.3-2 |
|
1783 | 1783 | * :ghissue:`2409`: there is a redundant None |
|
1784 | 1784 | * :ghissue:`2410`: Use /usr/bin/python3 instead of /usr/bin/python |
|
1785 | 1785 | * :ghissue:`2366`: Notebook Dashboard --notebook-dir and fullpath |
|
1786 | 1786 | * :ghissue:`2406`: Inability to get docstring in debugger |
|
1787 | 1787 | * :ghissue:`2398`: Show line number for IndentationErrors |
|
1788 | 1788 | * :ghissue:`2314`: HTML lists seem to interfere with the QtConsole display |
|
1789 | 1789 | * :ghissue:`1688`: unicode exception when using %run with failing script |
|
1790 | 1790 | * :ghissue:`1884`: IPython.embed changes color on error |
|
1791 | 1791 | * :ghissue:`2381`: %time doesn't work for multiline statements |
|
1792 | 1792 | * :ghissue:`1435`: Add size keywords in Image class |
|
1793 | 1793 | * :ghissue:`2372`: interactiveshell.py misses urllib and io_open imports |
|
1794 | 1794 | * :ghissue:`2371`: IPython not working |
|
1795 | 1795 | * :ghissue:`2367`: Tab expansion moves to next cell in notebook |
|
1796 | 1796 | * :ghissue:`2359`: nbviever alters the order of print and display() output |
|
1797 | 1797 | * :ghissue:`2227`: print name for IPython Notebooks has become uninformative |
|
1798 | 1798 | * :ghissue:`2361`: client doesn't use connection file's 'location' in disambiguating 'interface' |
|
1799 | 1799 | * :ghissue:`2357`: failing traceback in terminal ipython for first exception |
|
1800 | 1800 | * :ghissue:`2343`: Installing in a python 3.3b2 or python 3.3rc1 virtual environment. |
|
1801 | 1801 | * :ghissue:`2315`: Failure in test: "Test we're not loading modules on startup that we shouldn't." |
|
1802 | 1802 | * :ghissue:`2351`: Multiple Notebook Apps: cookies not port specific, clash with each other |
|
1803 | 1803 | * :ghissue:`2350`: running unittest from qtconsole prints output to terminal |
|
1804 | 1804 | * :ghissue:`2303`: remote tracebacks broken since 952d0d6 (PR #2223) |
|
1805 | 1805 | * :ghissue:`2330`: qtconsole does not highlight tab-completion suggestion with custom stylesheet |
|
1806 | 1806 | * :ghissue:`2325`: Parsing Tex formula fails in Notebook |
|
1807 | 1807 | * :ghissue:`2324`: Parsing Tex formula fails |
|
1808 | 1808 | * :ghissue:`1474`: Add argument to `run -n` for custom namespace |
|
1809 | 1809 | * :ghissue:`2318`: C-m n/p don't work in Markdown cells in the notebook |
|
1810 | 1810 | * :ghissue:`2309`: time.time() in ipython notebook producing impossible results |
|
1811 | 1811 | * :ghissue:`2307`: schedule tasks on newly arrived engines |
|
1812 | 1812 | * :ghissue:`2313`: Allow Notebook HTML/JS to send messages to Python code |
|
1813 | 1813 | * :ghissue:`2304`: ipengine throws KeyError: url |
|
1814 | 1814 | * :ghissue:`1878`: shell access using ! will not fill class or function scope vars |
|
1815 | 1815 | * :ghissue:`2253`: %paste does not retrieve clipboard contents under screen/tmux on OS X |
|
1816 | 1816 | * :ghissue:`1510`: Add-on (or Monkey-patch) infrastructure for HTML notebook |
|
1817 | 1817 | * :ghissue:`2273`: triple quote and %s at beginning of line with %paste |
|
1818 | 1818 | * :ghissue:`2243`: Regression in .embed() |
|
1819 | 1819 | * :ghissue:`2266`: SSH passwordless check with OpenSSH checks for the wrong thing |
|
1820 | 1820 | * :ghissue:`2217`: Change NewNotebook handler to use 30x redirect |
|
1821 | 1821 | * :ghissue:`2276`: config option for disabling history store |
|
1822 | 1822 | * :ghissue:`2239`: can't use parallel.Reference in view.map |
|
1823 | 1823 | * :ghissue:`2272`: Sympy piecewise messed up rendering |
|
1824 | 1824 | * :ghissue:`2252`: %paste throws an exception with empty clipboard |
|
1825 | 1825 | * :ghissue:`2259`: git-mpr is currently broken |
|
1826 | 1826 | * :ghissue:`2247`: Variable expansion in shell commands should work in substrings |
|
1827 | 1827 | * :ghissue:`2026`: Run 'fast' tests only |
|
1828 | 1828 | * :ghissue:`2241`: read a list of notebooks on server and bring into browser only notebook |
|
1829 | 1829 | * :ghissue:`2237`: please put python and text editor in the web only ipython |
|
1830 | 1830 | * :ghissue:`2053`: Improvements to the IPython.display.Image object |
|
1831 | 1831 | * :ghissue:`1456`: ERROR: Internal Python error in the inspect module. |
|
1832 | 1832 | * :ghissue:`2221`: Avoid importing from IPython.parallel in core |
|
1833 | 1833 | * :ghissue:`2213`: Can't trigger startup code in Engines |
|
1834 | 1834 | * :ghissue:`1464`: Strange behavior for backspace with lines ending with more than 4 spaces in notebook |
|
1835 | 1835 | * :ghissue:`2187`: NaN in object_info_reply JSON causes parse error |
|
1836 | 1836 | * :ghissue:`214`: system command requiring administrative privileges |
|
1837 | 1837 | * :ghissue:`2195`: Unknown option `no-edit` in git-mpr |
|
1838 | 1838 | * :ghissue:`2201`: Add documentation build to tools/test_pr.py |
|
1839 | 1839 | * :ghissue:`2205`: Command-line option for default Notebook output collapsing behavior |
|
1840 | 1840 | * :ghissue:`1927`: toggle between inline and floating figures |
|
1841 | 1841 | * :ghissue:`2171`: Can't start StarCluster after upgrading to IPython 0.13 |
|
1842 | 1842 | * :ghissue:`2173`: oct2py v >= 0.3.1 doesn't need h5py anymore |
|
1843 | 1843 | * :ghissue:`2099`: storemagic needs to use self.shell |
|
1844 | 1844 | * :ghissue:`2166`: DirectView map_sync() with Lambdas Using Generators |
|
1845 | 1845 | * :ghissue:`2091`: Unable to use print_stats after %prun -r in notebook |
|
1846 | 1846 | * :ghissue:`2132`: Add fail-over for pastebin |
|
1847 | 1847 | * :ghissue:`2156`: Make it possible to install ipython without nasty gui dependencies |
|
1848 | 1848 | * :ghissue:`2154`: Scrolled long output should be off in print view by default |
|
1849 | 1849 | * :ghissue:`2162`: Tab completion does not work with IPython.embed_kernel() |
|
1850 | 1850 | * :ghissue:`2157`: IPython 0.13 / github-master cannot create logfile from scratch |
|
1851 | 1851 | * :ghissue:`2151`: missing newline when a magic is called from the qtconsole menu |
|
1852 | 1852 | * :ghissue:`2139`: 00_notebook_tour Image example broken on master |
|
1853 | 1853 | * :ghissue:`2143`: Add a %%cython_annotate magic |
|
1854 | 1854 | * :ghissue:`2135`: Running IPython from terminal |
|
1855 | 1855 | * :ghissue:`2093`: Makefile for building Sphinx documentation on Windows |
|
1856 | 1856 | * :ghissue:`2122`: Bug in pretty printing |
|
1857 | 1857 | * :ghissue:`2120`: Notebook "Make a Copy..." keeps opening duplicates in the same tab |
|
1858 | 1858 | * :ghissue:`1997`: password cannot be used with url prefix |
|
1859 | 1859 | * :ghissue:`2129`: help/doc displayed multiple times if requested in loop |
|
1860 | 1860 | * :ghissue:`2121`: ipdb does not support input history in qtconsole |
|
1861 | 1861 | * :ghissue:`2114`: %logstart doesn't log |
|
1862 | 1862 | * :ghissue:`2085`: %ed magic fails in qtconsole |
|
1863 | 1863 | * :ghissue:`2119`: IPython fails to run on MacOS Lion |
|
1864 | 1864 | * :ghissue:`2052`: %pylab inline magic does not work on windows |
|
1865 | 1865 | * :ghissue:`2111`: Ipython won't start on W7 |
|
1866 | 1866 | * :ghissue:`2112`: Strange internal traceback |
|
1867 | 1867 | * :ghissue:`2108`: Backslash (\) at the end of the line behavior different from default Python |
|
1868 | 1868 | * :ghissue:`1425`: Ampersands can't be typed sometimes in notebook cells |
|
1869 | 1869 | * :ghissue:`1513`: Add expand/collapse support for long output elements like stdout and tracebacks |
|
1870 | 1870 | * :ghissue:`2087`: error when starting ipython |
|
1871 | 1871 | * :ghissue:`2103`: Ability to run notebook file from commandline |
|
1872 | 1872 | * :ghissue:`2082`: Qt Console output spacing |
|
1873 | 1873 | * :ghissue:`2083`: Test failures with Python 3.2 and PYTHONWARNINGS="d" |
|
1874 | 1874 | * :ghissue:`2094`: about inline |
|
1875 | 1875 | * :ghissue:`2077`: Starting IPython3 on the terminal |
|
1876 | 1876 | * :ghissue:`1760`: easy_install ipython fails on py3.2-win32 |
|
1877 | 1877 | * :ghissue:`2075`: Local Mathjax install causes iptest3 error under python3 |
|
1878 | 1878 | * :ghissue:`2057`: setup fails for python3 with LANG=C |
|
1879 | 1879 | * :ghissue:`2070`: shebang on Windows |
|
1880 | 1880 | * :ghissue:`2054`: sys_info missing git hash in sdists |
|
1881 | 1881 | * :ghissue:`2059`: duplicate and modified files in documentation |
|
1882 | 1882 | * :ghissue:`2056`: except-shadows-builtin osm.py:687 |
|
1883 | 1883 | * :ghissue:`2058`: hyphen-used-as-minus-sign in manpages |
@@ -1,369 +1,369 b'' | |||
|
1 | 1 | ============= |
|
2 | 2 | 0.12 Series |
|
3 | 3 | ============= |
|
4 | 4 | |
|
5 | 5 | Release 0.12.1 |
|
6 | 6 | ============== |
|
7 | 7 | |
|
8 | 8 | IPython 0.12.1 is a bugfix release of 0.12, pulling only bugfixes and minor |
|
9 | 9 | cleanup from 0.13, timed for the Ubuntu 12.04 LTS release. |
|
10 | 10 | |
|
11 | 11 | See the :ref:`list of fixed issues <issues_list_012>` for specific backported issues. |
|
12 | 12 | |
|
13 | 13 | |
|
14 | 14 | Release 0.12 |
|
15 | 15 | ============ |
|
16 | 16 | |
|
17 | 17 | IPython 0.12 contains several major new features, as well as a large amount of |
|
18 | 18 | bug and regression fixes. The 0.11 release brought with it a lot of new |
|
19 | 19 | functionality and major refactorings of the codebase; by and large this has |
|
20 | 20 | proven to be a success as the number of contributions to the project has |
|
21 | 21 | increased dramatically, proving that the code is now much more approachable. |
|
22 | 22 | But in the refactoring inevitably some bugs were introduced, and we have also |
|
23 | 23 | squashed many of those as well as recovered some functionality that had been |
|
24 | 24 | temporarily disabled due to the API changes. |
|
25 | 25 | |
|
26 | 26 | The following major new features appear in this version. |
|
27 | 27 | |
|
28 | 28 | |
|
29 | 29 | An interactive browser-based Notebook with rich media support |
|
30 | 30 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
31 | 31 | |
|
32 | 32 | A powerful new interface puts IPython in your browser. You can start it with |
|
33 | 33 | the command ``ipython notebook``: |
|
34 | 34 | |
|
35 | 35 | .. figure:: ../_images/notebook_specgram.png |
|
36 | 36 | :width: 400px |
|
37 | 37 | :alt: The IPython notebook with embedded text, code, math and figures. |
|
38 | 38 | :align: center |
|
39 | 39 | :target: ../_images/notebook_specgram.png |
|
40 | 40 | |
|
41 | 41 | The new IPython notebook showing text, mathematical expressions in LaTeX, |
|
42 | 42 | code, results and embedded figures created with Matplotlib. |
|
43 | 43 | |
|
44 | 44 | This new interface maintains all the features of IPython you are used to, as it |
|
45 | 45 | is a new client that communicates with the same IPython kernels used by the |
|
46 | 46 | terminal and Qt console. But the web notebook provides for a different |
|
47 | 47 | workflow where you can integrate, along with code execution, also text, |
|
48 | 48 | mathematical expressions, graphics, video, and virtually any content that a |
|
49 | 49 | modern browser is capable of displaying. |
|
50 | 50 | |
|
51 | 51 | You can save your work sessions as documents that retain all these elements and |
|
52 | 52 | which can be version controlled, emailed to colleagues or saved as HTML or PDF |
|
53 | 53 | files for printing or publishing statically on the web. The internal storage |
|
54 | 54 | format is a JSON file that can be easily manipulated for manual exporting to |
|
55 | 55 | other formats. |
|
56 | 56 | |
|
57 | 57 | This Notebook is a major milestone for IPython, as for years we have tried to |
|
58 | 58 | build this kind of system. We were inspired originally by the excellent |
|
59 | 59 | implementation in Mathematica, we made a number of attempts using older |
|
60 | 60 | technologies in earlier Summer of Code projects in 2005 (both students and |
|
61 | 61 | Robert Kern developed early prototypes), and in recent years we have seen the |
|
62 | 62 | excellent implementation offered by the `Sage <http://sagemath.org>` system. |
|
63 | 63 | But we continued to work on something that would be consistent with the rest of |
|
64 | 64 | IPython's design, and it is clear now that the effort was worth it: based on |
|
65 | 65 | the ZeroMQ communications architecture introduced in version 0.11, the notebook |
|
66 | 66 | can now retain 100% of the features of the real IPython. But it can also |
|
67 | 67 | provide the rich media support and high quality Javascript libraries that were |
|
68 | 68 | not available in browsers even one or two years ago (such as high-quality |
|
69 | 69 | mathematical rendering or built-in video). |
|
70 | 70 | |
|
71 | 71 | The notebook has too many useful and important features to describe in these |
|
72 | 72 | release notes; our documentation now contains a directory called |
|
73 | 73 | ``examples/notebooks`` with several notebooks that illustrate various aspects |
|
74 | 74 | of the system. You should start by reading those named |
|
75 | 75 | ``00_notebook_tour.ipynb`` and ``01_notebook_introduction.ipynb`` first, and |
|
76 | 76 | then can proceed to read the others in any order you want. |
|
77 | 77 | |
|
78 | 78 | To start the notebook server, go to a directory containing the notebooks you |
|
79 | 79 | want to open (or where you want to create new ones) and type:: |
|
80 | 80 | |
|
81 | 81 | ipython notebook |
|
82 | 82 | |
|
83 | 83 | You can see all the relevant options with:: |
|
84 | 84 | |
|
85 | 85 | ipython notebook --help |
|
86 | 86 | ipython notebook --help-all # even more |
|
87 | 87 | |
|
88 | 88 | and just like the Qt console, you can start the notebook server with pylab |
|
89 | 89 | support by using:: |
|
90 | 90 | |
|
91 | 91 | ipython notebook --pylab |
|
92 | 92 | |
|
93 | 93 | for floating matplotlib windows or:: |
|
94 | 94 | |
|
95 | 95 | ipython notebook --pylab inline |
|
96 | 96 | |
|
97 | 97 | for plotting support with automatically inlined figures. Note that it is now |
|
98 | 98 | possible also to activate pylab support at runtime via ``%pylab``, so you do |
|
99 | 99 | not need to make this decision when starting the server. |
|
100 | 100 | |
|
101 | 101 | |
|
102 | 102 | .. _two_process_console: |
|
103 | 103 | |
|
104 | 104 | Two-process terminal console |
|
105 | 105 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
106 | 106 | |
|
107 | 107 | Based on the same architecture as the notebook and the Qt console, we also have |
|
108 | 108 | now a terminal-based console that can connect to an external IPython kernel |
|
109 | 109 | (the same kernels used by the Qt console or the notebook, in fact). While this |
|
110 | 110 | client behaves almost identically to the usual IPython terminal application, |
|
111 | 111 | this capability can be very useful to attach an interactive console to an |
|
112 | 112 | existing kernel that was started externally. It lets you use the interactive |
|
113 | 113 | ``%debug`` facilities in a notebook, for example (the web browser can't |
|
114 | 114 | interact directly with the debugger) or debug a third-party code where you may |
|
115 | 115 | have embedded an IPython kernel. |
|
116 | 116 | |
|
117 | 117 | This is also something that we have wanted for a long time, and which is a |
|
118 | 118 | culmination (as a team effort) of the work started last year during the 2010 |
|
119 | 119 | Google Summer of Code project. |
|
120 | 120 | |
|
121 | 121 | Tabbed QtConsole |
|
122 | 122 | ~~~~~~~~~~~~~~~~ |
|
123 | 123 | |
|
124 | 124 | The QtConsole now supports starting multiple kernels in tabs, and has a |
|
125 | 125 | menubar, so it looks and behaves more like a real application. Keyboard |
|
126 | 126 | enthusiasts can disable the menubar with ctrl-shift-M (:ghpull:`887`). |
|
127 | 127 | |
|
128 | 128 | .. figure:: ../_images/qtconsole_tabbed.png |
|
129 | 129 | :width: 400px |
|
130 | 130 | :alt: Tabbed IPython Qt console with embedded plots and menus. |
|
131 | 131 | :align: center |
|
132 | 132 | :target: ../_images/qtconsole_tabbed.png |
|
133 | 133 | |
|
134 | 134 | The improved Qt console for IPython, now with tabs to control multiple |
|
135 | 135 | kernels and full menu support. |
|
136 | 136 | |
|
137 | 137 | |
|
138 | 138 | Full Python 3 compatibility |
|
139 | 139 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
140 | 140 | |
|
141 | 141 | IPython can now be installed from a single codebase on Python 2 and |
|
142 | 142 | Python 3. The installation process for Python 3 automatically runs 2to3. The |
|
143 | 143 | same 'default' profile is now used for Python 2 and 3 (the previous version had |
|
144 | 144 | a separate 'python3' profile). |
|
145 | 145 | |
|
146 | 146 | Standalone Kernel |
|
147 | 147 | ~~~~~~~~~~~~~~~~~ |
|
148 | 148 | |
|
149 | 149 | The ``ipython kernel`` subcommand has been added, to allow starting a |
|
150 | 150 | standalone kernel, that can be used with various frontends. You can then later |
|
151 | 151 | connect a Qt console or a terminal console to this kernel by typing e.g.:: |
|
152 | 152 | |
|
153 | 153 | ipython qtconsole --existing |
|
154 | 154 | |
|
155 | 155 | if it's the only one running, or by passing explicitly the connection |
|
156 | 156 | parameters (printed by the kernel at startup). |
|
157 | 157 | |
|
158 | 158 | |
|
159 | 159 | PyPy support |
|
160 | 160 | ~~~~~~~~~~~~ |
|
161 | 161 | |
|
162 | 162 | The terminal interface to IPython now runs under `PyPy <http://pypy.org/>`_. |
|
163 | 163 | We will continue to monitor PyPy's progress, and hopefully before long at least |
|
164 | 164 | we'll be able to also run the notebook. The Qt console may take longer, as Qt |
|
165 | 165 | is a very complex set of bindings to a huge C++ library, and that is currently |
|
166 | 166 | the area where PyPy still lags most behind. But for everyday interactive use |
|
167 | 167 | at the terminal, with this release and PyPy 1.7, things seem to work quite well |
|
168 | 168 | from our admittedly limited testing. |
|
169 | 169 | |
|
170 | 170 | |
|
171 | 171 | Other important new features |
|
172 | 172 | ---------------------------- |
|
173 | 173 | |
|
174 | 174 | * **SSH Tunnels**: In 0.11, the :mod:`IPython.parallel` Client could tunnel its |
|
175 | 175 | connections to the Controller via ssh. Now, the QtConsole supports ssh tunneling, |
|
176 | 176 | as do parallel engines. |
|
177 | 177 | |
|
178 | 178 | * **relaxed command-line parsing**: 0.11 was released with overly-strict |
|
179 | 179 | command-line parsing, preventing the ability to specify arguments with spaces, |
|
180 | 180 | e.g. ``ipython --pylab qt`` or ``ipython -c "print 'hi'"``. This has |
|
181 | 181 | been fixed, by using argparse. The new parsing is a strict superset of 0.11, so |
|
182 | 182 | any commands in 0.11 should still work in 0.12. |
|
183 | 183 | |
|
184 | 184 | * **HistoryAccessor**: The :class:`~IPython.core.history.HistoryManager` class |
|
185 | 185 | for interacting with your IPython SQLite history database has been split, |
|
186 | 186 | adding a parent :class:`~IPython.core.history.HistoryAccessor` class, so that |
|
187 | 187 | users can write code to access and search their IPython history without being |
|
188 | 188 | in an IPython session (:ghpull:`824`). |
|
189 | 189 | |
|
190 | 190 | * **kernel %gui and %pylab**: The ``%gui`` and ``%pylab`` magics have been |
|
191 | 191 | restored to the IPython kernel (e.g. in the qtconsole or notebook). This |
|
192 | 192 | allows activation of pylab-mode, or eventloop integration after starting the |
|
193 | 193 | kernel, which was unavailable in 0.11. Unlike in the terminal, this can be |
|
194 | 194 | set only once, and cannot be changed. |
|
195 | 195 | |
|
196 | 196 | * **%config**: A new ``%config`` magic has been added, giving easy access to the |
|
197 | 197 | IPython configuration system at runtime (:ghpull:`923`). |
|
198 | 198 | |
|
199 | 199 | * **Multiline History**: Multiline readline history has been restored to the |
|
200 | 200 | Terminal frontend by default (:ghpull:`838`). |
|
201 | 201 | |
|
202 | 202 | * **%store**: The ``%store`` magic from earlier versions has been updated and |
|
203 | 203 | re-enabled (:ref:`extensions_storemagic`; :ghpull:`1029`). To autorestore |
|
204 | 204 | stored variables on startup, specify ``c.StoreMagic.autorestore = True`` in |
|
205 | 205 | :file:`ipython_config.py`. |
|
206 | 206 | |
|
207 | 207 | |
|
208 | 208 | Major Bugs fixed |
|
209 | 209 | ---------------- |
|
210 | 210 | |
|
211 | 211 | In this cycle, we have :ref:`closed over 500 issues <issues_list_012>`, but a |
|
212 | 212 | few major ones merit special mention: |
|
213 | 213 | |
|
214 | 214 | * Simple configuration errors should no longer crash IPython. In 0.11, errors |
|
215 | 215 | in config files, as well as invalid trait values, could crash IPython. Now, |
|
216 | 216 | such errors are reported, and help is displayed. |
|
217 | 217 | |
|
218 | 218 | * Certain SyntaxErrors no longer crash IPython (e.g. just typing keywords, such |
|
219 | 219 | as ``return``, ``break``, etc.). See :ghissue:`704`. |
|
220 | 220 | |
|
221 | 221 | * IPython path utils, such as :func:`~IPython.utils.path.get_ipython_dir` now |
|
222 | 222 | check for write permissions, so IPython should function on systems where the |
|
223 | 223 | default path resolution might point to a read-only location, such as |
|
224 | 224 | ``HOMESHARE`` on Windows (:ghissue:`669`). |
|
225 | 225 | |
|
226 | 226 | * :func:`raw_input` now works in the kernel when multiple frontends are in |
|
227 | 227 | use. The request will be sent to the frontend that made the request, and an |
|
228 | 228 | exception is raised if that frontend does not support stdin requests |
|
229 | 229 | (e.g. the notebook) (:ghissue:`673`). |
|
230 | 230 | |
|
231 | 231 | * :mod:`zmq` version detection no longer uses simple lexicographical comparison |
|
232 | 232 | to check minimum version, which prevents 0.11 from working with pyzmq-2.1.10 |
|
233 | 233 | (:ghpull:`758`). |
|
234 | 234 | |
|
235 | 235 | * A bug in PySide < 1.0.7 caused crashes on OSX when tooltips were shown |
|
236 | 236 | (:ghissue:`711`). these tooltips are now disabled on old PySide |
|
237 | 237 | (:ghpull:`963`). |
|
238 | 238 | |
|
239 | 239 | * IPython no longer crashes when started on recent versions of Python 3 in |
|
240 | 240 | Windows (:ghissue:`737`). |
|
241 | 241 | |
|
242 | 242 | * Instances of classes defined interactively can now be pickled (:ghissue:`29`; |
|
243 | 243 | :ghpull:`648`). Note that pickling saves a reference to the class definition, |
|
244 | 244 | so unpickling the instances will only work where the class has been defined. |
|
245 | 245 | |
|
246 | 246 | |
|
247 | 247 | Backwards incompatible changes |
|
248 | 248 | ------------------------------ |
|
249 | 249 | |
|
250 | 250 | * IPython connection information is no longer specified via ip/port directly, |
|
251 | 251 | rather via json connection files. These files are stored in the security |
|
252 | 252 | directory, and enable us to turn on HMAC message authentication by default, |
|
253 | 253 | significantly improving the security of kernels. Various utility functions |
|
254 | 254 | have been added to :mod:`IPython.lib.kernel`, for easier connecting to existing |
|
255 | 255 | kernels. |
|
256 | 256 | |
|
257 | 257 | * :class:`~IPython.zmq.kernelmanager.KernelManager` now has one ip, and several |
|
258 | 258 | port traits, rather than several ip/port pair ``_addr`` traits. This better |
|
259 | 259 | matches the rest of the code, where the ip cannot not be set separately for |
|
260 | 260 | each channel. |
|
261 | 261 | |
|
262 | 262 | * Custom prompts are now configured using a new class, |
|
263 | 263 | :class:`~IPython.core.prompts.PromptManager`, which has traits for |
|
264 | 264 | :attr:`in_template`, :attr:`in2_template` (the ``...:`` continuation prompt), |
|
265 | 265 | :attr:`out_template` and :attr:`rewrite_template`. This uses Python's string |
|
266 | 266 | formatting system, so you can use ``{time}`` and ``{cwd}``, although we have |
|
267 | 267 | preserved the abbreviations from previous versions, e.g. ``\#`` (prompt number) |
|
268 | 268 | and ``\w`` (working directory). For the list of available fields, refer to the |
|
269 | 269 | source of :file:`IPython/core/prompts.py`. |
|
270 | 270 | |
|
271 | 271 | * The class inheritance of the Launchers in |
|
272 | 272 | :mod:`IPython.parallel.apps.launcher` used by ipcluster has changed, so that |
|
273 | 273 | trait names are more consistent across batch systems. This may require a few |
|
274 | 274 | renames in your config files, if you customized the command-line args for |
|
275 | 275 | launching controllers and engines. The configurable names have also been |
|
276 | 276 | changed to be clearer that they point to class names, and can now be |
|
277 | 277 | specified by name only, rather than requiring the full import path of each |
|
278 | 278 | class, e.g.:: |
|
279 | 279 | |
|
280 | 280 | IPClusterEngines.engine_launcher = 'IPython.parallel.apps.launcher.MPIExecEngineSetLauncher' |
|
281 | 281 | IPClusterStart.controller_launcher = 'IPython.parallel.apps.launcher.SSHControllerLauncher' |
|
282 | 282 | |
|
283 | 283 | would now be specified as:: |
|
284 | 284 | |
|
285 | 285 | IPClusterEngines.engine_launcher_class = 'MPI' |
|
286 | 286 | IPClusterStart.controller_launcher_class = 'SSH' |
|
287 | 287 | |
|
288 | 288 | The full path will still work, and is necessary for using custom launchers |
|
289 | 289 | not in IPython's launcher module. |
|
290 | 290 | |
|
291 | 291 | Further, MPIExec launcher names are now prefixed with just MPI, to better match |
|
292 | 292 | other batch launchers, and be generally more intuitive. The MPIExec names are |
|
293 | 293 | deprecated, but continue to work. |
|
294 | 294 | |
|
295 | 295 | * For embedding a shell, note that the parameters ``user_global_ns`` and |
|
296 |
``global_ns`` have been deprec |
|
|
296 | ``global_ns`` have been deprecated in favour of ``user_module`` and | |
|
297 | 297 | ``module`` respsectively. The new parameters expect a module-like object, |
|
298 | 298 | rather than a namespace dict. The old parameters remain for backwards |
|
299 | 299 | compatibility, although ``user_global_ns`` is now ignored. The ``user_ns`` |
|
300 | 300 | parameter works the same way as before, and calling |
|
301 | 301 | :func:`~IPython.frontend.terminal.embed.embed` with no arguments still works |
|
302 | 302 | as before. |
|
303 | 303 | |
|
304 | 304 | |
|
305 | 305 | Development summary and credits |
|
306 | 306 | ------------------------------- |
|
307 | 307 | |
|
308 | 308 | The previous version (IPython 0.11) was released on July 31 2011, so this |
|
309 | 309 | release cycle was roughly 4 1/2 months long, we closed a total of 515 issues, |
|
310 | 310 | 257 pull requests and 258 regular issues (a :ref:`detailed list |
|
311 | 311 | <issues_list_012>` is available). |
|
312 | 312 | |
|
313 | 313 | Many users and developers contributed code, features, bug reports and ideas to |
|
314 | 314 | this release. Please do not hesitate in contacting us if we've failed to |
|
315 | 315 | acknowledge your contribution here. In particular, for this release we have |
|
316 | 316 | had commits from the following 45 contributors, a mix of new and regular names |
|
317 | 317 | (in alphabetical order by first name): |
|
318 | 318 | |
|
319 | 319 | * Alcides <alcides-at-do-not-span-me.com> |
|
320 | 320 | * Ben Edwards <bedwards-at-cs.unm.edu> |
|
321 | 321 | * Benjamin Ragan-Kelley <benjaminrk-at-gmail.com> |
|
322 | 322 | * Benjamin Thyreau <benjamin.thyreau-at-gmail.com> |
|
323 | 323 | * Bernardo B. Marques <bernardo.fire-at-gmail.com> |
|
324 | 324 | * Bernard Paulus <bprecyclebin-at-gmail.com> |
|
325 | 325 | * Bradley M. Froehle <brad.froehle-at-gmail.com> |
|
326 | 326 | * Brian E. Granger <ellisonbg-at-gmail.com> |
|
327 | 327 | * Christian Boos <cboos-at-bct-technology.com> |
|
328 | 328 | * Daniel Velkov <danielv-at-mylife.com> |
|
329 | 329 | * Erik Tollerud <erik.tollerud-at-gmail.com> |
|
330 | 330 | * Evan Patterson <epatters-at-enthought.com> |
|
331 | 331 | * Felix Werner <Felix.Werner-at-kit.edu> |
|
332 | 332 | * Fernando Perez <Fernando.Perez-at-berkeley.edu> |
|
333 | 333 | * Gabriel <g2p.code-at-gmail.com> |
|
334 | 334 | * Grahame Bowland <grahame-at-angrygoats.net> |
|
335 | 335 | * Hannes Schulz <schulz-at-ais.uni-bonn.de> |
|
336 | 336 | * Jens Hedegaard Nielsen <jenshnielsen-at-gmail.com> |
|
337 | 337 | * Jonathan March <jmarch-at-enthought.com> |
|
338 | 338 | * JΓΆrgen Stenarson <jorgen.stenarson-at-bostream.nu> |
|
339 | 339 | * Julian Taylor <jtaylor.debian-at-googlemail.com> |
|
340 | 340 | * Kefu Chai <tchaikov-at-gmail.com> |
|
341 | 341 | * macgyver <neil.rabinowitz-at-merton.ox.ac.uk> |
|
342 | 342 | * Matt Cottingham <matt.cottingham-at-gmail.com> |
|
343 | 343 | * Matthew Brett <matthew.brett-at-gmail.com> |
|
344 | 344 | * Matthias BUSSONNIER <bussonniermatthias-at-gmail.com> |
|
345 | 345 | * Michael Droettboom <mdboom-at-gmail.com> |
|
346 | 346 | * Nicolas Rougier <Nicolas.Rougier-at-inria.fr> |
|
347 | 347 | * Olivier Verdier <olivier.verdier-at-gmail.com> |
|
348 | 348 | * Omar Andres Zapata Mesa <andresete.chaos-at-gmail.com> |
|
349 | 349 | * Pablo Winant <pablo.winant-at-gmail.com> |
|
350 | 350 | * Paul Ivanov <pivanov314-at-gmail.com> |
|
351 | 351 | * Pauli Virtanen <pav-at-iki.fi> |
|
352 | 352 | * Pete Aykroyd <aykroyd-at-gmail.com> |
|
353 | 353 | * Prabhu Ramachandran <prabhu-at-enthought.com> |
|
354 | 354 | * Puneeth Chaganti <punchagan-at-gmail.com> |
|
355 | 355 | * Robert Kern <robert.kern-at-gmail.com> |
|
356 | 356 | * Satrajit Ghosh <satra-at-mit.edu> |
|
357 | 357 | * Stefan van der Walt <stefan-at-sun.ac.za> |
|
358 | 358 | * Szabolcs HorvΓ‘t <szhorvat-at-gmail.com> |
|
359 | 359 | * Thomas Kluyver <takowl-at-gmail.com> |
|
360 | 360 | * Thomas Spura <thomas.spura-at-gmail.com> |
|
361 | 361 | * Timo Paulssen <timonator-at-perpetuum-immobile.de> |
|
362 | 362 | * Valentin Haenel <valentin.haenel-at-gmx.de> |
|
363 | 363 | * Yaroslav Halchenko <debian-at-onerussian.com> |
|
364 | 364 | |
|
365 | 365 | .. note:: |
|
366 | 366 | |
|
367 | 367 | This list was generated with the output of |
|
368 | 368 | ``git log rel-0.11..HEAD --format='* %aN <%aE>' | sed 's/@/\-at\-/' | sed 's/<>//' | sort -u`` |
|
369 | 369 | after some cleanup. If you should be on this list, please add yourself. |
@@ -1,80 +1,80 b'' | |||
|
1 | 1 | # install_data_ext.py |
|
2 | 2 | # |
|
3 | 3 | # Subclass of normal distutils install_data command to allow more |
|
4 | 4 | # configurable installation of data files. |
|
5 | 5 | |
|
6 | 6 | import os |
|
7 | 7 | from distutils.command.install_data import install_data |
|
8 | 8 | from distutils.util import change_root, convert_path |
|
9 | 9 | |
|
10 | 10 | class install_data_ext(install_data): |
|
11 | 11 | |
|
12 | 12 | def initialize_options(self): |
|
13 | 13 | self.install_base = None |
|
14 | 14 | self.install_platbase = None |
|
15 | 15 | self.install_purelib = None |
|
16 | 16 | self.install_headers = None |
|
17 | 17 | self.install_lib = None |
|
18 | 18 | self.install_scripts = None |
|
19 | 19 | self.install_data = None |
|
20 | 20 | |
|
21 | 21 | self.outfiles = [] |
|
22 | 22 | self.root = None |
|
23 | 23 | self.force = 0 |
|
24 | 24 | self.data_files = self.distribution.data_files |
|
25 | 25 | self.warn_dir = 1 |
|
26 | 26 | |
|
27 | 27 | |
|
28 | 28 | def finalize_options(self): |
|
29 | 29 | self.set_undefined_options('install', |
|
30 | 30 | ('root', 'root'), |
|
31 | 31 | ('force', 'force'), |
|
32 | 32 | ('install_base', 'install_base'), |
|
33 | 33 | ('install_platbase', |
|
34 | 34 | 'install_platbase'), |
|
35 | 35 | ('install_purelib', |
|
36 | 36 | 'install_purelib'), |
|
37 | 37 | ('install_headers', |
|
38 | 38 | 'install_headers'), |
|
39 | 39 | ('install_lib', 'install_lib'), |
|
40 | 40 | ('install_scripts', |
|
41 | 41 | 'install_scripts'), |
|
42 | 42 | ('install_data', 'install_data')) |
|
43 | 43 | |
|
44 | 44 | |
|
45 | 45 | def run(self): |
|
46 | 46 | """ |
|
47 | 47 | This is where the meat is. Basically the data_files list must |
|
48 | 48 | now be a list of tuples of 3 entries. The first |
|
49 | 49 | entry is one of 'base', 'platbase', etc, which indicates which |
|
50 | 50 | base to install from. The second entry is the path to install |
|
51 | 51 | too. The third entry is a list of files to install. |
|
52 | 52 | """ |
|
53 | 53 | for lof in self.data_files: |
|
54 | 54 | if lof[0]: |
|
55 | 55 | base = getattr(self, 'install_' + lof[0]) |
|
56 | 56 | else: |
|
57 | 57 | base = getattr(self, 'install_base') |
|
58 | 58 | dir = convert_path(lof[1]) |
|
59 | 59 | if not os.path.isabs(dir): |
|
60 | 60 | dir = os.path.join(base, dir) |
|
61 | 61 | elif self.root: |
|
62 | 62 | dir = change_root(self.root, dir) |
|
63 | 63 | self.mkpath(dir) |
|
64 | 64 | |
|
65 | 65 | files = lof[2] |
|
66 | 66 | if len(files) == 0: |
|
67 | 67 | # If there are no files listed, the user must be |
|
68 |
# trying to create an empty directory, so add the |
|
|
68 | # trying to create an empty directory, so add the | |
|
69 | 69 | # directory to the list of output files. |
|
70 | 70 | self.outfiles.append(dir) |
|
71 | 71 | else: |
|
72 | 72 | # Copy files, adding them to the list of output files. |
|
73 | 73 | for f in files: |
|
74 | 74 | f = convert_path(f) |
|
75 | 75 | (out, _) = self.copy_file(f, dir) |
|
76 | 76 | #print "DEBUG: ", out # dbg |
|
77 | 77 | self.outfiles.append(out) |
|
78 | 78 | |
|
79 | 79 | |
|
80 | 80 | return self.outfiles |
General Comments 0
You need to be logged in to leave comments.
Login now