viztracer 1.0.2__cp311-cp311-macosx_11_0_arm64.whl → 1.0.3__cp311-cp311-macosx_11_0_arm64.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.

Potentially problematic release.


This version of viztracer might be problematic. Click here for more details.

viztracer/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2
2
  # For details: https://github.com/gaogaotiantian/viztracer/blob/master/NOTICE.txt
3
3
 
4
- __version__ = "1.0.2"
4
+ __version__ = "1.0.3"
5
5
 
6
6
 
7
7
  from .cellmagic import load_ipython_extension
viztracer/decorator.py CHANGED
@@ -81,7 +81,7 @@ def trace_and_save(method: Optional[Callable[..., R]] = None,
81
81
  if not os.path.exists(output_dir):
82
82
  os.mkdir(output_dir)
83
83
  file_name = os.path.join(output_dir, f"result_{func.__name__}_{int(100000 * time.time())}.json")
84
- if multiprocessing.get_start_method() == "fork":
84
+ if multiprocessing.get_start_method() == "fork" and not multiprocessing.current_process().daemon:
85
85
  tracer.fork_save(file_name)
86
86
  else:
87
87
  tracer.save(file_name)
viztracer/main.py CHANGED
@@ -25,7 +25,7 @@ from . import __version__
25
25
  from .code_monkey import CodeMonkey
26
26
  from .patch import install_all_hooks
27
27
  from .report_builder import ReportBuilder
28
- from .util import color_print, pid_exists, same_line_print, time_str_to_us, unique_file_name
28
+ from .util import color_print, frame_stack_has_func, pid_exists, same_line_print, time_str_to_us, unique_file_name
29
29
  from .viztracer import VizTracer
30
30
 
31
31
  # For all the procedures in VizUI, return a tuple as the result
@@ -139,6 +139,8 @@ class VizUI:
139
139
  "Will by default generate json files"))
140
140
  parser.add_argument("--module", "-m", nargs="?", default=None,
141
141
  help="run module with VizTracer")
142
+ parser.add_argument("--patch_only", action="store_true", default=False,
143
+ help=argparse.SUPPRESS)
142
144
  parser.add_argument("--compress", nargs="?", default=None,
143
145
  help="Compress a json report to a compact cvf format")
144
146
  parser.add_argument("--decompress", nargs="?", default=None,
@@ -357,8 +359,16 @@ class VizUI:
357
359
  self.args,
358
360
  patch_multiprocess=not options.ignore_multiprocess)
359
361
 
362
+ if options.patch_only:
363
+ exec(code, global_dict)
364
+ return True, None
365
+
360
366
  def term_handler(signalnum, frame):
361
- sys.exit(0)
367
+ # Exit if we are not already doing exit routine
368
+ if not frame_stack_has_func(frame, (self.exit_routine,
369
+ tracer.exit_routine,
370
+ multiprocessing.util._exit_function)):
371
+ sys.exit(0)
362
372
 
363
373
  signal.signal(signal.SIGTERM, term_handler)
364
374
 
viztracer/patch.py CHANGED
@@ -6,6 +6,7 @@ from __future__ import annotations
6
6
  import functools
7
7
  import os
8
8
  import re
9
+ import shutil
9
10
  import sys
10
11
  import textwrap
11
12
  from multiprocessing import Process
@@ -62,6 +63,20 @@ def patch_subprocess(viz_args: list[str]) -> None:
62
63
  return [sys.executable, *py_args, "-m", "viztracer", "--quiet", *viz_args, *mode, "--", *args_iter]
63
64
  return None
64
65
 
66
+ def is_python_entry(path: str) -> bool:
67
+ real_path = shutil.which(path)
68
+ if real_path is None:
69
+ return False
70
+ try:
71
+ with open(real_path, "rb") as f:
72
+ if f.read(2) == b"#!":
73
+ executable = f.readline().decode("utf-8").strip()
74
+ if "python" in executable.split('/')[-1]:
75
+ return True
76
+ except Exception: # pragma: no cover
77
+ pass
78
+ return False
79
+
65
80
  @functools.wraps(subprocess.Popen.__init__)
