omdev 0.0.0.dev287__py3-none-any.whl → 0.0.0.dev289__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 +1 -13
- omdev/py/scripts/execstat.py +138 -40
- omdev/py/scripts/importtrace.py +3 -3
- omdev/tools/json/cli.py +2 -2
- {omdev-0.0.0.dev287.dist-info → omdev-0.0.0.dev289.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev287.dist-info → omdev-0.0.0.dev289.dist-info}/RECORD +10 -11
- omdev/py/scripts/exectime.py +0 -106
- {omdev-0.0.0.dev287.dist-info → omdev-0.0.0.dev289.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev287.dist-info → omdev-0.0.0.dev289.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev287.dist-info → omdev-0.0.0.dev289.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev287.dist-info → omdev-0.0.0.dev289.dist-info}/top_level.txt +0 -0
omdev/.manifests.json
CHANGED
@@ -171,7 +171,7 @@
|
|
171
171
|
"module": ".py.scripts.execstat",
|
172
172
|
"attr": "_CLI_MODULE",
|
173
173
|
"file": "omdev/py/scripts/execstat.py",
|
174
|
-
"line":
|
174
|
+
"line": 82,
|
175
175
|
"value": {
|
176
176
|
"$.cli.types.CliModule": {
|
177
177
|
"cmd_name": "py/execstat",
|
@@ -179,18 +179,6 @@
|
|
179
179
|
}
|
180
180
|
}
|
181
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"
|
191
|
-
}
|
192
|
-
}
|
193
|
-
},
|
194
182
|
{
|
195
183
|
"module": ".py.scripts.importtrace",
|
196
184
|
"attr": "_CLI_MODULE",
|
omdev/py/scripts/execstat.py
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
# @omlish-script
|
3
|
+
import argparse
|
3
4
|
import inspect
|
4
5
|
import json
|
6
|
+
import statistics
|
5
7
|
import subprocess
|
6
8
|
import sys
|
7
9
|
|
@@ -12,34 +14,65 @@ import sys
|
|
12
14
|
def _run(
|
13
15
|
src: str,
|
14
16
|
*,
|
15
|
-
|
17
|
+
setup: str | None = None,
|
18
|
+
time: bool = False,
|
19
|
+
rss: bool = False,
|
20
|
+
modules: bool = False,
|
16
21
|
) -> dict:
|
17
|
-
|
18
|
-
|
19
|
-
import time # noqa
|
22
|
+
if rss:
|
23
|
+
import resource # noqa
|
20
24
|
|
21
|
-
|
22
|
-
|
25
|
+
def get_rss() -> int:
|
26
|
+
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
|
23
27
|
|
24
|
-
if
|
25
|
-
|
28
|
+
if time:
|
29
|
+
from time import monotonic as get_time
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
start_time = time.time()
|
31
|
+
if modules:
|
32
|
+
import sys # noqa
|
30
33
|
|
31
|
-
|
34
|
+
def get_modules() -> set[str]:
|
35
|
+
return set(sys.modules)
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
+
#
|
36
71
|
|
37
72
|
return {
|
38
|
-
'
|
39
|
-
'
|
40
|
-
'
|
41
|
-
'rss_s': f'{rss:_}',
|
42
|
-
'modules': sorted(end_modules - start_modules),
|
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
|
43
76
|
}
|
44
77
|
|
45
78
|
|
@@ -54,26 +87,91 @@ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
|
54
87
|
|
55
88
|
|
56
89
|
def _main() -> None:
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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))
|
77
175
|
|
78
176
|
|
79
177
|
if __name__ == '__main__':
|
omdev/py/scripts/importtrace.py
CHANGED
@@ -488,20 +488,20 @@ def _main() -> None:
|
|
488
488
|
import argparse
|
489
489
|
|
490
490
|
parser = argparse.ArgumentParser()
|
491
|
-
parser.add_argument('--
|
491
|
+
parser.add_argument('-x', '--exe')
|
492
492
|
parser.add_argument('--sqlite')
|
493
493
|
parser.add_argument('--pretty', action='store_true')
|
494
494
|
parser.add_argument('mod')
|
495
495
|
args = parser.parse_args()
|
496
496
|
|
497
|
-
if args.
|
497
|
+
if args.exe:
|
498
498
|
import inspect
|
499
499
|
import subprocess
|
500
500
|
|
501
501
|
mod_src = inspect.getsource(sys.modules[__name__])
|
502
502
|
subprocess.run(
|
503
503
|
[
|
504
|
-
args.
|
504
|
+
args.exe,
|
505
505
|
'-',
|
506
506
|
*(['--sqlite', args.sqlite] if args.sqlite else []),
|
507
507
|
*(['--pretty'] if args.pretty else []),
|
omdev/tools/json/cli.py
CHANGED
@@ -73,8 +73,8 @@ def _build_args_parser() -> argparse.ArgumentParser:
|
|
73
73
|
|
74
74
|
parser.add_argument('file', nargs='?')
|
75
75
|
|
76
|
-
parser.add_argument('--stream', action='store_true')
|
77
|
-
parser.add_argument('--stream-build', action='store_true')
|
76
|
+
parser.add_argument('-S', '--stream', action='store_true')
|
77
|
+
parser.add_argument('-B', '--stream-build', action='store_true')
|
78
78
|
|
79
79
|
parser.add_argument('-l', '--lines', action='store_true')
|
80
80
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev289
|
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.dev289
|
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,9 +201,8 @@ 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/execstat.py,sha256=
|
205
|
-
omdev/py/scripts/
|
206
|
-
omdev/py/scripts/importtrace.py,sha256=NjRilVNBugswrNflIhPCPHRTd-vIijqSZ8C7J8lariI,14038
|
204
|
+
omdev/py/scripts/execstat.py,sha256=eyk_TCeJt-xtMGqaW3X7pnEBe7JZbXrTYsODn_m6lfM,3869
|
205
|
+
omdev/py/scripts/importtrace.py,sha256=TqALDqR6ODpbMyAtk2q84Xrvmn0UPGaKAdcNB7E62bA,14035
|
207
206
|
omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
208
207
|
omdev/py/tools/importscan.py,sha256=4dCH0coX0OqNwesteKaTE8GxuSfLhgXYQlzNUXLiSNY,4640
|
209
208
|
omdev/py/tools/mkrelimp.py,sha256=L6TksQixUc_DQGXKFMOKnYJ-JixeP3ldgkDqHeEs2Ww,4044
|
@@ -250,7 +249,7 @@ omdev/tools/git/consts.py,sha256=JuXivUNDkNhM4pe97icjRVAKM8cNRbrODquHINNKqOE,40
|
|
250
249
|
omdev/tools/git/messages.py,sha256=NWztIK0nAKJIOVzuVQcR_5LHZUgqyVkrOlpl7dFLMdU,2424
|
251
250
|
omdev/tools/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
252
251
|
omdev/tools/json/__main__.py,sha256=wqpkN_NsQyNwKW4qjVj8ADJ4_C98KhrFBtE-Z1UamfU,168
|
253
|
-
omdev/tools/json/cli.py,sha256=
|
252
|
+
omdev/tools/json/cli.py,sha256=WQ8VQ9EkGD6IeIuUci8hLPwfx6y2B8ZzFlTTizwwKXU,9598
|
254
253
|
omdev/tools/json/formats.py,sha256=RgtPdcs294o9n9czjafHppg1iSzD-olsIc3v8ApM9Os,1908
|
255
254
|
omdev/tools/json/io.py,sha256=sfj2hJS9Hy3aUR8a_lLzOrYcmL9fSKyvOHiofdUASsI,1427
|
256
255
|
omdev/tools/json/parsing.py,sha256=BNCOcPs6eDvB6wePnjl9H0C-ngHxLRgzLM1EPetWnrQ,2093
|
@@ -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.dev289.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
262
|
+
omdev-0.0.0.dev289.dist-info/METADATA,sha256=8-HvwI8Pvm2Hg03RBIkSLRUh62utv2kbxiFn3VHiTzE,1478
|
263
|
+
omdev-0.0.0.dev289.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
264
|
+
omdev-0.0.0.dev289.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
265
|
+
omdev-0.0.0.dev289.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
266
|
+
omdev-0.0.0.dev289.dist-info/RECORD,,
|
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
|