No project description provided
Project description
maxray
the problem with doing weird metaprogramming shit is having to deal with other people's weird metaprogramming shit
Trace and modify the result of (almost) every single expression executed in a Python program in realtime, requiring zero changes to your source code. Very WIP.
[!NOTE] Will not work in a REPL -- save and run the code as a script or package.
from maxray import transform, xray, maxray
from torch import tensor, Tensor, device
def move_tensor(x, ctx):
if isinstance(x, Tensor) and x.device != device("cuda"):
return x.to("cuda")
return x
@transform(move_tensor)
def show_multiply(a, b):
print(a @ b)
# Source code is rewritten to be equivalent to:
def _show_multiply(a, b):
move_tensor(move_tensor(print, ...)(move_tensor(a, ...) @ move_tensor(b, ...)), ...)
# ---
show_multiply(
tensor([[0.0, 1.0], [1.0, 1.0]], device="cpu"),
tensor([[1.0], [1.0]], device="cuda"),
) # Without the decorator, you'd expect `RuntimeError: Expected all tensors to be on the same device`
# tensor([[1.],
# [2.]], device='cuda:0')
The ctx argument contains context information about the location of the original source code, which may be useful to build editor/LSP integrations.
The *xray decorators will recursively trace and patch every single callable they encounter until reaching either builtins, native, or generated code.
Usage
This package comes with 2 CLI commands (see --help for limited docs):
xpy: TUI for debugging and observability. Replacepython your_script.pywithxpy your_script.pyto apply transformations (via-Wargs) globally-Wtakesfile:symbol args...(be careful with shell quoting) generated bymaxray template <new_script.py>and hot-reloads it on every filesystem change. Can be used multiple times to compose transformations (applied sequentially)--restrictto only transform "your" (same source file or module) source code (i.e. does not descend into external packages). Significantly faster, more robust, and probably more useful - should probably be the default...-mis equivalent topython -m some_module
maxraytemplate: see--helpfor options
Examples
callgraph: draws the runtime function call graph- compared to tools relying on static analysis, can exactly resolve calls like
[fn_a, fn_b][rand() < 0.5]()
- compared to tools relying on static analysis, can exactly resolve calls like
pip install maxray[all]
xpy -W 'callgraph:Draw --labels' <your_script.py>
capture: dump all runtime captured information to an Arrow IPC file for analysisrerun: replace all uses ofprintwith logging to a Rerun viewer, attaching source file and line information for filteringtensorcheck: globalnanandinfchecking for tensorsstrings: grepping of runtime values to find and rewrite URLs and filesystem pathsprogress: tqdm, but like, everywhere. Automatically shows a progress bar and the last yielded value for everyfor _ in iterableexpected to take longer than 1s to complete...: Write your own! Argument to-Wcan be any source file or installed package/module
Issues
If running a script or module with xpy deterministically results in differing output or exceptions compared to when run with python (CPython >= 3.11), that's a bug. A stopgap solution is to restrict the offending modules to prevent them from being transformed.
[!TIP]
export MAXRAY_LOG_LEVEL=1to show internal logging
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maxray-0.7.0.tar.gz.
File metadata
- Download URL: maxray-0.7.0.tar.gz
- Upload date:
- Size: 41.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.10 Linux/6.8.0-1014-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e070ebf3fc1e1cd1231620f46d37420a5792ee4bf3eb1f5d659f837308af29ca
|
|
| MD5 |
3bf4355f3888a7f8925ba54fd62c92fc
|
|
| BLAKE2b-256 |
5155468421a939f951b11652217acebe0645a24c224a2beee5c69edee1935369
|
File details
Details for the file maxray-0.7.0-py3-none-any.whl.
File metadata
- Download URL: maxray-0.7.0-py3-none-any.whl
- Upload date:
- Size: 49.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.10 Linux/6.8.0-1014-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0b91fe7d1363fa4fc470d786d557db01f3f2091e4bcfff8ef6aba75f14fbedd
|
|
| MD5 |
83fb1b47cfce73601c1d5a86d16a08d6
|
|
| BLAKE2b-256 |
a6e0a4a5283b3d03212f90802fc8a386419927734df56cc8280424de8d991062
|