66
81
  def subprocess_init(self: subprocess.Popen[Any], args: Union[str, Sequence[Any], Any], **kwargs: Any) -> None:
67
82
  new_args = args
@@ -70,13 +85,15 @@ def patch_subprocess(viz_args: list[str]) -> None:
70
85
  if isinstance(new_args, Sequence):
71
86
  if "python" in os.path.basename(new_args[0]):
72
87
  new_args = build_command(new_args)
73
- if new_args is not None and kwargs.get("shell") and isinstance(args, str):
74
- # For shell=True, we should convert the commands back to string
75
- # if it was passed as string
76
- # This is mostly for Unix shell
77
- new_args = " ".join(new_args)
88
+ elif is_python_entry(new_args[0]):
89
+ new_args = ["python", "-m", "viztracer", "--quiet", *viz_args, "--", *new_args]
78
90
  else:
79
91
  new_args = None
92
+ if new_args is not None and kwargs.get("shell") and isinstance(args, str):
93
+ # For shell=True, we should convert the commands back to string
94
+ # if it was passed as string
95
+ # This is mostly for Unix shell
96
+ new_args = " ".join(new_args)
80
97
 
81
98
  if new_args is None:
82
99
  new_args = args
@@ -94,7 +111,7 @@ def patch_subprocess(viz_args: list[str]) -> None:
94
111
  setattr(subprocess.Popen, "__init__", subprocess_init)
95
112
 
96
113
 
97
- def patch_multiprocessing(tracer: VizTracer, args: list[str]) -> None:
114
+ def patch_multiprocessing(tracer: VizTracer, viz_args: list[str]) -> None:
98
115
 
99
116
  # For fork process
100
117
  def func_after_fork(tracer: VizTracer):
@@ -107,31 +124,68 @@ def patch_multiprocessing(tracer: VizTracer, args: list[str]) -> None:
107
124
  tracer._afterfork_cb(tracer, *tracer._afterfork_args, **tracer._afterfork_kwargs)
108
125
 
109
126
  import multiprocessing.spawn
127
+ import multiprocessing.util
110
128
  from multiprocessing.util import register_after_fork # type: ignore
111
129
 
112
130
  register_after_fork(tracer, func_after_fork)
113
131
 
