LaTeX-first differential geometry renderer for Jupyter/Colab.
Project description
Geometrix
LLM-assisted LaTeX-first differential geometry renderer for Jupyter/Colab. Ask for symbolic solutions (with full derivations), then graph them immediately.
Flagship: LLM → Graph
From
examples/14_llm_assist2.py.
import sympy as sp
from google.colab import userdata
from geometrix import llm_solve, latex, show
from geometrix.api import SceneBundle
from geometrix.sample.domains import Domain
from geometrix.sample.surface import sample_surface_grid
from geometrix.scene.build import build_surface_scene
from geometrix.symbolic.compile import compile_vector
from geometrix.symbolic.llm import LLMConfig
config = LLMConfig(
provider="gemini",
model="gemini-3-flash-preview",
api_key=userdata.get("GEMINI_API_KEY"),
)
live = llm_solve(
"x^2 + y^2 + z^2 = 1",
config=config,
response_type="full",
wants_graph=True,
graph_dim=3,
)
graph_latex = live.data.graph # e.g., "z = \\sqrt{1-x^2-y^2}"
_, rhs = graph_latex.split("=", 1)
x, y = sp.symbols("x y")
z_expr = latex(rhs.strip())
domains = [Domain("x", -1.0, 1.0), Domain("y", -1.0, 1.0)]
compiled = compile_vector([x, y, z_expr], [x, y])
surface = sample_surface_grid(compiled, domains, [80, 80])
scene = build_surface_scene(surface.positions, surface.grid_shape)
show(SceneBundle(scene=scene, arrays={"positions": surface.positions}))
LaTeX-first differential geometry renderer for Jupyter/Colab. Write math in LaTeX, sample it numerically, and render with an interactive Three.js viewer.
Install
pip install geometrix
Quickstart (Notebook)
from geometrix import geom
scene = geom("""
coords: u v
X(u,v) = (u, v, 0)
render: surface X domain u:[0,1] v:[0,1] res 30 30
""")
scene.show()
LaTeX-First Workflow
import sympy as sp
from geometrix import latex, show
from geometrix.api import SceneBundle
from geometrix.sample.domains import Domain
from geometrix.sample.surface import sample_surface_grid
from geometrix.scene.build import build_surface_scene
from geometrix.symbolic.compile import compile_vector
u, v = sp.symbols("u v")
x = latex("u", show_latex_expr=True)
y = latex("v", show_latex_expr=True)
z = latex("\\sin(u)\\cos(v)", show_latex_expr=True)
compiled = compile_vector([x, y, z], [u, v])
surface = sample_surface_grid(
compiled,
[Domain("u", -sp.pi.evalf(), sp.pi.evalf()), Domain("v", -sp.pi.evalf(), sp.pi.evalf())],
[60, 60],
)
scene = build_surface_scene(surface.positions, surface.grid_shape)
show(SceneBundle(scene=scene, arrays={"positions": surface.positions}))
Viewer Controls
- Toggle axes, grid, gizmo, legend, and light mode.
- Drag gizmo arrow tips to move the locator; coordinates update in the panel.
- Grid planes and tick labels adapt to the data range.
Input Types
- LaTeX expressions via
latex()(math-first workflow). - DSL blocks via
geom(...)for quick parametric surfaces. - Python arrays for points/lines/meshes (via
points(),line(),mesh()).
Symbolic Utilities
import sympy as sp
from geometrix import canonicalize, simplify, solve
x = sp.symbols("x")
expr = (x**2 - 1) / (x - 1)
print(canonicalize(expr))
print(simplify(expr, mode="factor"))
print(solve([x**2 - 1], [x], dict=True))
Coordinate Helpers
import numpy as np
from geometrix import cylindrical_to_cartesian, spherical_to_cartesian, lorentz_metric
r, theta, z = np.array([1.0]), np.array([0.5]), np.array([0.0])
xyz = cylindrical_to_cartesian(r, theta, z)
metric = lorentz_metric()
Notes
- LaTeX parsing uses a safe allowlist of commands; unknown commands are rejected.
- Indices use the symbols
i, j, k, l, m, n, a, b, c, dby default. - The HTML renderer loads Three.js from a CDN (no widget install needed).
Examples
See examples/ for points, lines, surfaces, DSL, and LaTeX demos.
Project details
Release history Release notifications | RSS feed
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 geometrix-0.1.11.tar.gz.
File metadata
- Download URL: geometrix-0.1.11.tar.gz
- Upload date:
- Size: 28.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
911d2ed22417b1f98a626c99f42f3cc9c9edaad71e8b45a3194922510379212a
|
|
| MD5 |
2f48609cf95d15aba698ba11cc19237d
|
|
| BLAKE2b-256 |
b3d5dff35722dbc5d24fb33e8d0020484475772277324469f8cb44039f7b8403
|
File details
Details for the file geometrix-0.1.11-py3-none-any.whl.
File metadata
- Download URL: geometrix-0.1.11-py3-none-any.whl
- Upload date:
- Size: 3.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b4ffe2a14be682b824b3678fe40883696501f5e41e8f53949090b75de0645ee
|
|
| MD5 |
a7d73d81fe22e56d0e1881df429ca267
|
|
| BLAKE2b-256 |
fc4a37a3feed18f1d3b448c12142518332143588da84b98646e7d68a9ecc5350
|