diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
commit | 4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch) | |
tree | ba5f07bf3f9d22d82e54a462313f5d244036c768 /dev-python/line_profiler |
reinit the tree, so we can have metadata
Diffstat (limited to 'dev-python/line_profiler')
8 files changed, 470 insertions, 0 deletions
diff --git a/dev-python/line_profiler/Manifest b/dev-python/line_profiler/Manifest new file mode 100644 index 000000000000..3a4ba4df717f --- /dev/null +++ b/dev-python/line_profiler/Manifest @@ -0,0 +1,10 @@ +AUX line_profiler-1.0-fix-name-from-copypasta.patch 862 SHA256 58cfec02b45453c23de77a33b0639c3cdf732e01b5c8737db0bb40144789690e SHA512 6c36b574d6c031fe9c8d6dd7c59a033c5ec3dca25d675c52cea4d990e6044b5a413a347e2bd220f7912ce06e066c36839cec70af36e5153aad6c086a1d30eae6 WHIRLPOOL fe6d950dc8548f1c3c1e602f80825b02699b7eddc1525271008c582ef6876fed86317876a6c458a8bda0df7a29306fb721d1a28b8870692496c141df8f0af65a +AUX line_profiler-1.0-ipython-5.0-compatibility.patch 11633 SHA256 6c9b22ae9af0f21892086dc74ef3f0601b9a5b61e54c5683b4d4be6add5eb56c SHA512 23019c545e348bc794dbb3c251e2f53c245723814c8439e5f00356494c9260a51fbe41efeebb97448bc206b1e1b0e6d8748318c261a5a6ffaee427fbce22bd8f WHIRLPOOL a44cb49041e475b97abca7131050bc052f60e822cd95ca155f015e76d2fb1eaf0e8fc9a6d185760c4f5d3e04339806485ecf9d8c98af695f0c2d4058e2a50375 +DIST line_profiler-1.0.tar.gz 65862 SHA256 a9e0c9ffa814f1215107c86c890afa8e63bec5a37d951f6f9d3668c1df2b1900 SHA512 15dd7ee10951287a5030eaff28e729e82094ec41d8e8dec803d5e44c6b9036ecbf1198365ef43c1fdd28451dec260c6491d118f1762d99fe037bb85eb7908dda WHIRLPOOL 1fd56ea4777a3c569807a124c708018fc77e68521d1f1ecdb13c343ddad3fcd881353cd71a0af36d06a12f1dd17be0f2731040fca5e827a4936298057dabf917 +DIST line_profiler-2.0.tar.gz 68478 SHA256 739f8ad0e4bcd0cb82e99afc09e00a0351234f6b3f0b1f7f0090a8a2fbbf8381 SHA512 c0335fc69fb47c150fa5555af4f7fdf4b172ca12ee6512e04ba854c4a81f3e6ee5594e484d11c8ea7e9e8048e3f3b8661db52332d4ac645195a0e050acea4ecb WHIRLPOOL 6f4a3816fb22c86fe1c691a3e949be41da7680055db5c0909dbfb9af4052cfa50640eca43e0e918e903c23c9e6b8858ebff76e4fa21d8648084ade74f45a2915 +EBUILD line_profiler-1.0-r1.ebuild 683 SHA256 d946ffc6009bc501cf5f9245f56cbddfcd0573af277d96b7586d9158174ae17a SHA512 48263a069ecb191cec782f78ab1056094ee79fd951fc4a3a1cad7355f6595f39bf2f89189f953c7855a8d510be0a9c6aad41c1132e646973d643506df7a20f40 WHIRLPOOL 07f27561c3ffdfe7c6e311995b9d2f206efa1ae696aebd4b6e8b6716901edd8d4398879db77a41292914fe2ecd73a0bb319ee1930caba2b5153ee08b5a085934 +EBUILD line_profiler-1.0.ebuild 568 SHA256 4096df35bd4ec1ac6b1f1ead62c01264cebe218091497856e8b652b6fc07b3aa SHA512 226f5ffc8cd8e12208d3e909504bb9cce15e9f809aaa927cefb7e16bb7ecb63d3c6318cf2ac342b1b84c6a1b5d90e842dbcc39a7acc6a02c5ea5f723ecbe8ebf WHIRLPOOL 446a0ff23a85984474d60b3ff2e86e768eecae0ffa1e194321432bb88e589496a41b9070b4700b5a9c1055d6d305481244a03e3cd80c1e1414d707f7f7060b22 +EBUILD line_profiler-2.0.ebuild 626 SHA256 c14ab4da54d358cbeeadaaf4271abd4ed5fae15a525fd068df25c2e9195f06a5 SHA512 8e93760d55b381eec44ed1f9a2f48850380fc5ca7553def3daca7df9b61d30bde61ce77e64f26029cb42b09ef4ec9e3795b7bd7a3d59682b0bd48f6336561426 WHIRLPOOL 1bc67c108c65795830fa8491f98e12412c81e539d14309e81904d698388f60b94e1aac58045d3f18237a43bf819f872fdcc569b3930720570c43c02b2804ad2a +EBUILD line_profiler-9999.ebuild 582 SHA256 c1f28470633190bc2aab13cfe097d0d15459a03b6e6f64678712795829bd498f SHA512 4f50a2bf39ceb6d132c74705358d396ed5ff341fd8cda88f29c8cd5427a32e65c37c5c358ea620c3ca8fa85fa52c974bfd711df465c51f1bb778a196ae923662 WHIRLPOOL 148da9efa7b410635ee38d72852c57d111354b064360cb0bbf7c10f9455270c59ca27409f2c2b4b1fc68b9b4534ad5d9fb13c5d2872b58ca0d57390a04e192ac +MISC ChangeLog 1573 SHA256 530818cc50f32d6f94fcc223bdd927bee164f44fa58b1702b485d9da021b7e65 SHA512 b4b9c6677275f933ecaf800384f4023c68533f986de2fa3d3bbff735cae8c5dc5411d6de4345d3a2d9475b77a86e228163b830341b400ca00b98c88ee5be81ab WHIRLPOOL fcb8ae0e9c058734d356d7434aff8c2e7a4d3993bb9c19dd8e4271e5b056ad1d95b1edac1539b979685d62c5adb07c7870361372874fe134dcce2e08496698e2 +MISC metadata.xml 810 SHA256 05dc5917ee16d3643827b02064945a1d877d9fcbd02710d4e5e0fab32482ee7c SHA512 6369d88b7412ba45e4d38bce909c198dc35db0e163e751f35b17b38739283fbb5b6d7da23e5cf147c4fcc08ebde39c394a8cef1e32d02de273fed1ad55552cea WHIRLPOOL 9005c81388b4d43352b1adf9fa5a94f96e13296db7250a3157bf3213a7d2c830e2224ffceae7bf0ad25b077a89cf5e36eeec7598bac78424808b5c11a9ec4465 diff --git a/dev-python/line_profiler/files/line_profiler-1.0-fix-name-from-copypasta.patch b/dev-python/line_profiler/files/line_profiler-1.0-fix-name-from-copypasta.patch new file mode 100644 index 000000000000..e51a24f86171 --- /dev/null +++ b/dev-python/line_profiler/files/line_profiler-1.0-fix-name-from-copypasta.patch @@ -0,0 +1,25 @@ +From 717df8c2088087ea4bce870400a2c99b36b0e53d Mon Sep 17 00:00:00 2001 +From: Robert Kern <rkern@enthought.com> +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. diff --git a/dev-python/line_profiler/files/line_profiler-1.0-ipython-5.0-compatibility.patch b/dev-python/line_profiler/files/line_profiler-1.0-ipython-5.0-compatibility.patch new file mode 100644 index 000000000000..04caa8c6987c --- /dev/null +++ b/dev-python/line_profiler/files/line_profiler-1.0-ipython-5.0-compatibility.patch @@ -0,0 +1,299 @@ +https://github.com/rkern/line_profiler/pull/65 + +From 677a43104dd537b515c06eaeffa77f8dcfa5a76e Mon Sep 17 00:00:00 2001 +From: Brett Olsen <brett.olsen@invitae.com> +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): diff --git a/dev-python/line_profiler/line_profiler-1.0-r1.ebuild b/dev-python/line_profiler/line_profiler-1.0-r1.ebuild new file mode 100644 index 000000000000..6dbe4b315ca2 --- /dev/null +++ b/dev-python/line_profiler/line_profiler-1.0-r1.ebuild @@ -0,0 +1,32 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +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}" +} diff --git a/dev-python/line_profiler/line_profiler-1.0.ebuild b/dev-python/line_profiler/line_profiler-1.0.ebuild new file mode 100644 index 000000000000..802d85e74204 --- /dev/null +++ b/dev-python/line_profiler/line_profiler-1.0.ebuild @@ -0,0 +1,27 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=5 + +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}] ) + " + +python_test() { + "${PYTHON}" -m unittest discover -v "${S}"/tests/ \ + || die "Tests failed with ${EPYTHON}" +} diff --git a/dev-python/line_profiler/line_profiler-2.0.ebuild b/dev-python/line_profiler/line_profiler-2.0.ebuild new file mode 100644 index 000000000000..81d586184a05 --- /dev/null +++ b/dev-python/line_profiler/line_profiler-2.0.ebuild @@ -0,0 +1,28 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +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" + +RDEPEND="dev-python/ipython[${PYTHON_USEDEP}]" +DEPEND="${RDEPEND} + test? ( dev-python/pytest[${PYTHON_USEDEP}] ) + " + +python_test() { + "${EPYTHON}" -m unittest discover -v "${S}"/tests/ \ + || die "Tests failed with ${EPYTHON}" +} diff --git a/dev-python/line_profiler/line_profiler-9999.ebuild b/dev-python/line_profiler/line_profiler-9999.ebuild new file mode 100644 index 000000000000..cbcda89a1905 --- /dev/null +++ b/dev-python/line_profiler/line_profiler-9999.ebuild @@ -0,0 +1,27 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=5 + +PYTHON_COMPAT=( python2_7 python3_{4,5} ) + +inherit distutils-r1 git-r3 + +DESCRIPTION="Line-by-line profiler" +HOMEPAGE="https://github.com/rkern/line_profiler" +EGIT_REPO_URI="https://github.com/rkern/${PN}.git" + +SLOT="0" +LICENSE="BSD" +KEYWORDS="" +IUSE="test" + +DEPEND=" + dev-python/cython[${PYTHON_USEDEP}] + test? ( dev-python/pytest[${PYTHON_USEDEP}] ) + " + +python_test() { + "${PYTHON}" -m unittest discover -v "${S}"/tests/ \ + || die "Tests failed with ${EPYTHON}" +} diff --git a/dev-python/line_profiler/metadata.xml b/dev-python/line_profiler/metadata.xml new file mode 100644 index 000000000000..a5ab15f42671 --- /dev/null +++ b/dev-python/line_profiler/metadata.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>marbre@linux.sungazer.de</email> + <name>Marius Brehler</name> + </maintainer> + <maintainer type="project"> + <email>sci@gentoo.org</email> + <name>Gentoo Science Project</name> + </maintainer> + <longdescription> + line_profiler is a module for doing line-by-line profiling of + functions. kernprof is a convenient script for running either + line_profiler or the Python standard library's cProfile or profile + modules, depending on what is available. + </longdescription> + <upstream> + <remote-id type="pypi">line_profiler</remote-id> + <remote-id type="github">rkern/line_profiler</remote-id> + </upstream> +</pkgmetadata> |