Skip to main content

wolfram-pty

A lightweight Python bridge to the Wolfram Engine for restricted environments – zero scientific dependencies, 800+ mapped functions.

https://img.shields.io/pypi/v/wolfram-pty https://img.shields.io/badge/License-MIT-yellow.svg


🎯 What is it?

wolfram-pty lets you call the full power of Wolfram Language directly from Python – perfect for constrained environments like Termux, Docker containers, Raspberry Pi, CI/CD pipelines where installing heavy scientific libraries (numpy, pandas, etc.) is impractical.

· Zero scientific dependencies – all heavy lifting is done by the Wolfram Engine; Python only needs the standard library. · Persistent kernel session – a single kernel instance keeps state across calls. · File‑based output – results are saved as JSON/PNG/TXT and read back with Python’s built‑in modules. · Automatic caching – identical expressions return cached results instantly. · Metadata‑driven compatibility layer – already maps 835+ functions from NumPy, SciPy, pandas, PyTorch, TensorFlow, SymPy, scikit‑learn, Matplotlib and more. · Resilient – automatic kernel restart on failure, serialised request queue, no activation race conditions.


✨ Features

· 🔥 Zero scientific libraries – no numpy, no pandas, just plain Python. · 🚀 Persistent kernel – start once, evaluate many times with full state retention. · 📦 File output mode – reliable, parse‑free communication via files. · 🧠 Smart cache – reuse results for identical expressions. · 🧩 Drop‑in replacements – use familiar NumPy/SciPy syntax, powered by Wolfram. · 🛠️ Auto‑recovery – kernel crashes? It restarts automatically. · 🔌 Easy configuration – set two environment variables and you’re ready.


🚀 Quick Start

Installation

pip install wolfram-pty

⚠️ Note: This package does not include the Wolfram Engine. You must obtain a valid licence from Wolfram Research and install it yourself.

Set up the kernel path

Tell wolfram-pty where your Wolfram kernel is:

export WOLFRAM_EXEC=/path/to/your/wolfram-kernel   # e.g. /usr/local/bin/math
export WOLFRAM_PWFILE=~/.Wolfram/Licensing/mathpass   # optional, password file

Basic usage

from wolfram_pty import WolframKernel

k = WolframKernel()          # singleton kernel, starts only once

# Evaluate an expression, get a string back
print(k.evaluate("2+2"))     # "4"

# Batch evaluation
results = k.batch_evaluate(["Range[5]", "Pi", "Det[{{1,2},{3,4}}]"])
print(results)               # ["{1,2,3,4,5}", "Pi", "-2"]

# Use the familiar NumPy interface (powered by Wolfram)
from wolfram_pty.compat import numpy as np
a = np.array([1,2,3])        # bypasses kernel – pure Python list
b = np.fft.fft(a)            # actually calls Wolfram's Fourier
print(b)                     # complex array (read from a JSON file)

📁 File Output Mode (Core Mechanism)

All results are written to files and read back with standard Python – no parsing hassle, no dependencies.

# Save result as a JSON file
file_path = k.evaluate_to_file("Range[5]", fmt="json")
print(file_path)             # /sdcard/wolfram_out/xxx.json

# Read it with the built‑in json module
import json
with open(file_path) as f:
    data = json.load(f)      # [1,2,3,4,5]

# Generate a plot and save as PNG
img_path = k.evaluate_to_file("Plot[Sin[x], {x,0,2Pi}]", fmt="png")

🧠 Automatic Caching

The second time you ask for the same expression, the result is returned instantly from the cache.

# First call – kernel runs
path1 = k.evaluate_to_file("Range[10000]")

# Second call – cache hit, almost instantaneous
path2 = k.evaluate_to_file("Range[10000]")

# Force recompute (e.g. for random numbers)
path3 = k.evaluate_to_file("RandomReal[1,1000]", no_cache=True)

# Clean cache files older than 7 days
k.clear_cache(older_than_days=7)

📚 Supported Libraries (835+ functions)

The wolfram_pty.compat submodule provides drop‑in replacements for popular scientific Python libraries – everything is translated to Wolfram calls.

Library Functions Example NumPy 200+ np.array, np.fft.fft, np.linalg.solve SciPy 143 scipy.integrate.quad, scipy.optimize.minimize pandas 125 pd.DataFrame, df.groupby, pd.read_csv PyTorch 66 torch.tensor, torch.add, torch.nn.ReLU TensorFlow 55 tf.constant, tf.matmul, tf.nn.softmax SymPy 71 sympy.symbols, sympy.diff, sympy.solve scikit‑learn 60 sklearn.preprocessing.StandardScaler, sklearn.cluster.KMeans Matplotlib 47 plt.plot, plt.imshow, seaborn Performance 50+ tqdm, logging, time, psutil

How to use them:

from wolfram_pty.compat import numpy as np
from wolfram_pty.compat import scipy
from wolfram_pty.compat import pandas as pd
# … and so on

⚙️ Configuration

All settings are controlled via environment variables:

Variable Default Description WOLFRAM_EXEC /root/.../math Path to the Wolfram kernel executable WOLFRAM_PWFILE ~/.Wolfram/Licensing/mathpass Path to the password file (optional) WOLFRAM_CACHE_DIR /sdcard/wolfram_cache Directory for cached results WOLFRAM_OUT_DIR /sdcard/wolfram_out Default output directory for files


⚠️ Important Legal Notice

This software only provides a communication interface to the Wolfram Engine and does not include, bundle, or distribute the Wolfram Engine itself. Users must obtain a valid licence directly from Wolfram Research and comply with their terms. The developers of wolfram-pty assume no liability for any unauthorised use of the Wolfram Engine.


📄 License

MIT License © 2025 TurinFohlen


🤝 Contributing

Issues and pull requests are welcome! If you’d like to add mappings for more functions, create a YAML file in mappings/ and make sure tests pass.


Happy computing – even in the most constrained environments!

Metadata

Release files for wolfram-pty 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wolfram-pty 0.1.0
File Size Uploaded
wolfram_pty-0.1.0.tar.gz 95.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wolfram-pty 0.1.0
File Interpreter ABI Platform
wolfram_pty-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 191.1 kB

Release files / wolfram_pty-0.1.0.tar.gz

Download URL wolfram_pty-0.1.0.tar.gz
Size 95.6 kB
Tags Source
SHA-256 checksum
How to use checksums
41a4a0c9afe2186a16b4ac57f0ab5f1c368b24fad4ab1b8091c2e36b423c8fa6
BLAKE2b-256 checksum
How to use checksums
379825069926d80f0fa1c68dca6b75ce40d5316335412070403e4c9cf5f5bf07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / wolfram_pty-0.1.0-py3-none-any.whl

Download URL wolfram_pty-0.1.0-py3-none-any.whl
Size 95.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aa91b727fcdd5da04c43a78e92c0a040e7d97856d032d5e871cb3c3769ce05e8
BLAKE2b-256 checksum
How to use checksums
12a0e49e16433d3e8c9ca5b7d00de38a3515c7741546558497a2c2c635d1fc12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page