Skip to main content

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

LLM assist example (examples/14_llm_assist2.py) 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, d by 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geometrix-0.1.11.tar.gz (28.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geometrix-0.1.11-py3-none-any.whl (3.6 kB view details)

Uploaded Python 3

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

Hashes for geometrix-0.1.11.tar.gz
Algorithm Hash digest
SHA256 911d2ed22417b1f98a626c99f42f3cc9c9edaad71e8b45a3194922510379212a
MD5 2f48609cf95d15aba698ba11cc19237d
BLAKE2b-256 b3d5dff35722dbc5d24fb33e8d0020484475772277324469f8cb44039f7b8403

See more details on using hashes here.

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

Hashes for geometrix-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 1b4ffe2a14be682b824b3678fe40883696501f5e41e8f53949090b75de0645ee
MD5 a7d73d81fe22e56d0e1881df429ca267
BLAKE2b-256 fc4a37a3feed18f1d3b448c12142518332143588da84b98646e7d68a9ecc5350

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page