114
- # For spawn process
115
- @functools.wraps(multiprocessing.spawn.get_command_line)
116
- def get_command_line(**kwds) -> list[str]:
117
- """
118
- Returns prefix of command line used for spawning a child process
119
- """
120
- if getattr(sys, 'frozen', False): # pragma: no cover
121
- return ([sys.executable, '--multiprocessing-fork']
122
- + ['%s=%r' % item for item in kwds.items()])
123
- else:
124
- prog = textwrap.dedent(f"""
125
- from multiprocessing.spawn import spawn_main;
126
- from viztracer.patch import patch_spawned_process;
127
- patch_spawned_process({tracer.init_kwargs}, {args});
128
- spawn_main(%s)
129
- """)
130
- prog %= ', '.join('%s=%r' % item for item in kwds.items())
131
- opts = multiprocessing.util._args_from_interpreter_flags() # type: ignore
132
- return [multiprocessing.spawn._python_exe] + opts + ['-c', prog, '--multiprocessing-fork'] # type: ignore
133
-
134
- multiprocessing.spawn.get_command_line = get_command_line
132
+ if sys.platform == "win32":
133
+ # For spawn process on Windows
134
+ @functools.wraps(multiprocessing.spawn.get_command_line)
135
+ def get_command_line(**kwds) -> list[str]:
136
+ """
137
+ Returns prefix of command line used for spawning a child process
138
+ """
139
+ if getattr(sys, 'frozen', False): # pragma: no cover
140
+ return ([sys.executable, '--multiprocessing-fork']
141
+ + ['%s=%r' % item for item in kwds.items()])
142
+ else:
143
+ prog = textwrap.dedent(f"""
144
+ from multiprocessing.spawn import spawn_main;
145
+ from viztracer.patch import patch_spawned_process;
146
+ patch_spawned_process({tracer.init_kwargs}, {viz_args});
147
+ spawn_main(%s)
148
+ """)
149
+ prog %= ', '.join('%s=%r' % item for item in kwds.items())
150
+ opts = multiprocessing.util._args_from_interpreter_flags() # type: ignore
151
+ return [multiprocessing.spawn._python_exe] + opts + ['-c', prog, '--multiprocessing-fork'] # type: ignore
152
+
153
+ multiprocessing.spawn.get_command_line = get_command_line
154
+ else:
155
+ # POSIX
156
+ # For forkserver process and spawned process
157
+ # We patch spawnv_passfds to trace forkserver parent process so the forked
158
+ # children can be traced
159
+ _spawnv_passfds = multiprocessing.util.spawnv_passfds
160
+
161
+ @functools.wraps(_spawnv_passfds)
162
+ def spawnv_passfds(path, args, passfds):
163
+ if "-c" in args:
164
+ idx = args.index("-c")
165
+ cmd = args[idx + 1]
166
+ if "forkserver" in cmd:
167
+ # forkserver will not end before main process, avoid deadlock by --patch_only
168
+ args = (
169
+ args[:idx]
170
+ + ["-m", "viztracer", "--patch_only", *viz_args]
171
+ + ["--subprocess_child", "--dump_raw", "-o", tracer.output_file]
172
+ + args[idx:]
173
+ )
174
+ elif "resource_tracker" not in cmd:
175
+ # We don't trace resource_tracker as it does not quit before the main process
176
+ # This is a normal spawned process. Only one of spawnv_passfds and spawn._main
177
+ # can be patched. forkserver process will use spawn._main after forking a child,
178
+ # so on POSIX we patch spawnv_passfds which has a similar effect on spawned processes.
179
+ args = (
180
+ args[:idx]
181
+ + ["-m", "viztracer", *viz_args]
182
+ + ["--subprocess_child", "--dump_raw", "-o", tracer.output_file]
183
+ + args[idx:]
184
+ )
185
+ ret = _spawnv_passfds(path, args, passfds)
186
+ return ret
187
+
188
+ multiprocessing.util.spawnv_passfds = spawnv_passfds # type: ignore
135
189
 
136
190
 
137
191
  class SpawnProcess:
