omdev 0.0.0.dev286__py3-none-any.whl → 0.0.0.dev288__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omdev/.manifests.json +5 -17
- omdev/py/scripts/execstat.py +178 -0
- {omdev-0.0.0.dev286.dist-info → omdev-0.0.0.dev288.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev286.dist-info → omdev-0.0.0.dev288.dist-info}/RECORD +8 -9
- omdev/py/scripts/execrss.py +0 -37
- omdev/py/scripts/exectime.py +0 -106
- {omdev-0.0.0.dev286.dist-info → omdev-0.0.0.dev288.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev286.dist-info → omdev-0.0.0.dev288.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev286.dist-info → omdev-0.0.0.dev288.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev286.dist-info → omdev-0.0.0.dev288.dist-info}/top_level.txt +0 -0
omdev/.manifests.json
CHANGED
@@ -168,26 +168,14 @@
|
|
168
168
|
}
|
169
169
|
},
|
170
170
|
{
|
171
|
-
"module": ".py.scripts.
|
171
|
+
"module": ".py.scripts.execstat",
|
172
172
|
"attr": "_CLI_MODULE",
|
173
|
-
"file": "omdev/py/scripts/
|
174
|
-
"line":
|
173
|
+
"file": "omdev/py/scripts/execstat.py",
|
174
|
+
"line": 82,
|
175
175
|
"value": {
|
176
176
|
"$.cli.types.CliModule": {
|
177
|
-
"cmd_name": "py/
|
178
|
-
"mod_name": "omdev.py.scripts.
|
179
|
-
}
|
180
|
-
}
|
181
|
-
},
|
182
|
-
{
|
183
|
-
"module": ".py.scripts.exectime",
|
184
|
-
"attr": "_CLI_MODULE",
|
185
|
-
"file": "omdev/py/scripts/exectime.py",
|
186
|
-
"line": 66,
|
187
|
-
"value": {
|
188
|
-
"$.cli.types.CliModule": {
|
189
|
-
"cmd_name": "py/exectime",
|
190
|
-
"mod_name": "omdev.py.scripts.exectime"
|
177
|
+
"cmd_name": "py/execstat",
|
178
|
+
"mod_name": "omdev.py.scripts.execstat"
|
191
179
|
}
|
192
180
|
}
|
193
181
|
},
|
@@ -0,0 +1,178 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# @omlish-script
|
3
|
+
import argparse
|
4
|
+
import inspect
|
5
|
+
import json
|
6
|
+
import statistics
|
7
|
+
import subprocess
|
8
|
+
import sys
|
9
|
+
|
10
|
+
|
11
|
+
##
|
12
|
+
|
13
|
+
|
14
|
+
def _run(
|
15
|
+
src: str,
|
16
|
+
*,
|
17
|
+
setup: str | None = None,
|
18
|
+
time: bool = False,
|
19
|
+
rss: bool = False,
|
20
|
+
modules: bool = False,
|
21
|
+
) -> dict:
|
22
|
+
if rss:
|
23
|
+
import resource # noqa
|
24
|
+
|
25
|
+
def get_rss() -> int:
|
26
|
+
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
|
27
|
+
|
28
|
+
if time:
|
29
|
+
from time import monotonic as get_time
|
30
|
+
|
31
|
+
if modules:
|
32
|
+
import sys # noqa
|
33
|
+
|
34
|
+
def get_modules() -> set[str]:
|
35
|
+
return set(sys.modules)
|
36
|
+
|
37
|
+
#
|
38
|
+
|
39
|
+
if setup:
|
40
|
+
exec(setup)
|
41
|
+
|
42
|
+
code = compile(src, '', 'exec')
|
43
|
+
|
44
|
+
#
|
45
|
+
|
46
|
+
if rss:
|
47
|
+
start_rss = get_rss() # noqa
|
48
|
+
|
49
|
+
if modules:
|
50
|
+
start_modules = get_modules() # noqa
|
51
|
+
|
52
|
+
if time:
|
53
|
+
start_time = get_time() # noqa
|
54
|
+
|
55
|
+
#
|
56
|
+
|
57
|
+
exec(code)
|
58
|
+
|
59
|
+
#
|
60
|
+
|
61
|
+
if time:
|
62
|
+
end_time = get_time()
|
63
|
+
|
64
|
+
if rss:
|
65
|
+
end_rss = get_rss()
|
66
|
+
|
67
|
+
if modules:
|
68
|
+
end_modules = get_modules()
|
69
|
+
|
70
|
+
#
|
71
|
+
|
72
|
+
return {
|
73
|
+
**({'time': (end_time - start_time)} if time else {}), # noqa
|
74
|
+
**({'rss': (end_rss - start_rss)} if rss else {}), # noqa
|
75
|
+
**({'modules': sorted(end_modules - start_modules)} if modules else {}), # noqa
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
#
|
80
|
+
|
81
|
+
|
82
|
+
# @omlish-manifest
|
83
|
+
_CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
84
|
+
'cmd_name': 'py/execstat',
|
85
|
+
'mod_name': __name__,
|
86
|
+
}}
|
87
|
+
|
88
|
+
|
89
|
+
def _main() -> None:
|
90
|
+
parser = argparse.ArgumentParser()
|
91
|
+
|
92
|
+
parser.add_argument('src')
|
93
|
+
parser.add_argument('-s', '--setup')
|
94
|
+
|
95
|
+
parser.add_argument('-t', '--time', action='store_true')
|
96
|
+
parser.add_argument('-r', '--rss', action='store_true')
|
97
|
+
parser.add_argument('-m', '--modules', action='store_true')
|
98
|
+
|
99
|
+
parser.add_argument('-n', '--num-runs', type=int, default=1)
|
100
|
+
|
101
|
+
parser.add_argument('-P', '--precision', type=int, default=3)
|
102
|
+
|
103
|
+
parser.add_argument('-x', '--exe')
|
104
|
+
|
105
|
+
args = parser.parse_args()
|
106
|
+
|
107
|
+
if (n := args.num_runs) < 1:
|
108
|
+
raise ValueError('num-runs must be > 0')
|
109
|
+
|
110
|
+
prec = args.precision
|
111
|
+
|
112
|
+
#
|
113
|
+
|
114
|
+
if (exe := args.exe) is None:
|
115
|
+
exe = sys.executable
|
116
|
+
|
117
|
+
results = []
|
118
|
+
for i in range(n):
|
119
|
+
run_kw = dict(
|
120
|
+
src=args.src,
|
121
|
+
setup=args.setup,
|
122
|
+
time=bool(args.time),
|
123
|
+
)
|
124
|
+
|
125
|
+
if i == 0:
|
126
|
+
run_kw.update(
|
127
|
+
rss=bool(args.rss),
|
128
|
+
modules=bool(args.modules),
|
129
|
+
)
|
130
|
+
|
131
|
+
payload = '\n'.join([
|
132
|
+
inspect.getsource(_run),
|
133
|
+
f'dct = _run(**{run_kw!r})',
|
134
|
+
'import json',
|
135
|
+
'print(json.dumps(dct))',
|
136
|
+
])
|
137
|
+
|
138
|
+
result = json.loads(subprocess.check_output([exe, '-c', payload]))
|
139
|
+
|
140
|
+
results.append(result)
|
141
|
+
|
142
|
+
#
|
143
|
+
|
144
|
+
out = {}
|
145
|
+
|
146
|
+
if args.time:
|
147
|
+
if n > 1:
|
148
|
+
ts = [r['time'] * 1000. for r in results]
|
149
|
+
out.update({
|
150
|
+
'time_ms_mean': (time_ms_mean := round(statistics.mean(ts), prec)),
|
151
|
+
'time_ms_mean_s': f'{time_ms_mean:_}',
|
152
|
+
'time_ms_median': (time_ms_median := round(statistics.median(ts), prec)),
|
153
|
+
'time_ms_median_s': f'{time_ms_median:_}',
|
154
|
+
'time_ms_quantiles': (time_ms_quantiles := [round(tq, prec) for tq in statistics.quantiles(ts)]),
|
155
|
+
'time_ms_quantiles_s': [f'{tq:_}' for tq in time_ms_quantiles],
|
156
|
+
})
|
157
|
+
else:
|
158
|
+
out.update({
|
159
|
+
'time_ms': (time_ms := round(results[0]['time'] * 1000., prec)),
|
160
|
+
'time_ms_s': f'{time_ms:_}',
|
161
|
+
})
|
162
|
+
|
163
|
+
if args.rss:
|
164
|
+
out.update({
|
165
|
+
'rss': (rss := results[0]['rss']),
|
166
|
+
'rss_s': f'{rss:_}',
|
167
|
+
})
|
168
|
+
|
169
|
+
if args.modules:
|
170
|
+
out.update({
|
171
|
+
'modules': results[0]['modules'],
|
172
|
+
})
|
173
|
+
|
174
|
+
print(json.dumps(out, indent=2))
|
175
|
+
|
176
|
+
|
177
|
+
if __name__ == '__main__':
|
178
|
+
_main()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev288
|
4
4
|
Summary: omdev
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.12
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev288
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
omdev/.manifests.json,sha256=
|
1
|
+
omdev/.manifests.json,sha256=zmYuVLzazV03KggE8ZqY0MlVvpEwChvCWh_wfCSEn3w,10394
|
2
2
|
omdev/__about__.py,sha256=OgO_8azOzKriF2qPeDWRLcRe9p1XW5kYdJCq5vewff0,1171
|
3
3
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omdev/cmake.py,sha256=9rfSvFHPmKDj9ngvfDB2vK8O-xO_ZwUm7hMKLWA-yOw,4578
|
@@ -201,8 +201,7 @@ omdev/py/findimports.py,sha256=V3GcFhqYOiPQtAOpTi4Pmeb3_c5mKqlEwah7v9vCBjg,2476
|
|
201
201
|
omdev/py/srcheaders.py,sha256=cMopJr-QpOmzEBow-4mVupxdULE8QdSaSLH2aJV5Xxg,1993
|
202
202
|
omdev/py/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
203
203
|
omdev/py/scripts/bumpversion.py,sha256=2NnfRsJiZNTg-LubIwXCm2vklG7-kIR8_xFUEZNxtiY,1119
|
204
|
-
omdev/py/scripts/
|
205
|
-
omdev/py/scripts/exectime.py,sha256=S2O4MgtzTsFOY2IUJxsrnOIame9tEFc6aOlKP-F1JSg,1541
|
204
|
+
omdev/py/scripts/execstat.py,sha256=eyk_TCeJt-xtMGqaW3X7pnEBe7JZbXrTYsODn_m6lfM,3869
|
206
205
|
omdev/py/scripts/importtrace.py,sha256=NjRilVNBugswrNflIhPCPHRTd-vIijqSZ8C7J8lariI,14038
|
207
206
|
omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
208
207
|
omdev/py/tools/importscan.py,sha256=4dCH0coX0OqNwesteKaTE8GxuSfLhgXYQlzNUXLiSNY,4640
|
@@ -259,9 +258,9 @@ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw
|
|
259
258
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
260
259
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
261
260
|
omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
|
262
|
-
omdev-0.0.0.
|
263
|
-
omdev-0.0.0.
|
264
|
-
omdev-0.0.0.
|
265
|
-
omdev-0.0.0.
|
266
|
-
omdev-0.0.0.
|
267
|
-
omdev-0.0.0.
|
261
|
+
omdev-0.0.0.dev288.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
262
|
+
omdev-0.0.0.dev288.dist-info/METADATA,sha256=n_qLz-pv3lbroeIziTVCwPNh81awUanZKBO4BoS7WpU,1478
|
263
|
+
omdev-0.0.0.dev288.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
264
|
+
omdev-0.0.0.dev288.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
265
|
+
omdev-0.0.0.dev288.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
266
|
+
omdev-0.0.0.dev288.dist-info/RECORD,,
|
omdev/py/scripts/execrss.py
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
# @omlish-script
|
3
|
-
import resource
|
4
|
-
import sys
|
5
|
-
|
6
|
-
|
7
|
-
def _get_rss() -> int:
|
8
|
-
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
|
9
|
-
|
10
|
-
|
11
|
-
# @omlish-manifest
|
12
|
-
_CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
13
|
-
'cmd_name': 'py/execrss',
|
14
|
-
'mod_name': __name__,
|
15
|
-
}}
|
16
|
-
|
17
|
-
|
18
|
-
def _main() -> None:
|
19
|
-
if len(sys.argv) == 2:
|
20
|
-
pre = None
|
21
|
-
[src] = sys.argv[1:]
|
22
|
-
elif len(sys.argv) == 3:
|
23
|
-
[pre, src] = sys.argv[1:]
|
24
|
-
else:
|
25
|
-
raise Exception('Invalid arguments')
|
26
|
-
|
27
|
-
if pre:
|
28
|
-
exec(pre)
|
29
|
-
|
30
|
-
start = _get_rss()
|
31
|
-
exec(src)
|
32
|
-
end = _get_rss()
|
33
|
-
print(end - start)
|
34
|
-
|
35
|
-
|
36
|
-
if __name__ == '__main__':
|
37
|
-
_main()
|
omdev/py/scripts/exectime.py
DELETED
@@ -1,106 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
# @omlish-script
|
3
|
-
|
4
|
-
|
5
|
-
##
|
6
|
-
|
7
|
-
|
8
|
-
def _run_one(src, pre=None):
|
9
|
-
import time
|
10
|
-
|
11
|
-
if pre:
|
12
|
-
exec(pre)
|
13
|
-
|
14
|
-
co = compile(src, '<string>', 'exec')
|
15
|
-
start = time.time_ns()
|
16
|
-
exec(co)
|
17
|
-
end = time.time_ns()
|
18
|
-
|
19
|
-
return end - start
|
20
|
-
|
21
|
-
|
22
|
-
##
|
23
|
-
|
24
|
-
|
25
|
-
def _run(n, src, pre=None):
|
26
|
-
if n is None:
|
27
|
-
return _run_one(src, pre=pre)
|
28
|
-
|
29
|
-
#
|
30
|
-
|
31
|
-
import inspect
|
32
|
-
|
33
|
-
cmd = '\n'.join([
|
34
|
-
inspect.getsource(_run_one),
|
35
|
-
f'print(_run_one({src!r}, pre={pre!r}))',
|
36
|
-
])
|
37
|
-
|
38
|
-
#
|
39
|
-
|
40
|
-
import subprocess
|
41
|
-
import sys
|
42
|
-
|
43
|
-
ts = []
|
44
|
-
for _ in range(n):
|
45
|
-
out = subprocess.check_output([sys.executable, '-c', cmd]).decode()
|
46
|
-
t = int(out.strip())
|
47
|
-
ts.append(t)
|
48
|
-
|
49
|
-
#
|
50
|
-
|
51
|
-
import statistics
|
52
|
-
|
53
|
-
o = {
|
54
|
-
# 'times': ts,
|
55
|
-
'mean': statistics.mean(ts),
|
56
|
-
'median': statistics.median(ts),
|
57
|
-
'quantiles': statistics.quantiles(ts),
|
58
|
-
}
|
59
|
-
|
60
|
-
return o
|
61
|
-
|
62
|
-
|
63
|
-
##
|
64
|
-
|
65
|
-
|
66
|
-
# @omlish-manifest
|
67
|
-
_CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
68
|
-
'cmd_name': 'py/exectime',
|
69
|
-
'mod_name': __name__,
|
70
|
-
}}
|
71
|
-
|
72
|
-
|
73
|
-
def _main():
|
74
|
-
import sys
|
75
|
-
|
76
|
-
args = sys.argv[1:]
|
77
|
-
|
78
|
-
n = None
|
79
|
-
if args:
|
80
|
-
try:
|
81
|
-
n = int(args[0])
|
82
|
-
except ValueError:
|
83
|
-
pass
|
84
|
-
else:
|
85
|
-
args.pop(0)
|
86
|
-
|
87
|
-
if len(args) > 1:
|
88
|
-
pre = args.pop(0)
|
89
|
-
else:
|
90
|
-
pre = None
|
91
|
-
|
92
|
-
if len(args) != 1:
|
93
|
-
raise Exception('Invalid arguments')
|
94
|
-
[src] = args
|
95
|
-
|
96
|
-
#
|
97
|
-
|
98
|
-
o = _run(n, src, pre=pre)
|
99
|
-
|
100
|
-
import json
|
101
|
-
|
102
|
-
print(json.dumps(o, indent=2))
|
103
|
-
|
104
|
-
|
105
|
-
if __name__ == '__main__':
|
106
|
-
_main()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|