Skip to main content

formula2code

Convert LaTeX math formulas from papers into executable PyTorch/NumPy code.

Jump to install

Source facts

Repository
orange4664/research-skills
Last source activity
March 31, 2026 at 06:15
Detected SKILL.md language
English
Stars
41
Forks
1

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
13 files

Showing SKILL.md

SKILL.md
Source instructions ยท Read-only preview
name
formula2code
description
Convert LaTeX math formulas from papers into executable PyTorch/NumPy code.
# Formula2Code Skill ## Purpose Convert mathematical equations from research papers into runnable code. This skill bridges the gap between **paper reading** (LaTeX formulas) and **implementation** (PyTorch/NumPy). ## When to Use - Paper has mathematical formulas that need to be implemented - User asks to "convert this equation to code" or "implement this loss function" - During `code-writer` workflow: auto-convert extracted formulas into `loss.py` / `model.py` - Verifying that a manual implementation matches the paper's formula ## Architecture (3-Layer Pipeline) ``` LaTeX input โ”‚ โ–ผ Layer 1: ML Pattern Matcher โ”€โ”€โ”€ Known formula? โ”€โ”€โ†’ Direct PyTorch API mapping โ”‚ (no match) (softmax, cross_entropy, etc.) โ–ผ Layer 2: latex2sympy2 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Parse to SymPy symbolic expression โ”‚ โ–ผ Layer 3: Code Generator โ”€โ”€โ”€โ”€โ”€โ”€โ”€ sympytorch (nn.Module) / lambdify / pycode โ”‚ โ–ผ Layer 4: Validator โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Cross-check SymPy vs NumPy vs PyTorch ``` ## Quick Start ### Single Formula ```bash python formula2code/convert.py "\frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2" --to pytorch -v ``` ### From Paper JSON (paper-parser output) ```bash python formula2code/convert.py --from-paper workspace/<paper>/paper_content.json --to pytorch -o formulas.json ``` ### List Known Patterns ```bash python formula2code/convert.py --list-patterns ``` ## Built-in ML Pattern Library (16 patterns) | Category | Patterns | |----------|----------| | **Loss** | MSE, Cross Entropy, Binary CE, KL Divergence, L1, Huber | | **Activation** | Softmax, Sigmoid, ReLU, GELU, Tanh | | **Attention** | Scaled Dot-Product Attention | | **Normalization** | Layer Norm, Batch Norm | | **Distribution** | Gaussian/Normal | When a LaTeX formula matches a known pattern, the skill returns the exact PyTorch API call instead of generating code from scratch. This is more reliable for standard operations. ## Output Format For each formula, the converter outputs: ```json { "input_latex": "\\frac{1}{N}\\sum...", "method": "pattern_match | sympy_pipeline | failed", "outputs": { "pytorch_functional": "F.mse_loss(predictions, targets)", "pytorch_class": "nn.MSELoss()", "pytorch_code": "import torch\ndef formula(N, y, y_hat): ...", "numpy_code": "import numpy as np\ndef formula(N, y, y_hat): ...", "python_code": "import math\ndef formula(N, y, y_hat): ..." }, "validation": {"passed": true, "summary": "5/5 tests passed"} } ``` ## Integration with Other Skills ### With paper-parser ``` paper-parser outputs JSON with LaTeX formulas โ†’ formula2code reads them and generates code ``` ### With code-writer ``` code-writer extracts equations from paper โ†’ calls formula2code to generate loss.py / model.py components โ†’ inserts generated code into project scaffolding ``` ## Examples See `formula2code/examples/` for runnable demos: | Example | What it Shows | |---------|---------------| | `01_basic_usage.py` | 3-layer pipeline: pattern match โ†’ SymPy โ†’ code generation | | `02_official_library_usage.py` | Direct usage of latex2sympy2, sympytorch, lambdify | | `03_trainable_formula.py` | Learn formula coefficients via gradient descent | ### Quick Example: Pattern Match ```python from converters.ml_patterns import match_ml_pattern result = match_ml_pattern(r"\text{softmax}(z)") # โ†’ {'name': 'softmax', 'pytorch_functional': 'F.softmax(x, dim=-1)', ...} ``` ### Quick Example: SymPy Pipeline ```python from converters.latex_parser import parse_latex from converters.to_python import sympy_to_python_code expr, meta = parse_latex(r"x^2 + 2x + 1") code = sympy_to_python_code(expr) # โ†’ "def formula(x):\n return x**2 + 2*x + 1" ``` ### Quick Example: sympytorch (from official README) ```python import sympy, torch, sympytorch x = sympy.symbols('x_name') cosx = 1.0 * sympy.cos(x) sinx = 2.0 * sympy.sin(x) mod = sympytorch.SymPyModule(expressions=[cosx, sinx]) x_ = torch.rand(3) out = mod(x_name=x_) # shape (3, 2) # Floats (1.0, 2.0) become trainable nn.Parameters! ``` ### Quick Example: latex2sympy2 (from official README) ```python from latex2sympy2_extended import latex2sympy latex2sympy(r"\frac{d}{dx}(x^{2}+x)") # โ†’ Derivative(x**2 + x, x) latex2sympy(r"\sum_{i = 1}^{n} i") # โ†’ Sum(i, (i, 1, n)) latex2sympy(r"\int_{a}^{b} \frac{dt}{t}") # โ†’ Integral(1/t, (t, a, b)) ``` ## Dependencies ```bash pip install -r formula2code/requirements.txt # Core: sympy # LaTeX parsing: latex2sympy2_extended[antlr4_13_2] # PyTorch modules: sympytorch ``` ## Troubleshooting & Where to Get Help When encountering issues, the agent should **fetch** the relevant docs: ### LaTeX Parsing Errors **Problem**: `latex2sympy` fails to parse a formula. **Solution**: 1. Check supported syntax at the official repo 2. Preprocess the LaTeX (our `latex_parser.py` handles common ML notation like `\text{}`, `\hat{}`) 3. For very complex notation, manually simplify to standard LaTeX ``` # Fetch latest docs/issues: fetch_url("https://github.com/huggingface/latex2sympy2_extended") fetch_url("https://github.com/huggingface/latex2sympy2_extended/issues") ``` ### sympytorch Unsupported Operation **Problem**: `sympytorch` throws `NotImplementedError` for a SymPy function. **Solution**: Use `extra_funcs` to provide a custom PyTorch implementation. ```python import sympy, sympytorch # Check supported operations: # https://github.com/patrick-kidger/sympytorch/blob/master/sympytorch/sympy_module.py#L12 mod = sympytorch.SymPyModule( expressions=[expr], extra_funcs={ sympy.Function('my_custom_op'): lambda x: x.clamp(min=0), } ) ``` ``` # Fetch supported ops list: fetch_url("https://github.com/patrick-kidger/sympytorch/blob/master/sympytorch/sympy_module.py") ``` ### lambdify Module Selection **Problem**: Need to generate code for a specific backend (torch/numpy/scipy). **Solution**: Use the `modules` parameter. ```python import sympy f = sympy.lambdify([x], expr, modules='torch') # โ†’ torch functions f = sympy.lambdify([x], expr, modules='numpy') # โ†’ numpy functions f = sympy.lambdify([x], expr, modules='scipy') # โ†’ scipy special ``` ``` # Fetch lambdify docs: fetch_url("https://docs.sympy.org/latest/modules/utilities/lambdify.html") ``` ## ๐Ÿ“š Reference URLs (for agent self-help) When stuck on any issue, the agent should fetch these URLs: | Topic | URL | |-------|-----| | **latex2sympy2 README + examples** | `https://github.com/huggingface/latex2sympy2_extended` | | **latex2sympy2 issues** | `https://github.com/huggingface/latex2sympy2_extended/issues` | | **latex2sympy2 grammar (PS.g4)** | `https://github.com/huggingface/latex2sympy2_extended/blob/master/src/latex2sympy2_extended/PS.g4` | | **sympytorch README** | `https://github.com/patrick-kidger/sympytorch` | | **sympytorch supported ops** | `https://github.com/patrick-kidger/sympytorch/blob/master/sympytorch/sympy_module.py` | | **sympytorch issues** | `https://github.com/patrick-kidger/sympytorch/issues` | | **SymPy lambdify docs** | `https://docs.sympy.org/latest/modules/utilities/lambdify.html` | | **SymPy pycode docs** | `https://docs.sympy.org/latest/modules/printing.html` | | **SymPy basic operations** | `https://docs.sympy.org/latest/tutorials/intro-tutorial/basic_operations.html` | ## Limitations - `latex2sympy2` cannot parse all LaTeX notations (very complex nested expressions may fail) - `sympytorch` only supports a subset of SymPy operations (extend via `extra_funcs`) - Pattern matching is regex-based โ€” unusual formatting of standard formulas may not match - For complex multi-line algorithm definitions, use `code-writer` instead
View on GitHub