Skip to main content

formula2code

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

Zur Installation springen

Quellinformationen

Repository
orange4664/research-skills
Letzte Quellaktivität
31. März 2026 um 06:15
Erkannte Sprache von SKILL.md
Englisch
Sterne
41
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
13 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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
Auf GitHub ansehen