@@ -185,11 +239,29 @@ def patch_spawned_process(viztracer_kwargs: dict[str, Any], cmdline_args: list[s
185
239
  multiprocessing.spawn._main = _main # type: ignore
186
240
 
187
241
 
242
+ def filter_args(args: list[str]) -> list[str]:
243
+ new_args = []
244
+ i = 0
245
+ while i < len(args):
246
+ arg = args[i]
247
+ if arg == "-u" or arg == "--unique_output_file":
248
+ i += 1
249
+ continue
250
+ elif arg == "-o" or arg == "--output_file":
251
+ i += 2
252
+ continue
253
+ new_args.append(arg)
254
+ i += 1
255
+ return new_args
256
+
257
+
188
258
  def install_all_hooks(
189
259
  tracer: VizTracer,
190
260
  args: list[str],
191
261
  patch_multiprocess: bool = True) -> None:
192
262
 
263
+ args = filter_args(args)
264
+
193
265
  # multiprocess hook
194
266
  if patch_multiprocess:
195
267
  patch_multiprocessing(tracer, args)
@@ -205,7 +277,20 @@ def install_all_hooks(
205
277
  if event == "os.exec":
206
278
  tracer.exit_routine()
207
279
  sys.addaudithook(audit_hook) # type: ignore
208
- os.register_at_fork(after_in_child=lambda: tracer.label_file_to_write()) # type: ignore
280
+
281
+ def callback():
282
+ if "--patch_only" in args:
283
+ # We use --patch_only for forkserver process so we need to
284
+ # turn on tracer in the forked child process and register
285
+ # for exit routine
286
+ tracer.register_exit()
287
+ tracer.start()
288
+ else:
289
+ # otherwise just make sure to label the file because it's a
290
+ # new process
291
+ tracer.label_file_to_write()
292
+ os.register_at_fork(after_in_child=callback) # type: ignore
293
+
209
294
  if tracer.log_audit is not None:
210
295
  audit_regex_list = [re.compile(regex) for regex in tracer.log_audit]
211
296
 
Binary file
viztracer/util.py CHANGED
@@ -187,3 +187,11 @@ def pid_exists(pid):
187
187
  raise
188
188
  else:
189
189
  return True
190
+
191
+
192
+ def frame_stack_has_func(frame, funcs):
193
+ while frame:
194
+ if any(frame.f_code == func.__code__ for func in funcs):
195
+ return True
196
+ frame = frame.f_back
197
+ return False
Binary file
viztracer/viztracer.py CHANGED
@@ -14,6 +14,7 @@ from viztracer.snaptrace import Tracer
14
14
 
15
15
  from . import __version__
16
16
  from .report_builder import ReportBuilder
17
+ from .util import frame_stack_has_func
17
18
  from .vizevent import VizEvent
18
19
  from .vizplugin import VizPluginBase, VizPluginManager
19
20
 
@@ -365,13 +366,10 @@ class VizTracer(Tracer):
365
366
  def term_handler(sig, frame):
366
367
  # For multiprocessing.pool, it's possible we receive SIGTERM
367
368
  # in util._exit_function(), but before tracer.exit_routine()
368
- # executes. In this case, sys.exit() or util._exit_function()
369
- # won't trigger trace collection. We have to explicitly run
370
- # exit_routine()
371
- # Notice that exit_rountine() won't be executed multiple times
372
- # as it was protected my self._exiting
373
- self.exit_routine()
374
- sys.exit(0)
369
+ # executes. In this case, we can just let the exit finish
370
+ if not frame_stack_has_func(frame, (self.exit_routine,
371
+ multiprocessing.util._exit_function)):
372
+ sys.exit(0)
375
373
 
376
374
  self.label_file_to_write()
377
375
 
@@ -381,8 +379,6 @@ class VizTracer(Tracer):
381
379
  Finalize(self, self.exit_routine, exitpriority=-1)
382
380
 
383
381
  def exit_routine(self) -> None:
384
- # We need to avoid SIGTERM terminate our process when we dump data
385
- signal.signal(signal.SIGTERM, lambda sig, frame: 0)
386
382
  self.stop(stop_option="flush_as_finish")
387
383
  if not self._exiting:
388
384
  self._exiting = True
@@ -175,9 +175,48 @@
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- ======================================================================
178
+ APPENDIX: How to apply the Apache License to your work.
179
179
 
180
- VizTracer uses source code or generated code from following components:
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
181
188
 
182
- perfetto - https://github.com/google/perfetto (Apache License V2)
183
- - /src/web_dist/*
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
202
+
203
+
204
+ ========================================================================
205
+
206
+ VizTracer Subcomponents:
207
+
208
+ VizTracer contains subcomponents with separate copyright notices and
209
+ license terms. Your use of the source code for these subcomponents is
210
+ also subject to the terms and conditions of the following licenses.
211
+
212
+ BSD-3-Clause (src/viztracer/html/LICENSE):
213
+
214
+ src/viztracer/html/trace_viewer_*.html
215
+
216
+ Apache License V2 (src/viztracer/web_dist/LICENSE):
217
+
218
+ src/viztracer/web_dist/*
219
+
220
+ Eclipse Public License v1.0 (src/viztracer/attach_process/LICENSE)
221
+
222
+ src/viztracer/attach_process/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: viztracer
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: A debugging and profiling tool that can trace and visualize python code execution
5
5
  Author-email: Tian Gao <gaogaotiantian@hotmail.com>
6
6
  License: Apache License
@@ -180,16 +180,55 @@ License: Apache License
180
180
 
181
181
  END OF TERMS AND CONDITIONS
182
182
 
183
- ======================================================================
183
+ APPENDIX: How to apply the Apache License to your work.
184
184
 
185
- VizTracer uses source code or generated code from following components:
185
+ To apply the Apache License to your work, attach the following
186
+ boilerplate notice, with the fields enclosed by brackets "[]"
187
+ replaced with your own identifying information. (Don't include
188
+ the brackets!) The text should be enclosed in the appropriate
189
+ comment syntax for the file format. We also recommend that a
190
+ file or class name and description of purpose be included on the
191
+ same "printed page" as the copyright notice for easier
192
+ identification within third-party archives.
186
193
 
187
- perfetto - https://github.com/google/perfetto (Apache License V2)
188
- - /src/web_dist/*
194
+ Copyright [yyyy] [name of copyright owner]
195
+
196
+ Licensed under the Apache License, Version 2.0 (the "License");
197
+ you may not use this file except in compliance with the License.
198
+ You may obtain a copy of the License at
199
+
200
+ http://www.apache.org/licenses/LICENSE-2.0
201
+
202
+ Unless required by applicable law or agreed to in writing, software
203
+ distributed under the License is distributed on an "AS IS" BASIS,
204
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
205
+ See the License for the specific language governing permissions and
206
+ limitations under the License.
207
+
208
+
209
+ ========================================================================
210
+
211
+ VizTracer Subcomponents:
212
+
213
+ VizTracer contains subcomponents with separate copyright notices and
214
+ license terms. Your use of the source code for these subcomponents is
215
+ also subject to the terms and conditions of the following licenses.
216
+
217
+ BSD-3-Clause (src/viztracer/html/LICENSE):
218
+
219
+ src/viztracer/html/trace_viewer_*.html
220
+
221
+ Apache License V2 (src/viztracer/web_dist/LICENSE):
222
+
223
+ src/viztracer/web_dist/*
224
+
225
+ Eclipse Public License v1.0 (src/viztracer/attach_process/LICENSE)
226
+
227
+ src/viztracer/attach_process/*
189
228
 
190
229
  Project-URL: Homepage, https://github.com/gaogaotiantian/viztracer
191
230
  Project-URL: Documentation, https://viztracer.readthedocs.io
192
- Classifier: Development Status :: 4 - Beta
231
+ Classifier: Development Status :: 5 - Production/Stable
193
232
  Classifier: Programming Language :: Python :: 3.9
194
233
  Classifier: Programming Language :: Python :: 3.10
195
234
  Classifier: Programming Language :: Python :: 3.11
@@ -1,4 +1,5 @@
1
- Copyright 2020-2023 Tian Gao
1
+ VizTracer
2
+ Copyright 2020-2025 Tian Gao
2
3
 
3
4
  Licensed under the Apache License, Version 2.0 (the "License");
4
5
  you may not use this file except in compliance with the License.
@@ -11,3 +12,16 @@ distributed under the License is distributed on an "AS IS" BASIS,
11
12
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
13
  See the License for the specific language governing permissions and
13
14
  limitations under the License.
15
+
16
+ This project contains code from the following projects:
17
+
18
+ Catapult (https://github.com/catapult-project/catapult)
19
+ Copyright (c) 2012 The Chromium Authors. All rights reserved.
20
+ - src/viztracer/html/trace_viewer_*.html
21
+
22
+ Perfetto (https://github.com/google/perfetto)
23
+ Copyright (c) 2017, The Android Open Source Project
24
+ - src/viztracer/web_dist/*
25
+
26
+ PyDev.Debugger (https://github.com/fabioz/PyDev.Debugger)
27
+ - src/viztracer/attach_process/*
@@ -1,15 +1,15 @@
1
1
  viztracer/report_builder.py,sha256=hAwlUyk8T9VJsTSB_58AKaxGJY_RR_TyVjrDOKSbFGM,13340
2
- viztracer/patch.py,sha256=NGUtM4fFCx1_pPggVYT3qmeav8JBGVtWZWTWHq8tDvs,8606
3
- viztracer/vcompressor.cpython-311-darwin.so,sha256=HWT-CxSRptuYUT9PECBOP_-El6XdSs1h5KNNSJtSanQ,74352
2
+ viztracer/patch.py,sha256=mpXRzCReu6oJ2ljLMhWQGaWc4LYcYYVlEqXjD4z1CSs,12063
3
+ viztracer/vcompressor.cpython-311-darwin.so,sha256=1RbZx7k1xrH1N_TJI2vmy8teZY9NTxhgC5Bl46dplUY,74352
4
4
  viztracer/viewer.py,sha256=OwQbWdXFr3Aj6yCwVZqSHwsSKthef084WHxuho1bHBo,19704
5
5
  viztracer/vizevent.py,sha256=5fKdUp1RDx5SescpffDNvDaV2SaF8H1WgNuvk2ybujY,971
6
6
  viztracer/vizplugin.py,sha256=TZQIhEM95Vsp4D_qa_D6E1K1eFC9onNVeXc7Q5n0rIs,5368
7
- viztracer/util.py,sha256=KUjyC5m5Jx4Wy6qd_wERZVrZHkTbkt6U77Pjus8mr5o,5937
8
- viztracer/decorator.py,sha256=jaw5sa8oeE2N1xwTVLxSIr0FKe3P4CNn7Tjutw9sld4,5876
7
+ viztracer/util.py,sha256=-PJ2T0berFlH6LiIM1HinNQaeK74IBCyy67xP5yTwrw,6131
8
+ viztracer/decorator.py,sha256=0mys7egG9UF4Zm9p5vnDla9Zmoi3CVMRmxdSt2DigdU,5925
9
9
  viztracer/snaptrace.pyi,sha256=Rwe712Vs99btG_R1cbrgrlW3ocnYxXOpVIJFk_e4Rlg,1849
10
10
  viztracer/attach.py,sha256=VsEE3G_mpqMkiGwWiV0kNPe7VMlG_cjiOr8opDRiUAI,1991
11
- viztracer/viztracer.py,sha256=zyqvf-ej-Wk4inLw456vHYL2jPQYgaBJMImJst6vJ6c,18120
12
- viztracer/__init__.py,sha256=9j7WCu95nVodMoeZBxGLZYstShbBUB9ml2RuECZnuUg,507
11
+ viztracer/viztracer.py,sha256=o9a8BBJ0igDbtPwys43BhsH758PnsXvPcY-VdP7g0Sc,17919
12
+ viztracer/__init__.py,sha256=6svIXaPYENvexhitVH0g63EO6rRdAUATYoSpOhKvF8Y,507
13
13
  viztracer/vizcounter.py,sha256=aqTTg0FxYE82fn__TXF_Mk3nU9Sbn5N3P1AdlSwV7bg,793
14
14
  viztracer/functree.py,sha256=304Ctmg7kkmvDkYzH3gL7TkIT2Wbcwq-UYMkRAyJKgc,5216
15
15
  viztracer/vizlogging.py,sha256=vVBeFpYzGnbd0mOMroJfDGqVjQy4VjWId3v_O4RLj1M,699
@@ -17,8 +17,8 @@ viztracer/vizobject.py,sha256=vBoPBIzCIYb6yCrLTzsSdPNAtN3fprD1Yd7a36Tlccs,1240
17
17
  viztracer/vcompressor.pyi,sha256=6F6W8rREivfR1G4WI20xd50mSoayX9DkEf2Wi43-k-A,320
18
18
  viztracer/cellmagic.py,sha256=SLibORC1-Rjk2a66IIMMuV-Q6Rotg-4FaawzGH0oWIM,3365
19
19
  viztracer/event_base.py,sha256=Br52zdV3-e0r9jyQ-3dkC-OpNxi9oozLr6YqeYkD3cw,3143
20
- viztracer/main.py,sha256=GrTDkn-dGkDvSLT-TRWjqzI68nrBwuBGFaCd2I0l3lU,31605
21
- viztracer/snaptrace.cpython-311-darwin.so,sha256=h4RN2IQFa1YB6FJAtYfOJWCHNcGBLz4ugpoXwP6UbXg,103056
20
+ viztracer/main.py,sha256=OgWfWoQ-Pbc_Kr5k7wwDZ-njL7-Isx4CPK8pRddtVw8,32144
21
+ viztracer/snaptrace.cpython-311-darwin.so,sha256=yidRYy-mtgC9E7geXoXGsP0JF2QyXmEtNAUxiTqH7Z8,103056
22
22
  viztracer/__main__.py,sha256=-hhsTtiwE9cbgOj7DJGOaTJC8URmcRdicHRMSp4SnPo,226
23
23
  viztracer/code_monkey.py,sha256=YpcaKrAnJ7tXlTjEDk5tAWXVAIzaQ8XGGxa2ESOodwo,15443
24
24
  viztracer/web_dist/index.html,sha256=bJWluu5gzsUU-qHju6FZhXvkv4cVewgnE1mIEBXQHsY,5790
@@ -100,10 +100,10 @@ viztracer/modules/vcompressor/vcompressor.h,sha256=ZV6Z1N_C8gsmXH7J6vIZm6EXcsrwd
100
100
  viztracer/modules/vcompressor/vc_dump.c,sha256=FZ2iHUN3QC2wqpzYxsB_SK-PiQewEe4ghkdwV1f-cn8,40059
101
101
  viztracer/modules/vcompressor/vcompressor.c,sha256=vtEoi4wKebA_We0ry3UfTzhW_3xwK9Dp4g6UaDtpioQ,12651
102
102
  viztracer/modules/vcompressor/vc_dump.h,sha256=gxFuI3Pm3DPXHvO00XF5QJ8AT9PeAtHo7ojwUgvO8Lk,1421
103
- viztracer-1.0.2.dist-info/RECORD,,
104
- viztracer-1.0.2.dist-info/LICENSE,sha256=erV3GrfDUau3mXH0L7Y62Tl52Cbh6nbpAdBUoaa4fZQ,10421
105
- viztracer-1.0.2.dist-info/WHEEL,sha256=NW1RskY9zow1Y68W-gXg0oZyBRAugI1JHywIzAIai5o,109
106
- viztracer-1.0.2.dist-info/entry_points.txt,sha256=-MeyWMzg_Ci74E8Y3dr_pjzZlYWq3nQYTA41OQcrZ48,91
107
- viztracer-1.0.2.dist-info/NOTICE.txt,sha256=p00VH2K3inbdZII0ZVLUNGGsm6vVdTq8DgEK6t4uwKg,554
108
- viztracer-1.0.2.dist-info/top_level.txt,sha256=xph8Zo9F28dycmRhR2cr64PLrKzc_ulOQ_lzqT3Di28,10
109
- viztracer-1.0.2.dist-info/METADATA,sha256=ved-HOddhRxWemixQag3mTY6k9g5KmUo4gLyVsYydfw,24866
103
+ viztracer-1.0.3.dist-info/RECORD,,
104
+ viztracer-1.0.3.dist-info/LICENSE,sha256=pvJg_eSaSgdfGDmIDrCrtrz-nU5svUG8y1u1AafTWt8,11935
105
+ viztracer-1.0.3.dist-info/WHEEL,sha256=f5gbEoUZ2GcZAHmn8EFjfKvu4vAWkcOI6mx8EhipFn4,136
106
+ viztracer-1.0.3.dist-info/entry_points.txt,sha256=-MeyWMzg_Ci74E8Y3dr_pjzZlYWq3nQYTA41OQcrZ48,91
107
+ viztracer-1.0.3.dist-info/NOTICE.txt,sha256=0TrouYbPH7Zwnrq2k2H6PfRyQJWO4aUew3685aqraZQ,1031
108
+ viztracer-1.0.3.dist-info/top_level.txt,sha256=xph8Zo9F28dycmRhR2cr64PLrKzc_ulOQ_lzqT3Di28,10
109
+ viztracer-1.0.3.dist-info/METADATA,sha256=O-nKgHR1IBFEW5gnasfSv9a6HHl_LKg_0h0XXw_IjhY,26705
@@ -1,5 +1,6 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-macosx_11_0_arm64
5
+ Generator: delocate 0.13.0
5
6