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에서 보기