forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dev-python/line_profiler: Bump to 1.0-r1 (including patches); Bump to…
… EAPI=6 Package-Manager: portage-2.2.28 Closes: gentoo#2136 Signed-off-by: David Seifert <[email protected]>
- Loading branch information
1 parent
5dc9807
commit f03bc7d
Showing
3 changed files
with
357 additions
and
0 deletions.
There are no files selected for viewing
25 changes: 25 additions & 0 deletions
25
dev-python/line_profiler/files/line_profiler-1.0-fix-name-from-copypasta.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
From 717df8c2088087ea4bce870400a2c99b36b0e53d Mon Sep 17 00:00:00 2001 | ||
From: Robert Kern <[email protected]> | ||
Date: Mon, 21 Dec 2015 19:25:51 +0000 | ||
Subject: [PATCH] BUG: fix name from copypasta. | ||
|
||
Fixes #43 | ||
|
||
Thanks, @anntzer! | ||
--- | ||
line_profiler.py | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
diff --git a/line_profiler.py b/line_profiler.py | ||
index 4480c7b..aac01c8 100755 | ||
--- a/line_profiler.py | ||
+++ b/line_profiler.py | ||
@@ -303,7 +303,7 @@ def magic_lprun(self, parameter_s=''): | ||
mod = __import__(modname, fromlist=['']) | ||
profile.add_module(mod) | ||
except Exception as e: | ||
- raise UsageError('Could not find module %r.\n%s: %s' % (name, | ||
+ raise UsageError('Could not find module %r.\n%s: %s' % (modname, | ||
e.__class__.__name__, e)) | ||
|
||
# Add the profiler to the builtins for @profile. |
299 changes: 299 additions & 0 deletions
299
dev-python/line_profiler/files/line_profiler-1.0-ipython-5.0-compatibility.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,299 @@ | ||
https://github.com/rkern/line_profiler/pull/65 | ||
|
||
From 677a43104dd537b515c06eaeffa77f8dcfa5a76e Mon Sep 17 00:00:00 2001 | ||
From: Brett Olsen <[email protected]> | ||
Date: Tue, 12 Jul 2016 10:18:28 -0700 | ||
Subject: [PATCH 1] Update for compatibility with IPython 5.0 | ||
|
||
Also tested with IPython 4.1.1. Replaces the depreciated ip.define_magic() method with ip.register_magics() and some modifications to handle the different API required. | ||
--- | ||
line_profiler.py | 245 ++++++++++++++++++++++++++++--------------------------- | ||
1 file changed, 125 insertions(+), 120 deletions(-) | ||
|
||
diff --git a/line_profiler.py b/line_profiler.py | ||
index aac01c8..7645997 100755 | ||
--- a/line_profiler.py | ||
+++ b/line_profiler.py | ||
@@ -17,6 +17,8 @@ | ||
import os | ||
import sys | ||
|
||
+from IPython.core.magic import (Magics, magics_class, line_magic) | ||
+ | ||
from _line_profiler import LineProfiler as CLineProfiler | ||
|
||
# Python 2/3 compatibility utils | ||
@@ -226,150 +228,153 @@ def show_text(stats, unit, stream=None, stripzeros=False): | ||
for (fn, lineno, name), timings in sorted(stats.items()): | ||
show_func(fn, lineno, name, stats[fn, lineno, name], unit, stream=stream, stripzeros=stripzeros) | ||
|
||
-# A %lprun magic for IPython. | ||
-def magic_lprun(self, parameter_s=''): | ||
- """ Execute a statement under the line-by-line profiler from the | ||
- line_profiler module. | ||
+@magics_class | ||
+class LineProfilerMagics(Magics): | ||
|
||
- Usage: | ||
- %lprun -f func1 -f func2 <statement> | ||
+ @line_magic | ||
+ def lprun(self, parameter_s=''): | ||
+ """ Execute a statement under the line-by-line profiler from the | ||
+ line_profiler module. | ||
|
||
- The given statement (which doesn't require quote marks) is run via the | ||
- LineProfiler. Profiling is enabled for the functions specified by the -f | ||
- options. The statistics will be shown side-by-side with the code through the | ||
- pager once the statement has completed. | ||
+ Usage: | ||
+ %lprun -f func1 -f func2 <statement> | ||
|
||
- Options: | ||
+ The given statement (which doesn't require quote marks) is run via the | ||
+ LineProfiler. Profiling is enabled for the functions specified by the -f | ||
+ options. The statistics will be shown side-by-side with the code through the | ||
+ pager once the statement has completed. | ||
|
||
- -f <function>: LineProfiler only profiles functions and methods it is told | ||
- to profile. This option tells the profiler about these functions. Multiple | ||
- -f options may be used. The argument may be any expression that gives | ||
- a Python function or method object. However, one must be careful to avoid | ||
- spaces that may confuse the option parser. Additionally, functions defined | ||
- in the interpreter at the In[] prompt or via %run currently cannot be | ||
- displayed. Write these functions out to a separate file and import them. | ||
+ Options: | ||
|
||
- -m <module>: Get all the functions/methods in a module | ||
+ -f <function>: LineProfiler only profiles functions and methods it is told | ||
+ to profile. This option tells the profiler about these functions. Multiple | ||
+ -f options may be used. The argument may be any expression that gives | ||
+ a Python function or method object. However, one must be careful to avoid | ||
+ spaces that may confuse the option parser. Additionally, functions defined | ||
+ in the interpreter at the In[] prompt or via %run currently cannot be | ||
+ displayed. Write these functions out to a separate file and import them. | ||
|
||
- One or more -f or -m options are required to get any useful results. | ||
+ -m <module>: Get all the functions/methods in a module | ||
|
||
- -D <filename>: dump the raw statistics out to a pickle file on disk. The | ||
- usual extension for this is ".lprof". These statistics may be viewed later | ||
- by running line_profiler.py as a script. | ||
+ One or more -f or -m options are required to get any useful results. | ||
|
||
- -T <filename>: dump the text-formatted statistics with the code side-by-side | ||
- out to a text file. | ||
+ -D <filename>: dump the raw statistics out to a pickle file on disk. The | ||
+ usual extension for this is ".lprof". These statistics may be viewed later | ||
+ by running line_profiler.py as a script. | ||
|
||
- -r: return the LineProfiler object after it has completed profiling. | ||
+ -T <filename>: dump the text-formatted statistics with the code side-by-side | ||
+ out to a text file. | ||
|
||
- -s: strip out all entries from the print-out that have zeros. | ||
- """ | ||
- # Local imports to avoid hard dependency. | ||
- from distutils.version import LooseVersion | ||
- import IPython | ||
- ipython_version = LooseVersion(IPython.__version__) | ||
- if ipython_version < '0.11': | ||
- from IPython.genutils import page | ||
- from IPython.ipstruct import Struct | ||
- from IPython.ipapi import UsageError | ||
- else: | ||
- from IPython.core.page import page | ||
- from IPython.utils.ipstruct import Struct | ||
- from IPython.core.error import UsageError | ||
- | ||
- # Escape quote markers. | ||
- opts_def = Struct(D=[''], T=[''], f=[], m=[]) | ||
- parameter_s = parameter_s.replace('"', r'\"').replace("'", r"\'") | ||
- opts, arg_str = self.parse_options(parameter_s, 'rsf:m:D:T:', list_all=True) | ||
- opts.merge(opts_def) | ||
- | ||
- global_ns = self.shell.user_global_ns | ||
- local_ns = self.shell.user_ns | ||
- | ||
- # Get the requested functions. | ||
- funcs = [] | ||
- for name in opts.f: | ||
- try: | ||
- funcs.append(eval(name, global_ns, local_ns)) | ||
- except Exception as e: | ||
- raise UsageError('Could not find function %r.\n%s: %s' % (name, | ||
- e.__class__.__name__, e)) | ||
+ -r: return the LineProfiler object after it has completed profiling. | ||
|
||
- profile = LineProfiler(*funcs) | ||
+ -s: strip out all entries from the print-out that have zeros. | ||
+ """ | ||
+ # Local imports to avoid hard dependency. | ||
+ from distutils.version import LooseVersion | ||
+ import IPython | ||
+ ipython_version = LooseVersion(IPython.__version__) | ||
+ if ipython_version < '0.11': | ||
+ from IPython.genutils import page | ||
+ from IPython.ipstruct import Struct | ||
+ from IPython.ipapi import UsageError | ||
+ else: | ||
+ from IPython.core.page import page | ||
+ from IPython.utils.ipstruct import Struct | ||
+ from IPython.core.error import UsageError | ||
+ | ||
+ # Escape quote markers. | ||
+ opts_def = Struct(D=[''], T=[''], f=[], m=[]) | ||
+ parameter_s = parameter_s.replace('"', r'\"').replace("'", r"\'") | ||
+ opts, arg_str = self.parse_options(parameter_s, 'rsf:m:D:T:', list_all=True) | ||
+ opts.merge(opts_def) | ||
+ | ||
+ global_ns = self.shell.user_global_ns | ||
+ local_ns = self.shell.user_ns | ||
+ | ||
+ # Get the requested functions. | ||
+ funcs = [] | ||
+ for name in opts.f: | ||
+ try: | ||
+ funcs.append(eval(name, global_ns, local_ns)) | ||
+ except Exception as e: | ||
+ raise UsageError('Could not find function %r.\n%s: %s' % (name, | ||
+ e.__class__.__name__, e)) | ||
|
||
- # Get the modules, too | ||
- for modname in opts.m: | ||
- try: | ||
- mod = __import__(modname, fromlist=['']) | ||
- profile.add_module(mod) | ||
- except Exception as e: | ||
- raise UsageError('Could not find module %r.\n%s: %s' % (modname, | ||
- e.__class__.__name__, e)) | ||
- | ||
- # Add the profiler to the builtins for @profile. | ||
- if PY3: | ||
- import builtins | ||
- else: | ||
- import __builtin__ as builtins | ||
+ profile = LineProfiler(*funcs) | ||
|
||
- if 'profile' in builtins.__dict__: | ||
- had_profile = True | ||
- old_profile = builtins.__dict__['profile'] | ||
- else: | ||
- had_profile = False | ||
- old_profile = None | ||
- builtins.__dict__['profile'] = profile | ||
+ # Get the modules, too | ||
+ for modname in opts.m: | ||
+ try: | ||
+ mod = __import__(modname, fromlist=['']) | ||
+ profile.add_module(mod) | ||
+ except Exception as e: | ||
+ raise UsageError('Could not find module %r.\n%s: %s' % (modname, | ||
+ e.__class__.__name__, e)) | ||
+ | ||
+ # Add the profiler to the builtins for @profile. | ||
+ if PY3: | ||
+ import builtins | ||
+ else: | ||
+ import __builtin__ as builtins | ||
+ | ||
+ if 'profile' in builtins.__dict__: | ||
+ had_profile = True | ||
+ old_profile = builtins.__dict__['profile'] | ||
+ else: | ||
+ had_profile = False | ||
+ old_profile = None | ||
+ builtins.__dict__['profile'] = profile | ||
|
||
- try: | ||
try: | ||
- profile.runctx(arg_str, global_ns, local_ns) | ||
- message = '' | ||
- except SystemExit: | ||
- message = """*** SystemExit exception caught in code being profiled.""" | ||
- except KeyboardInterrupt: | ||
- message = ("*** KeyboardInterrupt exception caught in code being " | ||
- "profiled.") | ||
- finally: | ||
- if had_profile: | ||
- builtins.__dict__['profile'] = old_profile | ||
- | ||
- # Trap text output. | ||
- stdout_trap = StringIO() | ||
- profile.print_stats(stdout_trap, stripzeros='s' in opts) | ||
- output = stdout_trap.getvalue() | ||
- output = output.rstrip() | ||
- | ||
- if ipython_version < '0.11': | ||
- page(output, screen_lines=self.shell.rc.screen_length) | ||
- else: | ||
- page(output) | ||
- print(message, end="") | ||
+ try: | ||
+ profile.runctx(arg_str, global_ns, local_ns) | ||
+ message = '' | ||
+ except SystemExit: | ||
+ message = """*** SystemExit exception caught in code being profiled.""" | ||
+ except KeyboardInterrupt: | ||
+ message = ("*** KeyboardInterrupt exception caught in code being " | ||
+ "profiled.") | ||
+ finally: | ||
+ if had_profile: | ||
+ builtins.__dict__['profile'] = old_profile | ||
+ | ||
+ # Trap text output. | ||
+ stdout_trap = StringIO() | ||
+ profile.print_stats(stdout_trap, stripzeros='s' in opts) | ||
+ output = stdout_trap.getvalue() | ||
+ output = output.rstrip() | ||
+ | ||
+ if ipython_version < '0.11': | ||
+ page(output, screen_lines=self.shell.rc.screen_length) | ||
+ else: | ||
+ page(output) | ||
+ print(message, end="") | ||
|
||
- dump_file = opts.D[0] | ||
- if dump_file: | ||
- profile.dump_stats(dump_file) | ||
- print('\n*** Profile stats pickled to file %r. %s' % ( | ||
- dump_file, message)) | ||
+ dump_file = opts.D[0] | ||
+ if dump_file: | ||
+ profile.dump_stats(dump_file) | ||
+ print('\n*** Profile stats pickled to file %r. %s' % ( | ||
+ dump_file, message)) | ||
|
||
- text_file = opts.T[0] | ||
- if text_file: | ||
- pfile = open(text_file, 'w') | ||
- pfile.write(output) | ||
- pfile.close() | ||
- print('\n*** Profile printout saved to text file %r. %s' % ( | ||
- text_file, message)) | ||
+ text_file = opts.T[0] | ||
+ if text_file: | ||
+ pfile = open(text_file, 'w') | ||
+ pfile.write(output) | ||
+ pfile.close() | ||
+ print('\n*** Profile printout saved to text file %r. %s' % ( | ||
+ text_file, message)) | ||
|
||
- return_value = None | ||
- if 'r' in opts: | ||
- return_value = profile | ||
+ return_value = None | ||
+ if 'r' in opts: | ||
+ return_value = profile | ||
|
||
- return return_value | ||
+ return return_value | ||
|
||
|
||
def load_ipython_extension(ip): | ||
""" API for IPython to recognize this module as an IPython extension. | ||
""" | ||
- ip.define_magic('lprun', magic_lprun) | ||
+ ip.register_magics(LineProfilerMagics) | ||
|
||
|
||
def load_stats(filename): |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# Copyright 1999-2016 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
# $Id$ | ||
|
||
EAPI=6 | ||
|
||
PYTHON_COMPAT=( python2_7 python3_{4,5} ) | ||
|
||
inherit distutils-r1 | ||
|
||
DESCRIPTION="Line-by-line profiler" | ||
HOMEPAGE="https://github.com/rkern/line_profiler" | ||
SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" | ||
KEYWORDS="~amd64" | ||
|
||
SLOT="0" | ||
LICENSE="BSD" | ||
KEYWORDS="~amd64 ~x86" | ||
IUSE="test" | ||
|
||
DEPEND=" | ||
test? ( dev-python/pytest[${PYTHON_USEDEP}] ) | ||
" | ||
|
||
PATCHES=( | ||
"${FILESDIR}/${P}-fix-name-from-copypasta.patch" | ||
"${FILESDIR}/${P}-ipython-5.0-compatibility.patch" | ||
) | ||
|
||
python_test() { | ||
"${PYTHON}" -m unittest discover -v "${S}"/tests/ \ | ||
|| die "Tests failed with ${EPYTHON}" | ||
} |