Quickstart¶
This page shows the most common usage patterns. All examples run in under a minute on CPU.
Solve 1D Poisson with CorePIELM¶
import math
import numpy as np
from pypielm.data.dataset import PIELMDataset
from pypielm.models import CorePIELM
from pypielm.core.solver import WeightedLinearSystem
# --- Problem: -u''(x) = π² sin(πx), u(0) = u(1) = 0 ---
N = 200 # collocation points
X_c = np.random.default_rng(42).uniform(0, 1, (N, 1))
X_bc = np.array([[0.0], [1.0]])
y_bc = np.array([[0.0], [0.0]])
ds = PIELMDataset.from_arrays(X_c, X_bc=X_bc, y_bc=y_bc)
def poisson_op(fm, X):
import torch, math
H_xx = fm.d2(X, 0)
rhs = (math.pi**2) * torch.sin(math.pi * X)
return WeightedLinearSystem(H_xx, -rhs, weight=1.0)
model = CorePIELM(hidden_dim=300, seed=42)
model.fit(ds, pde_operator=poisson_op)
# Evaluate on a dense grid
import torch
X_test = torch.linspace(0, 1, 300).unsqueeze(1).double()
u_pred = model.predict(X_test)
u_exact = torch.sin(math.pi * X_test)
rel_l2 = ((u_pred - u_exact).norm() / u_exact.norm()).item()
print(f"Relative L² error: {rel_l2:.2e}") # typically < 1e-3
Load Data from File¶
from pypielm.data import auto_load
# PINNacle .dat file
ds = auto_load("data/poisson_classic.dat", source="pinnacle")
# CSV file with columns x, u
ds = auto_load("data/measurements.csv", feature_cols=["x"], target_col="u")
# NumPy archive
ds = auto_load("data/solution.npz")
Run an Experiment from YAML¶
Save the following as experiment.yaml:
model: core_pielm
model_kwargs:
hidden_dim: 300
ridge_lambda: 1.0e-8
data:
n_samples: 200
seed: 42
device: cpu
output_dir: runs/quickstart/
Then run:
python -m pypielm run --config experiment.yaml
This writes runs/quickstart/model.pt and runs/quickstart/results.json.
List Available Models¶
python -m pypielm list-models
Export to ONNX¶
python -m pypielm export --model runs/quickstart/model.pt --format onnx
Sweep Multiple Configs in Parallel¶
# sweep.yaml
sweep:
- model: vanilla_pielm
model_kwargs: {hidden_dim: 100}
data: {n_samples: 200}
seed: 42
device: cpu
output_dir: runs/sweep/v100/
- model: core_pielm
model_kwargs: {hidden_dim: 300}
data: {n_samples: 200}
seed: 42
device: cpu
output_dir: runs/sweep/c300/
python -m pypielm sweep --config sweep.yaml --parallel 2