Skip to main content

formula2code

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

インストールへ移動

ソース情報

リポジトリ
orange4664/research-skills
ソースの最終更新活動
2026年3月31日 06:15
検出された SKILL.md の言語
英語
スター
41
フォーク
1

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
13 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
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
GitHubで見る