Skip to content

Instantly share code, notes, and snippets.

@muchanem
Created October 6, 2025 19:42
Show Gist options
  • Select an option

  • Save muchanem/1ba8a4563596f4557c5ae1b8062e8bcb to your computer and use it in GitHub Desktop.

Select an option

Save muchanem/1ba8a4563596f4557c5ae1b8062e8bcb to your computer and use it in GitHub Desktop.
StarSketchVAE
from dataclasses import dataclass
from typing import Tuple
import jax
import jax.numpy as jnp
from flax import nnx
from dataclasses import dataclass
from typing import Tuple
import jax
import jax.numpy as jnp
from flax import nnx
LOG_SIG_MIN = -5.0 # sigma >= e^-5 ≈ 0.0067
LOG_SIG_MAX = 2.0 # sigma <= e^2 ≈ 7.39
RHO_EPS = 1e-3
# =============================================================
# HyperLSTMCell
# =============================================================
class HyperLSTMCell(nnx.RNNCellBase):
def __init__(
self,
in_features: int,
hidden_features: int,
*,
hyper_num_units: int = 256,
hyper_embedding_size: int = 32,
forget_bias: float = 1.0,
gate_fn=jax.nn.sigmoid,
activation_fn=jnp.tanh,
rngs: nnx.Rngs,
):
super().__init__()
self.in_features = in_features
self.hidden_features = hidden_features
self.hyper_num_units = hyper_num_units
self.hyper_embedding_size = hyper_embedding_size
self.forget_bias = forget_bias
self.gate_fn = gate_fn
self.activation_fn = activation_fn
# Base projections (input has no bias; hidden has bias), like your LSTMCell
self.ii = nnx.Linear(in_features, hidden_features, use_bias=False, rngs=rngs)
self.if_ = nnx.Linear(in_features, hidden_features, use_bias=False, rngs=rngs)
self.ig = nnx.Linear(in_features, hidden_features, use_bias=False, rngs=rngs)
self.io = nnx.Linear(in_features, hidden_features, use_bias=False, rngs=rngs)
self.hi = nnx.Linear(hidden_features, hidden_features, use_bias=True, rngs=rngs)
self.hf = nnx.Linear(hidden_features, hidden_features, use_bias=True, rngs=rngs)
self.hg = nnx.Linear(hidden_features, hidden_features, use_bias=True, rngs=rngs)
self.ho = nnx.Linear(hidden_features, hidden_features, use_bias=True, rngs=rngs)
# Hyper LSTM that processes [x, h]
self.hyper_cell = nnx.LSTMCell(
in_features + hidden_features, hyper_num_units, rngs=rngs
)
# Hyper heads: zw -> alpha (+ beta). Separate heads per contribution
def head_pair():
zw = nnx.Linear(
hyper_num_units, hyper_embedding_size, use_bias=True, rngs=rngs
)
alpha = nnx.Linear(
hyper_embedding_size, hidden_features, use_bias=False, rngs=rngs
)
beta = nnx.Linear(
hyper_embedding_size, hidden_features, use_bias=False, rngs=rngs
)
return zw, alpha, beta
self.zw_ix, self.alpha_ix, self.beta_ix = head_pair()
self.zw_jx, self.alpha_jx, self.beta_jx = head_pair()
self.zw_fx, self.alpha_fx, self.beta_fx = head_pair()
self.zw_ox, self.alpha_ox, self.beta_ox = head_pair()
self.zw_ih, self.alpha_ih, self.beta_ih = head_pair()
self.zw_jh, self.alpha_jh, self.beta_jh = head_pair()
self.zw_fh, self.alpha_fh, self.beta_fh = head_pair()
self.zw_oh, self.alpha_oh, self.beta_oh = head_pair()
def initialize_carry(self, input_shape, rngs: nnx.Rngs):
batch_dims = input_shape[:-1]
total_units = self.hidden_features + self.hyper_num_units
mem_shape = batch_dims + (total_units,)
c = jnp.zeros(mem_shape, dtype=jnp.float32)
h = jnp.zeros(mem_shape, dtype=jnp.float32)
return (c, h)
def _hyper_affine(
self, which: str, hyper_h: jnp.ndarray, preact: jnp.ndarray, use_bias: bool
) -> jnp.ndarray:
zw = getattr(self, f"zw_{which}")(hyper_h)
alpha = getattr(self, f"alpha_{which}")(zw)
out = alpha * preact
if use_bias:
beta = getattr(self, f"beta_{which}")(zw)
out = out + beta
return out
def __call__(self, carry, inputs):
total_c, total_h = carry
c_main = total_c[..., : self.hidden_features]
h_main = total_h[..., : self.hidden_features]
c_hyp = total_c[..., self.hidden_features :]
h_hyp = total_h[..., self.hidden_features :]
# Hyper step
hyper_in = jnp.concatenate([inputs, h_main], axis=-1)
(new_c_hyp, new_h_hyp), _ = self.hyper_cell((c_hyp, h_hyp), hyper_in)
# Base preactivations
ix = self.ii(inputs)
ih = self.hi(h_main)
jx = self.ig(inputs)
jh = self.hg(h_main)
fx = self.if_(inputs)
fh = self.hf(h_main)
ox = self.io(inputs)
oh = self.ho(h_main)
# Modulate
ix = self._hyper_affine("ix", new_h_hyp, ix, use_bias=False)
jx = self._hyper_affine("jx", new_h_hyp, jx, use_bias=False)
fx = self._hyper_affine("fx", new_h_hyp, fx, use_bias=False)
ox = self._hyper_affine("ox", new_h_hyp, ox, use_bias=False)
ih = self._hyper_affine("ih", new_h_hyp, ih, use_bias=True)
jh = self._hyper_affine("jh", new_h_hyp, jh, use_bias=True)
fh = self._hyper_affine("fh", new_h_hyp, fh, use_bias=True)
oh = self._hyper_affine("oh", new_h_hyp, oh, use_bias=True)
# Gates and state update
i = self.gate_fn(ix + ih)
f = self.gate_fn(fx + fh + self.forget_bias)
g = self.activation_fn(jx + jh)
o = self.gate_fn(ox + oh)
new_c_main = f * c_main + i * g
new_h_main = o * self.activation_fn(new_c_main)
# Full state
new_total_c = jnp.concatenate([new_c_main, new_c_hyp], axis=-1)
new_total_h = jnp.concatenate([new_h_main, new_h_hyp], axis=-1)
new_carry = (new_total_c, new_total_h)
return new_carry, new_h_main
@property
def num_feature_axes(self) -> int:
"""Returns the number of feature axes of the RNN cell."""
return 1
class BidirectionalLSTMEncoder(nnx.Module):
def __init__(
self,
in_features: int,
hidden_size: int = 512,
latent_size: int = 128,
*,
rngs: nnx.Rngs,
):
super().__init__()
self.hidden_size = hidden_size
self.fwd = nnx.RNN(
nnx.LSTMCell(
in_features=in_features, hidden_features=hidden_size, rngs=rngs
)
)
self.bwd = nnx.RNN(
nnx.LSTMCell(
in_features=in_features, hidden_features=hidden_size, rngs=rngs
)
)
self.fc_mu = nnx.Linear(hidden_size * 2, latent_size, rngs=rngs)
self.fc_logsig = nnx.Linear(hidden_size * 2, latent_size, rngs=rngs)
def __call__(self, x: jax.Array) -> Tuple[jax.Array, jax.Array, jax.Array]:
h_fwd = self.fwd(x) # (B, T, H)
h_bwd = self.bwd(jnp.flip(x, axis=1)) # (B, T, H)
h_final = jnp.concatenate([h_fwd[:, -1], h_bwd[:, -1]], axis=-1) # (B, 2H)
mu = self.fc_mu(h_final)
log_sigma = self.fc_logsig(h_final)
return mu, log_sigma, h_final
class GMMDecoder(nnx.Module):
def __init__(
self,
in_features: int,
hidden_size: int = 2048,
n_mixtures: int = 20,
*,
rngs: nnx.Rngs,
):
super().__init__()
self.rnn = nnx.RNN(
HyperLSTMCell(
in_features=in_features, hidden_features=hidden_size, rngs=rngs
)
)
self.n_mixtures = n_mixtures
out_dim = n_mixtures * 6
self.fc_out = nnx.Linear(hidden_size, out_dim, rngs=rngs)
def __call__(self, inputs: jax.Array) -> Tuple[jax.Array, ...]:
h = self.rnn(inputs) # (B, T, H) # maybe needs to be h, _
y = self.fc_out(h) # (B, T, M*6)
B, T, _ = y.shape
M = self.n_mixtures
y = y.reshape(B, T, M, 6)
pi_logits = y[..., 0] # (B, T, M)
mu = y[..., 1:3] # (B, T, M, 2)
log_sig = jnp.clip(y[..., 3:5], LOG_SIG_MIN, LOG_SIG_MAX) # (B, T, M, 2)
rho = jnp.tanh(y[..., 5]) * (1.0 - RHO_EPS) # (B, T, M)
return pi_logits, mu, log_sig, rho
@dataclass
class ModelConfig:
seq_len: int = 100
data_dim: int = 2 # (Δx, Δt)
enc_hidden: int = 512
dec_hidden: int = 2048
latent_size: int = 128
n_mixtures: int = 20
num_classes: int = 0 # set >0 to enable classifier head
class StarSketchVAE(nnx.Module):
def __init__(self, cfg: ModelConfig, *, rngs: nnx.Rngs):
super().__init__()
self.cfg = cfg
self.encoder = BidirectionalLSTMEncoder(
in_features=cfg.data_dim,
hidden_size=cfg.enc_hidden,
latent_size=cfg.latent_size,
rngs=rngs,
)
self.decoder = GMMDecoder(
in_features=cfg.data_dim + cfg.latent_size,
hidden_size=cfg.dec_hidden,
n_mixtures=cfg.n_mixtures,
rngs=rngs,
)
self.classifier = nnx.Linear(cfg.latent_size, cfg.num_classes, rngs=rngs)
def encode(self, x: jax.Array) -> Tuple[jax.Array, jax.Array, jax.Array]:
return self.encoder(x)
def decode(self, prev_xy: jax.Array, z: jax.Array) -> Tuple[jax.Array, ...]:
B, T, _ = prev_xy.shape
z_broadcast = jnp.repeat(z[:, None, :], T, axis=1) # (B, T, Z)
dec_in = jnp.concatenate([prev_xy, z_broadcast], axis=-1) # (B, T, Z+2)
return self.decoder(dec_in)
def bivariate_normal_logpdf(
xy: jax.Array, mu: jax.Array, log_sig: jax.Array, rho: jax.Array
) -> jax.Array:
sig = jnp.exp(log_sig)
x = xy[..., 0]
y = xy[..., 1]
mx = mu[..., 0]
my = mu[..., 1]
sx = sig[..., 0]
sy = sig[..., 1]
sx = jnp.maximum(sx, 1e-6)
sy = jnp.maximum(sy, 1e-6)
one_minus_r2 = jnp.maximum(1.0 - rho**2, 1e-6)
norm = (
-jnp.log(2.0 * jnp.pi) - jnp.log(sx) - jnp.log(sy) - 0.5 * jnp.log(one_minus_r2)
)
zx = (x - mx) / sx
zy = (y - my) / sy
exp_term = -0.5 * ((zx**2 + zy**2 - 2.0 * rho * zx * zy) / one_minus_r2)
return norm + exp_term
def gmm_log_likelihood(
xy: jax.Array,
pi_logits: jax.Array,
mu: jax.Array,
log_sig: jax.Array,
rho: jax.Array,
) -> jax.Array:
B, T, _ = xy.shape
M = pi_logits.shape[-1]
xy_exp = xy[:, :, None, :] # (B, T, 1, 2)
comp_logpdf = bivariate_normal_logpdf(xy_exp, mu, log_sig, rho) # (B, T, M)
log_pi = jax.nn.log_softmax(pi_logits, axis=-1) # (B, T, M)
# log-sum-exp over mixture components
ll = jax.scipy.special.logsumexp(log_pi + comp_logpdf, axis=-1) # (B, T)
return ll
def reconstruction_loss(
xy: jax.Array,
pi_logits: jax.Array,
mu: jax.Array,
log_sig: jax.Array,
rho: jax.Array,
w: jax.Array
) -> jax.Array:
ll = gmm_log_likelihood(xy, pi_logits, mu, log_sig, rho) # (B, T)
nll_t = -ll
nll = jnp.sum(w * nll_t) / (jnp.sum(w) + 1e-8)
return nll
def kl_loss(mu: jax.Array, log_sigma: jax.Array) -> jax.Array:
log_var = 2.0 * log_sigma
var = jnp.exp(log_var)
kl = 0.5 * (var + mu**2 - 1.0 - log_var)
return jnp.mean(jnp.sum(kl, axis=-1))
def model_loss(
model: StarSketchVAE,
batch_xy: jax.Array,
*,
class_ids: jax.Array | None = None,
w_kl: float = 1.0,
w_sup: float = 1.0,
rng_key: jax.Array,
) -> Tuple[jax.Array, dict]:
"""
batch_xy: (B, T=100, 2) full teacher-forced sequences of deltas
Returns total loss and metrics dict
"""
B, T, D = batch_xy.shape
assert D == 2, "Expecting (Δx, Δt)"
mu, log_sigma, enc_feats = model.encode(batch_xy)
eps = jax.random.normal(rng_key, mu.shape)
z = mu + jnp.exp(log_sigma) * eps
pad0 = jnp.zeros((B, 1, D), dtype=batch_xy.dtype)
prev_xy = jnp.concatenate([pad0, batch_xy[:, :-1, :]], axis=1) # (B, T, 2)
pi_logits, gmm_mu, gmm_logsig, gmm_rho = model.decode(prev_xy, z)
dt = batch_xy[..., 1]
# normalized weights
w = dt / (jnp.mean(dt) + 1e-8)
recon = reconstruction_loss(batch_xy, pi_logits, gmm_mu, gmm_logsig, gmm_rho,
w)
kl = kl_loss(mu, log_sigma)
total = recon + w_kl * kl
sup_loss = 0.0
cls_metrics = {}
logits = model.classifier(z) # (B, C)
onehot = jax.nn.one_hot(class_ids, logits.shape[-1])
ce = -jnp.sum(onehot * jax.nn.log_softmax(logits, axis=-1), axis=-1)
sup_loss = jnp.mean(ce)
probs = jax.nn.softmax(logits, axis=-1)
pred = jnp.argmax(probs, axis=-1)
acc = jnp.mean((pred == class_ids).astype(jnp.float32))
cls_metrics = {"sup_ce": sup_loss, "acc": acc}
# ===== Sequence-closure penalty: sum Δx_pred ≈ sum Δx_gt
pi = jax.nn.softmax(pi_logits, axis=-1)[..., None] # (B,T,M,1)
exp = jnp.sum(pi * gmm_mu, axis=-2) # (B,T,2)
x_gt_total = jnp.sum(batch_xy[..., 0], axis=1) # (B,)
x_pr_total = jnp.sum(exp[..., 0], axis=1) # (B,)
close_loss = jnp.mean((x_pr_total - x_gt_total) ** 2)
total = recon + w_kl*kl + w_sup * sup_loss + close_loss*5
metrics = {"loss": total, "recon": recon, "kl": kl, **cls_metrics}
return total, metrics
import jax
import jax.numpy as jnp
# ---------- Classifier direction utilities ----------
def _linear_params(linear) -> tuple[jnp.ndarray, jnp.ndarray | None]:
# Works for nnx.Linear; some variants use 'kernel' not 'weight'
if hasattr(linear, "weight"):
W = linear.weight
elif hasattr(linear, "kernel"):
W = linear.kernel
else:
raise AttributeError("Classifier Linear has no 'weight' or 'kernel'.")
b = getattr(linear, "bias", None)
return W, b
def get_classifier_direction(model: StarSketchVAE,
class_id: int,
*,
normalize: bool = True,
margin: bool = False) -> jnp.ndarray:
"""
Return a latent-space direction for class `class_id`.
Handles either W shape: (C, Z) or (Z, C).
If margin=True, uses a mean-difference direction for a stronger push.
"""
W, _ = _linear_params(model.classifier)
C = model.cfg.num_classes
Z = model.cfg.latent_size
assert 0 <= class_id < C, "class_id out of range"
# Figure out orientation
if W.shape == (C, Z): # rows = classes
w_c = W[class_id] # (Z,)
if margin:
mask = jnp.ones(C, dtype=bool).at[class_id].set(False)
w_rest_mean = jnp.mean(W[mask], axis=0) # (Z,)
direction = w_c - w_rest_mean
else:
direction = w_c
elif W.shape == (Z, C): # columns = classes
w_c = W[:, class_id] # (Z,)
if margin:
# mean over other columns
idx = jnp.arange(C) != class_id
w_rest_mean = jnp.mean(W[:, idx], axis=1) # (Z,)
direction = w_c - w_rest_mean
else:
direction = w_c
else:
raise ValueError(f"Unexpected classifier weight shape {W.shape}; "
f"expected (C,Z)=({C},{Z}) or (Z,C)=({Z},{C}).")
if normalize:
direction = direction / (jnp.linalg.norm(direction) + 1e-8)
return direction # (Z,)
def tweak_z_towards_class(z: jnp.ndarray,
model: StarSketchVAE,
class_id: int,
*,
alpha: float = 3.0,
normalize: bool = True,
margin: bool = False) -> jnp.ndarray:
d = get_classifier_direction(model, class_id, normalize=normalize, margin=margin)
assert d.shape == z.shape, f"direction {d.shape} must match z {z.shape}"
return z + alpha * d
# ---------- GMM sampling helpers ----------
def _sample_bivariate_from_params(mu: jnp.ndarray,
log_sig: jnp.ndarray,
rho: jnp.ndarray,
rng_key: jax.Array,
temperature: float = 1.0) -> jnp.ndarray:
sig = jnp.exp(log_sig) * jnp.sqrt(temperature)
rho = jnp.clip(rho, -0.999, 0.999)
u_key, v_key = jax.random.split(rng_key)
u = jax.random.normal(u_key)
v = jax.random.normal(v_key)
# correlated 2D normal
dx = sig[0] * u
dy = sig[1] * (rho * u + jnp.sqrt(1.0 - rho**2) * v)
return mu + jnp.array([dx, dy])
def _mixture_expectation(pi_logits_t: jnp.ndarray,
mu_t: jnp.ndarray,
temperature: float = 1.0) -> jnp.ndarray:
pi = jax.nn.softmax(pi_logits_t / temperature, axis=-1) # (M,)
return jnp.sum(pi[:, None] * mu_t, axis=0) # (2,)
def _mixture_sample(pi_logits_t: jnp.ndarray,
mu_t: jnp.ndarray,
log_sig_t: jnp.ndarray,
rho_t: jnp.ndarray,
rng_key: jax.Array,
temperature: float = 1.0) -> jnp.ndarray:
M = pi_logits_t.shape[0]
# Sample component
pi = jax.nn.softmax(pi_logits_t / temperature, axis=-1) # (M,)
comp_key, gauss_key = jax.random.split(rng_key)
k = jax.random.categorical(comp_key, jnp.log(pi), axis=-1) # int
return _sample_bivariate_from_params(mu_t[k], log_sig_t[k], rho_t[k], gauss_key, temperature)
# ---------- Autoregressive decoding ----------
def decode_from_z(model: StarSketchVAE,
z: jnp.ndarray,
*,
steps: int,
method: str = "expected", # "expected" or "sample"
temperature: float = 1.0,
rng_key: jax.Array | None = None) -> jnp.ndarray:
assert z.ndim == 1, "z must be shape (Z,)"
B = 1
D = 2
if method == "sample" and rng_key is None:
rng_key = jax.random.PRNGKey(0)
# running buffer of previous outputs
prev = jnp.zeros((steps, D), dtype=jnp.float32)
prev = prev.at[0].set(jnp.array([0.0, 0.0], dtype=jnp.float32)) # first prev is 0
out = []
zB = z[None, :] # (1,Z)
for t in range(steps):
prev_xy = prev[None, :, :] # (1, steps, 2)
pi_logits, gmm_mu, gmm_logsig, gmm_rho = model.decode(prev_xy, zB)
pi_t = pi_logits[0, t] # (M,)
mu_t = gmm_mu[0, t] # (M,2)
logs_t = gmm_logsig[0, t] # (M,2)
rho_t = gmm_rho[0, t] # (M,)
if method == "expected":
delta = _mixture_expectation(pi_t, mu_t, temperature=temperature)
else:
rng_key, step_key = jax.random.split(rng_key)
delta = _mixture_sample(pi_t, mu_t, logs_t, rho_t, step_key, temperature=temperature)
out.append(delta)
if t + 1 < steps:
prev = prev.at[t + 1].set(delta)
return jnp.stack(out, axis=0) # (steps, 2)
# ---------- End-to-end: sample z, push toward class, decode ----------
def class_conditioned_random_curve(model: StarSketchVAE,
class_id: int,
*,
steps: int = 100,
z_scale: float = 1.0,
alpha: float = 3.0,
normalize_dir: bool = True,
margin: bool = False,
method: str = "expected", # "expected" or "sample"
temperature: float = 0.9,
rng_key: jax.Array | None = None) -> tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray]:
if rng_key is None:
rng_key = jax.random.PRNGKey(42)
z_key, dec_key = jax.random.split(rng_key)
# sample z ~ N(0, I)
Z = model.cfg.latent_size
z = jax.random.normal(z_key, (Z,)) * z_scale # (Z,)
# push toward class direction
z_star = tweak_z_towards_class(z, model, class_id, alpha=alpha,
normalize=normalize_dir, margin=margin)
deltas = decode_from_z(model, z_star, steps=steps, method=method,
temperature=temperature, rng_key=dec_key)
dt = jnp.maximum(deltas[:, 1], 1e-4)
deltas = deltas.at[:, 1].set(dt)
# Convert to cumulative x(t)
x = jnp.cumsum(deltas[:, 0])
t = jnp.cumsum(deltas[:, 1])
return deltas, x, t
if __name__ == "__main__":
rngs = nnx.Rngs(0)
cfg = ModelConfig(
seq_len=100,
data_dim=2,
enc_hidden=512,
dec_hidden=2048,
latent_size=128,
n_mixtures=20,
num_classes=5,
)
model = StarSketchVAE(cfg, rngs=rngs)
B, T, D = 6, 100, 2
batch = jnp.ones((B, T, D))
# class_ids: all samples labeled (no unlabeled)
class_ids = jnp.array([0, 1, 2, 3, 4, 0])
key = jax.random.PRNGKey(42)
loss, metrics = model_loss(
model, batch, class_ids=class_ids, w_kl=1.0, w_sup=1.0, rng_key=key
)
print({k: float(v) for k, v in metrics.items()})
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "864eae34-0cc9-484f-ae98-7615e8e7c2bd",
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b6f06154-72d9-49cb-87c3-761395b08b3a",
"metadata": {},
"outputs": [],
"source": [
"from star_sketch_rnn import *"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "183f7b53-0541-461d-9e43-6fa430f3a0e2",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import jax\n",
"import jax.numpy as jnp\n",
"import optax\n",
"from flax import nnx"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "1c983116-8feb-4e3c-a267-d1328be8bc33",
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_parquet(\"fit_stars.parquet\").sample(frac=1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "18f3b22c-a56e-4ebc-b6c4-c9e65d2930dc",
"metadata": {},
"outputs": [],
"source": [
"def to_diff(arr):\n",
" return np.diff(arr, axis=1, prepend=np.zeros((arr.shape[0], 1), dtype=arr.dtype)) + arr[:, :1]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a5916a08-ca99-47c5-9599-a6d35fca1bd5",
"metadata": {},
"outputs": [],
"source": [
"mag = to_diff(np.stack([x for x in df[\"y_1P\"].to_numpy()])) "
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "978ac2f1-fa50-42ff-b7d4-694e8883fe73",
"metadata": {},
"outputs": [],
"source": [
"filt = ~(mag >= 0.01).any(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "4d91d68e-f24e-443a-8e21-5c57237f50f6",
"metadata": {},
"outputs": [],
"source": [
"time = to_diff(np.stack([x for x in df[\"t_days_1P\"].to_numpy()]))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "f5c3d6cd-41fc-4890-ac51-6cba7cbbdd1c",
"metadata": {},
"outputs": [],
"source": [
"types = df[\"type\"].unique().tolist()\n",
"classes = df[\"type\"].apply(lambda x: types.index(x)).to_numpy()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "374dbe63-ff75-4afb-a9d1-5213498e311b",
"metadata": {},
"outputs": [],
"source": [
"train = (mag[filt][:65_000], time[filt][:65_000], classes[filt][:65_000])"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "e6bd720b-59c4-40ec-8096-79d913885c2a",
"metadata": {},
"outputs": [],
"source": [
"test = (mag[filt][65_000:], time[filt][65_000:], classes[filt][65_000:])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "49b46bd4-8eda-4ff2-98d5-9b6b0e4f22ba",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(types)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "18661700-d536-490f-98db-006c8c42794b",
"metadata": {},
"outputs": [],
"source": [
"rngs = nnx.Rngs(0)\n",
"cfg = ModelConfig(\n",
" seq_len=100,\n",
" data_dim=2,\n",
" enc_hidden=512,\n",
" dec_hidden=2048,\n",
" latent_size=128,\n",
" n_mixtures=20,\n",
" num_classes=12,\n",
")\n",
"model = StarSketchVAE(cfg, rngs=rngs)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "5ac5fc7e-ef52-4418-bb31-9d65b250dd02",
"metadata": {},
"outputs": [],
"source": [
"lr = 3e-4\n",
"tx = optax.chain(\n",
" optax.clip_by_global_norm(1.0),\n",
" optax.adam(lr),\n",
")\n",
"\n",
"opt = nnx.Optimizer(model, tx)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "fe26ed0d-93d2-4229-8a47-8b61d70cfe03",
"metadata": {},
"outputs": [],
"source": [
"@nnx.jit\n",
"def train_step(model: nnx.Module,\n",
" opt: nnx.Optimizer,\n",
" batch_xy: jax.Array, # (B, T=100, 2) -> (Δx, Δt)\n",
" class_ids: jax.Array, # (B,)\n",
" kl_weight: float,\n",
" sup_weight: float,\n",
" key: jax.Array):\n",
" \"\"\"Returns (updated_model, updated_opt, metrics).\"\"\"\n",
"\n",
" def loss_fn(m):\n",
" loss, metrics = model_loss(\n",
" m,\n",
" batch_xy,\n",
" class_ids=class_ids,\n",
" w_kl=kl_weight,\n",
" w_sup=sup_weight,\n",
" rng_key=key,\n",
" )\n",
" return loss, metrics\n",
"\n",
" (loss, metrics), grads = nnx.value_and_grad(loss_fn, has_aux=True)(model)\n",
" opt.update(grads)\n",
" #opt.apply_updates(model)\n",
" return model, opt, metrics"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "469358a6-9c2b-4f52-8cc7-9f8970f1479a",
"metadata": {},
"outputs": [],
"source": [
"@nnx.jit\n",
"def eval_step(model: nnx.Module,\n",
" batch_xy: jax.Array,\n",
" class_ids: jax.Array,\n",
" key: jax.Array):\n",
" loss, metrics = model_loss(\n",
" model,\n",
" batch_xy,\n",
" class_ids=class_ids,\n",
" w_kl=1.0,\n",
" w_sup=1.0,\n",
" rng_key=key,\n",
" )\n",
" return metrics"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "9d58ed35-58f6-4744-b108-8cd3202a80f9",
"metadata": {},
"outputs": [],
"source": [
"def iterate_minibatches(X_mag, X_time, y_cls, batch_size, shuffle=True):\n",
" N = X_mag.shape[0]\n",
" idx = np.arange(N)\n",
" if shuffle:\n",
" np.random.shuffle(idx)\n",
" for start in range(0, N, batch_size):\n",
" end = min(start + batch_size, N)\n",
" sel = idx[start:end]\n",
" batch = np.stack((X_mag[sel], X_time[sel]), axis=-1) # (B,T,2) in ORIGINAL units\n",
" #batch = batch - batch.mean(axis=1, keepdims=True)\n",
" yield batch, y_cls[sel]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "c949700f-7e08-4a98-8f8e-bf85f514b878",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"step 0 | train_loss=46.5021 recon=1.9357 kl=0.1865 sup_ce=2.9643 acc=0.141 | eval_loss=37.5979 eval_acc=0.117\n",
"step 100 | train_loss=1.2059 recon=-1.5797 kl=1.2156 sup_ce=2.1404 acc=0.312 | eval_loss=3.5798 eval_acc=0.234\n",
"step 200 | train_loss=-0.2314 recon=-2.2060 kl=0.6651 sup_ce=2.1743 acc=0.289 | eval_loss=1.2422 eval_acc=0.289\n",
"step 300 | train_loss=-1.2403 recon=-3.0053 kl=0.5497 sup_ce=2.0626 acc=0.312 | eval_loss=0.3983 eval_acc=0.328\n",
"step 400 | train_loss=-1.6501 recon=-3.4225 kl=0.5933 sup_ce=2.0357 acc=0.359 | eval_loss=-0.0955 eval_acc=0.352\n",
"step 500 | train_loss=-2.2685 recon=-3.8309 kl=0.4807 sup_ce=1.8648 acc=0.336 | eval_loss=-0.5499 eval_acc=0.320\n",
"epoch 1 | train_loss=-2.2131 recon=-3.9231 kl=0.4868 sup_ce=1.9915 acc=0.356 | eval_loss=-0.7181 eval_acc=0.336\n",
"step 0 | train_loss=-1.7936 recon=-3.7092 kl=0.5414 sup_ce=1.9363 acc=0.383 | eval_loss=-0.6880 eval_acc=0.336\n",
"step 100 | train_loss=-2.3393 recon=-3.9952 kl=0.3958 sup_ce=1.8324 acc=0.461 | eval_loss=-0.8823 eval_acc=0.344\n",
"step 200 | train_loss=-2.2735 recon=-4.0245 kl=0.4805 sup_ce=1.7829 acc=0.383 | eval_loss=-1.3115 eval_acc=0.406\n",
"step 300 | train_loss=-2.5875 recon=-4.1634 kl=0.4761 sup_ce=1.6604 acc=0.422 | eval_loss=-1.3304 eval_acc=0.336\n",
"step 400 | train_loss=-2.4696 recon=-4.0756 kl=0.3896 sup_ce=1.8260 acc=0.383 | eval_loss=-1.5577 eval_acc=0.359\n",
"step 500 | train_loss=-2.7015 recon=-4.2522 kl=0.3790 sup_ce=1.7719 acc=0.367 | eval_loss=-1.7647 eval_acc=0.438\n",
"epoch 2 | train_loss=-2.9328 recon=-4.4264 kl=0.3949 sup_ce=1.6880 acc=0.394 | eval_loss=-1.6857 eval_acc=0.367\n",
"step 0 | train_loss=-2.5810 recon=-4.3915 kl=0.3828 sup_ce=1.8710 acc=0.398 | eval_loss=-1.6001 eval_acc=0.391\n",
"step 100 | train_loss=-2.5038 recon=-4.1318 kl=0.3346 sup_ce=1.6240 acc=0.422 | eval_loss=-1.7121 eval_acc=0.344\n",
"step 200 | train_loss=-2.9047 recon=-4.5835 kl=0.3615 sup_ce=1.7179 acc=0.430 | eval_loss=-1.9314 eval_acc=0.375\n",
"step 300 | train_loss=-2.8661 recon=-4.4328 kl=0.3773 sup_ce=1.5870 acc=0.406 | eval_loss=-2.1180 eval_acc=0.328\n",
"step 400 | train_loss=-3.0018 recon=-4.6010 kl=0.2515 sup_ce=1.7208 acc=0.438 | eval_loss=-2.2898 eval_acc=0.328\n",
"step 500 | train_loss=-3.1853 recon=-4.7219 kl=0.2917 sup_ce=1.6104 acc=0.430 | eval_loss=-2.5992 eval_acc=0.492\n",
"epoch 3 | train_loss=-3.1608 recon=-4.7712 kl=0.3150 sup_ce=1.6604 acc=0.452 | eval_loss=-2.5221 eval_acc=0.406\n",
"step 0 | train_loss=-2.9159 recon=-4.7732 kl=0.3274 sup_ce=1.7308 acc=0.438 | eval_loss=-2.5389 eval_acc=0.445\n",
"step 100 | train_loss=-2.9882 recon=-4.7597 kl=0.2422 sup_ce=1.7119 acc=0.398 | eval_loss=-2.6269 eval_acc=0.430\n",
"step 200 | train_loss=-2.9619 recon=-4.6602 kl=0.2416 sup_ce=1.6127 acc=0.469 | eval_loss=-2.6653 eval_acc=0.359\n",
"step 300 | train_loss=-3.1689 recon=-4.7695 kl=0.2065 sup_ce=1.5602 acc=0.477 | eval_loss=-2.8632 eval_acc=0.492\n",
"step 400 | train_loss=-3.1341 recon=-4.8682 kl=0.2233 sup_ce=1.6918 acc=0.414 | eval_loss=-3.0476 eval_acc=0.477\n",
"step 500 | train_loss=-3.5936 recon=-5.1131 kl=0.1969 sup_ce=1.4729 acc=0.500 | eval_loss=-3.1354 eval_acc=0.414\n",
"epoch 4 | train_loss=-3.2947 recon=-4.9280 kl=0.1800 sup_ce=1.6238 acc=0.471 | eval_loss=-2.8099 eval_acc=0.430\n",
"step 0 | train_loss=-2.7201 recon=-4.4851 kl=0.2572 sup_ce=1.5305 acc=0.469 | eval_loss=-3.0156 eval_acc=0.430\n",
"step 100 | train_loss=-3.2445 recon=-4.9394 kl=0.1635 sup_ce=1.5447 acc=0.469 | eval_loss=-3.0728 eval_acc=0.430\n",
"step 200 | train_loss=-3.3980 recon=-5.0827 kl=0.1805 sup_ce=1.4927 acc=0.484 | eval_loss=-3.2222 eval_acc=0.383\n",
"step 300 | train_loss=-3.4169 recon=-5.0997 kl=0.1672 sup_ce=1.4804 acc=0.453 | eval_loss=-3.1448 eval_acc=0.391\n",
"step 400 | train_loss=-3.8233 recon=-5.3426 kl=0.1276 sup_ce=1.4011 acc=0.469 | eval_loss=-3.3062 eval_acc=0.414\n",
"step 500 | train_loss=-3.3796 recon=-4.9774 kl=0.1332 sup_ce=1.4867 acc=0.484 | eval_loss=-3.3846 eval_acc=0.461\n",
"epoch 5 | train_loss=-3.2788 recon=-4.8331 kl=0.1072 sup_ce=1.4674 acc=0.529 | eval_loss=-3.3734 eval_acc=0.461\n",
"step 0 | train_loss=-3.2406 recon=-4.8606 kl=0.1120 sup_ce=1.5181 acc=0.406 | eval_loss=-3.3314 eval_acc=0.414\n",
"step 100 | train_loss=-3.8496 recon=-5.3313 kl=0.1010 sup_ce=1.3500 acc=0.516 | eval_loss=-3.4509 eval_acc=0.414\n",
"step 200 | train_loss=-3.5082 recon=-5.2396 kl=0.0783 sup_ce=1.6130 acc=0.414 | eval_loss=-3.6469 eval_acc=0.445\n",
"step 300 | train_loss=-3.6952 recon=-5.2373 kl=0.0657 sup_ce=1.4466 acc=0.492 | eval_loss=-3.5869 eval_acc=0.430\n",
"step 400 | train_loss=-3.8266 recon=-5.3385 kl=0.0632 sup_ce=1.4361 acc=0.484 | eval_loss=-3.7103 eval_acc=0.445\n",
"step 500 | train_loss=-3.8763 recon=-5.4211 kl=0.0506 sup_ce=1.4706 acc=0.453 | eval_loss=-3.7715 eval_acc=0.461\n",
"epoch 6 | train_loss=-3.7528 recon=-5.3057 kl=0.0573 sup_ce=1.4602 acc=0.433 | eval_loss=-3.6639 eval_acc=0.398\n",
"step 0 | train_loss=-4.0338 recon=-5.5182 kl=0.0532 sup_ce=1.3976 acc=0.508 | eval_loss=-3.7643 eval_acc=0.469\n",
"step 100 | train_loss=-4.1112 recon=-5.5335 kl=0.0397 sup_ce=1.3796 acc=0.477 | eval_loss=-3.7793 eval_acc=0.414\n",
"step 200 | train_loss=-3.8078 recon=-5.2511 kl=0.0304 sup_ce=1.4111 acc=0.500 | eval_loss=-3.9057 eval_acc=0.453\n",
"step 300 | train_loss=-3.9710 recon=-5.3875 kl=0.0232 sup_ce=1.3870 acc=0.508 | eval_loss=-3.9297 eval_acc=0.461\n",
"step 400 | train_loss=-3.8938 recon=-5.4326 kl=0.0229 sup_ce=1.4653 acc=0.484 | eval_loss=-3.8819 eval_acc=0.422\n",
"step 500 | train_loss=-4.1468 recon=-5.5036 kl=0.0211 sup_ce=1.3285 acc=0.547 | eval_loss=-4.0318 eval_acc=0.453\n",
"epoch 7 | train_loss=-4.2213 recon=-5.6256 kl=0.0188 sup_ce=1.3808 acc=0.433 | eval_loss=-4.1490 eval_acc=0.539\n",
"step 0 | train_loss=-4.2351 recon=-5.6195 kl=0.0178 sup_ce=1.3652 acc=0.484 | eval_loss=-3.9614 eval_acc=0.430\n",
"step 100 | train_loss=-4.0468 recon=-5.4817 kl=0.0172 sup_ce=1.3736 acc=0.523 | eval_loss=-4.0817 eval_acc=0.438\n",
"step 200 | train_loss=-4.4394 recon=-5.7968 kl=0.0157 sup_ce=1.3208 acc=0.578 | eval_loss=-4.1147 eval_acc=0.414\n",
"step 300 | train_loss=-4.3627 recon=-5.7794 kl=0.0176 sup_ce=1.3668 acc=0.461 | eval_loss=-4.2116 eval_acc=0.500\n",
"step 400 | train_loss=-4.0753 recon=-5.4199 kl=0.0134 sup_ce=1.3217 acc=0.508 | eval_loss=-4.1605 eval_acc=0.438\n",
"step 500 | train_loss=-4.3648 recon=-5.7506 kl=0.0159 sup_ce=1.3569 acc=0.453 | eval_loss=-4.2464 eval_acc=0.508\n",
"epoch 8 | train_loss=-4.4228 recon=-5.8212 kl=0.0135 sup_ce=1.3747 acc=0.510 | eval_loss=-4.1181 eval_acc=0.500\n",
"step 0 | train_loss=-4.2178 recon=-5.4982 kl=0.0133 sup_ce=1.2396 acc=0.594 | eval_loss=-4.1389 eval_acc=0.469\n",
"step 100 | train_loss=-4.4617 recon=-5.8206 kl=0.0100 sup_ce=1.3203 acc=0.547 | eval_loss=-4.2829 eval_acc=0.430\n",
"step 200 | train_loss=-4.2466 recon=-5.5921 kl=0.0101 sup_ce=1.3079 acc=0.516 | eval_loss=-4.3115 eval_acc=0.484\n",
"step 300 | train_loss=-4.4373 recon=-5.7913 kl=0.0083 sup_ce=1.3420 acc=0.516 | eval_loss=-4.2483 eval_acc=0.469\n",
"step 400 | train_loss=-4.2794 recon=-5.6517 kl=0.0092 sup_ce=1.3232 acc=0.562 | eval_loss=-4.1492 eval_acc=0.492\n",
"step 500 | train_loss=-4.5504 recon=-5.8806 kl=0.0054 sup_ce=1.2962 acc=0.586 | eval_loss=-4.4070 eval_acc=0.461\n",
"epoch 9 | train_loss=-4.5222 recon=-5.8240 kl=0.0076 sup_ce=1.2841 acc=0.519 | eval_loss=-4.4066 eval_acc=0.461\n",
"step 0 | train_loss=-4.3504 recon=-5.7417 kl=0.0077 sup_ce=1.3783 acc=0.531 | eval_loss=-4.3692 eval_acc=0.469\n",
"step 100 | train_loss=-4.3907 recon=-5.7698 kl=0.0068 sup_ce=1.3325 acc=0.539 | eval_loss=-4.3803 eval_acc=0.477\n",
"step 200 | train_loss=-4.5646 recon=-5.9375 kl=0.0048 sup_ce=1.3590 acc=0.492 | eval_loss=-4.4658 eval_acc=0.469\n",
"step 300 | train_loss=-4.5880 recon=-5.9255 kl=0.0047 sup_ce=1.2945 acc=0.508 | eval_loss=-4.3337 eval_acc=0.461\n",
"step 400 | train_loss=-4.7077 recon=-5.9371 kl=0.0052 sup_ce=1.2071 acc=0.547 | eval_loss=-4.5713 eval_acc=0.461\n",
"step 500 | train_loss=-4.7069 recon=-5.9930 kl=0.0041 sup_ce=1.2604 acc=0.562 | eval_loss=-4.4489 eval_acc=0.469\n",
"epoch 10 | train_loss=-4.5853 recon=-5.8341 kl=0.0040 sup_ce=1.2254 acc=0.490 | eval_loss=-4.2734 eval_acc=0.445\n"
]
}
],
"source": [
"epochs = 10\n",
"batch_size = 128\n",
"kl_weight = 1.0\n",
"sup_weight = 1.0\n",
"\n",
"rng = jax.random.key(0)\n",
"\n",
"for epoch in range(1, epochs + 1):\n",
" N = train[0].shape[0]/batch_size\n",
" # ---- Train\n",
" for i, dat in enumerate(iterate_minibatches(\n",
" train[0], train[1], train[2], batch_size, shuffle=True\n",
" )):\n",
" batch_xy_np, class_ids_np = dat\n",
" \n",
" mult_ce = min(1.0, 0.5+1.0*(epoch/epochs))\n",
" mult_kl = min(1.0, 0.3+1.0*(epoch/epochs))\n",
" rng, sub = jax.random.split(rng)\n",
" batch_xy = jnp.asarray(batch_xy_np)\n",
" class_ids = jnp.asarray(class_ids_np)\n",
" model, opt, metrics = train_step(\n",
" model, opt, batch_xy, class_ids, mult_kl*kl_weight, mult_ce*sup_weight, sub\n",
" )\n",
" if i % 100 == 0:\n",
" eval_batch = np.stack((test[0][:batch_size], test[1][:batch_size]), axis=-1)\n",
" eval_classes = test[2][:batch_size]\n",
" rng, sub = jax.random.split(rng)\n",
" eval_metrics = eval_step(\n",
" model, jnp.asarray(eval_batch), jnp.asarray(eval_classes), sub\n",
" )\n",
" print(f\"step {i} | \"\n",
" f\"train_loss={float(metrics['loss']):.4f} \"\n",
" f\"recon={float(metrics['recon']):.4f} \"\n",
" f\"kl={float(metrics['kl']):.4f} \"\n",
" f\"sup_ce={float(metrics.get('sup_ce', 0.0)):.4f} \"\n",
" f\"acc={float(metrics.get('acc', 0.0)):.3f} | \"\n",
" f\"eval_loss={float(eval_metrics['loss']):.4f} \"\n",
" f\"eval_acc={float(eval_metrics.get('acc', 0.0)):.3f}\")\n",
"\n",
" eval_batch = np.stack((test[0][:batch_size], test[1][:batch_size]), axis=-1)\n",
"\n",
" eval_classes = test[2][:batch_size]\n",
" rng, sub = jax.random.split(rng)\n",
" eval_metrics = eval_step(\n",
" model, jnp.asarray(eval_batch), jnp.asarray(eval_classes), sub\n",
" )\n",
"\n",
" print(f\"epoch {epoch} | \"\n",
" f\"train_loss={float(metrics['loss']):.4f} \"\n",
" f\"recon={float(metrics['recon']):.4f} \"\n",
" f\"kl={float(metrics['kl']):.4f} \"\n",
" f\"sup_ce={float(metrics.get('sup_ce', 0.0)):.4f} \"\n",
" f\"acc={float(metrics.get('acc', 0.0)):.3f} | \"\n",
" f\"eval_loss={float(eval_metrics['loss']):.4f} \"\n",
" f\"eval_acc={float(eval_metrics.get('acc', 0.0)):.3f}\")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "1b3d08c6-13fe-402e-b98c-e9364b9d9d43",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def deltas_to_curve(deltas: jnp.ndarray) -> tuple[jnp.ndarray, jnp.ndarray]:\n",
" \"\"\"Convert (Δx, Δt) of shape (T, 2) to cumulative (x(t), t).\n",
" Returns (x, t) each shape (T,).\n",
" \"\"\"\n",
" dx = deltas[:, 0]\n",
" dt = deltas[:, 1]\n",
" t = jnp.cumsum(dt)\n",
" x = jnp.cumsum(dx)\n",
" return x, t\n",
"\n",
"\n",
"def reconstruct_deltas(model: StarSketchVAE,\n",
" seq: jnp.ndarray,\n",
" *,\n",
" method: str = \"expected\",\n",
" temperature: float = 0.8,\n",
" rng_key: jax.Array | None = None) -> jnp.ndarray:\n",
" \"\"\"Teacher-forced reconstruction of a single sequence (T,2).\n",
" \"\"\"\n",
" assert seq.ndim == 2 and seq.shape[-1] == 2\n",
" B = 1\n",
" T = seq.shape[0]\n",
" batch = seq[None, ...]\n",
" mu, log_sigma, enc_feats = model.encode(batch)\n",
" z = mu # use mean for deterministic reconstruction\n",
"\n",
" pad0 = jnp.zeros((B, 1, 2), dtype=batch.dtype)\n",
" prev_xy = jnp.concatenate([pad0, batch[:, :-1, :]], axis=1)\n",
" pi_logits, gmm_mu, gmm_logsig, gmm_rho = model.decode(prev_xy, z)\n",
"\n",
" if method == \"expected\":\n",
" # Expected value of mixture: sum_k softmax(pi) * mu_k\n",
" pi = jax.nn.softmax(pi_logits, axis=-1) # (1, T, M)\n",
" ex = jnp.sum(pi[..., None] * gmm_mu, axis=-2) # (1, T, 2)\n",
" return ex[0]\n",
" elif method == \"sample\":\n",
" if rng_key is None:\n",
" rng_key = jax.random.PRNGKey(0)\n",
" return sample_sequence(model, z, steps=T, temperature=temperature, rng_key=rng_key)[0]\n",
"\n",
"def plot_input_and_recon(seq: jnp.ndarray,\n",
" recon: jnp.ndarray,\n",
" *,\n",
" title_input: str = \"Input lightcurve\",\n",
" title_recon: str = \"Reconstruction\") -> None:\n",
" \"\"\"Plot input and reconstructed lightcurves as two separate figures.\n",
" \"\"\"\n",
" x_in, t_in = deltas_to_curve(seq)\n",
" plt.figure()\n",
" plt.plot(t_in, x_in)\n",
" plt.xlabel(\"t\"); plt.ylabel(\"x\"); plt.title(title_input)\n",
"\n",
" x_rec, t_rec = deltas_to_curve(recon)\n",
" plt.figure()\n",
" plt.plot(t_in, x_rec)\n",
" plt.xlabel(\"t\"); plt.ylabel(\"x\"); plt.title(title_recon)\n",
"\n",
"\n",
"def compare_lightcurves(seq: jnp.ndarray,\n",
" recon: jnp.ndarray,\n",
" *,\n",
" title: str = \"Input vs Reconstruction\") -> None:\n",
" x_in, t_in = deltas_to_curve(seq)\n",
" x_rec, t_rec = deltas_to_curve(recon)\n",
" plt.figure()\n",
" plt.plot(t_in, x_in, label=\"input\")\n",
" plt.plot(t_in, x_rec, label=\"recon\")\n",
" plt.xlabel(\"t\"); plt.ylabel(\"x\"); plt.title(title)\n",
" plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "55233b2f-32e3-4f88-b9b9-cc1ef0640e24",
"metadata": {},
"outputs": [],
"source": [
"test_xy = np.stack((test[0], test[1]), axis=-1)\n",
"test_classes = test[2]"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "5b158cd5-687a-4ffc-857d-9fbbe68ff6f4",
"metadata": {},
"outputs": [],
"source": [
"seq = test_xy[500]"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "f5454941-29cd-47dd-9fc0-1280e793388f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(4288, 100, 2)"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_xy.shape"
]
},
{
"cell_type": "markdown",
"id": "2b29f2b4-ee68-4939-92a1-9de519cd70c3",
"metadata": {},
"source": [
"### We learn the rough shape/inflection points of lightcurves--but have drift issues (maybe switching to non-importance weighted sampling of the input data would fix or different regularizers)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "17bb8471-4640-41e0-b71c-21913ddc5a2e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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n+rXQeXmZldzySyGyQM+TZ48mddff534+Hji4uJ45513aNnywrfOzZ49mzFjxrB//35q1qzJhAkTuOGGGxyvp6enM3LkSObMmcOJEyeIjY1l6NChPPTQQ5dcU2pqKsHBwaSkpBAUFFTgtezsbPbt20dsbCw+Pj72hbkZ8ErFy9vxojD6KHj5X/LqnTp1IjU1lQ0bNgDw0ksv8ccff/Dzzz871jl8+DDR0dHs2LGDChUqEB4ezrvvvst999133vt9+OGHPP300xw6dAh/f3sd8+fPp2fPnhw9epTIyEjuuecelixZwp49e3B3dwegd+/euLm5MXPmzELrLPQYi4hI6ZN6FN6KA2suDPwJqrY1t5yLfH//k6lngGbNmsXw4cMZN24cGzZsIC4ujq5du5KYmFjo+itWrKBv377ce++9bNy4kV69etGrVy+2bNniWGf48OEsWLCA6dOns23bNoYNG8aQIUOYO3duSe1Wqdas2dlrs5s3b2bx4sUEBAQ4HnXq1AFgz549bNu2jZycHDp37lzoe23bto24uDhH+AG45pprsNls7Nixw7Gsfv36jvADUKFChQv+jEVExImsnGwPP1WvMT38XC5Th2d98803uf/++xk4cCAAU6ZM4ccff+Tjjz9m5MiR563/1ltv0a1bN0aMGAHAiy++yMKFC3n33XeZMsU+6uyKFSsYMGAAnTp1AuCBBx7ggw8+YM2aNdx0003FsyOefvazMSXN0++yNzk3rKSnp9OzZ08mTJhw3noVKlRg7969V1XeGZ6engXmLRYLNputSN5bRERMknXq7Jhf7R43tZQrYdoZoNzcXNavX0+XLl3OFuPmRpcuXVi5cmWh26xcubLA+gBdu3YtsH7btm2ZO3cuR44cwTAMFi9ezM6dO7n++usvWEtOTg6pqakFHpfFYrFfiirpx1UOMNe0aVP+/vtvYmJiqFGjRoGHv78/NWvWxNfXl0WLFhW6fd26ddm8eTMZGRmOZcuXL8fNzY3atWtfVW0iIlLKrf0IctMhoj7U6PLv65cypgWgpKQkrFaro0HtGZGRkcTHxxe6TXx8/L+u/84771CvXj0qV66Ml5cX3bp1Y/LkyXTocOEB2caPH09wcLDjER0dfRV75jwGDx7MyZMn6du3L2vXrmXPnj38/PPPDBw4EKvVio+PD08//TRPPfUUn332GXv27GHV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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"recon = reconstruct_deltas(model, seq, method=\"expected\")\n",
"compare_lightcurves(test_xy[500], recon)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "15e13353-e166-4fa2-b806-a0b5437034be",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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T55Mfn4+4eHh9OnTh/fee4+jR4+edfyZ73vw4MFs2rSJr7/++qzjSlqCrrvuOpKTk0t1LxYXF/PWW28REBBA7969L6jevLw88vPzS21r1qwZgYGBpa6Bv7//BV37kvNkZmby+++/O7cdPXr0rPc3aNAgrFYrL7zwwlkh8MwWsIrW0LVrV8LDw5k6dWqp9/DDDz+wfft2rr/++gt6HyJm0tQBIm6uefPmXHnllYwaNYqCggImT55M/fr1eeKJJ5zH3H333bz++uv079+fe+65h9TUVKZOnUrbtm3JyspyHufn50ebNm2YOXMmLVu2pF69erRr1+68Y3yGDh3KuHHj8PX15Z577ik11ic7O5uGDRty66230rFjRwICAli0aBFr1qwp1apyoR5//HFuu+02pk2bxv3338+UKVO48sorad++Pffeey9NmzYlJSWFFStWcOjQITZt2uR83uzZs7ntttu4++676dKlC+np6cydO5epU6fSsWNH7rvvPt577z1GjhzJunXriI2NZfbs2SxfvpzJkyc7W6kqaseOHfTr148hQ4bQpk0bPD09+frrr0lJSSnVCtelSxfeffddXnrpJZo3b054eHipsV9lGTZsGE8++SQ333wzDz30EHl5ebz77ru0bNmy1DxWzZs35x//+AcvvvgivXr14pZbbsHHx4c1a9YQHR3NhAkTLqgGLy8vXn75Ze666y569+7N7bff7pw6IDY2lkceeeSCrpGIqcy9GU9EynOuqQP8/f3POvaPt4KX3Lb+6quvGq+99poRExNj+Pj4GL169TI2bdp01vM//fRTo2nTpoa3t7fRqVMnY8GCBWXedv7bb78ZXbp0Mby9vSs8jcDOnTsNwACMX3/9tdS+goIC4/HHHzc6duxoBAYGGv7+/kbHjh2Nd95557znLev6lLDZbEazZs2MZs2aOW+n3717t3HnnXcakZGRhpeXl9GgQQPjhhtuMGbPnl3qucePHzfGjBljNGjQwPD29jYaNmxojBgxwkhLS3Mek5KSYtx1111GaGio4e3tbbRv3974+OOPS53nzO/BH5157dLS0ozRo0cbcXFxhr+/vxEcHGzEx8cbX3zxRannJCcnG9dff70RGBhoAM5b+Mu7DoZhGD/++KPRrl07w9vb22jVqpXx6aefnvXzUuKjjz4yOnfubPj4+Bh169Y1evfubSxc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efv27enQoQPNmjVj6dKl9OvXz8TKRC7ewIEDnZ936NCB+Ph4GjduzBdffME999xjYmWuaeLEiXz++ecsXboUX19fs8txa+e61lX1u1otS9UkNDQUDw8PUlJSSm1PSUkhMjKyzOdERkaWe3zJxws5p7uriutclqZNmxIaGsquXbsuvWgXdTHX2oxzuoPqui4hISG0bNmy1v5cX8p1njRpEhMnTuTHH3+kQ4cOzu36PV22qrjWZams39UKS9XE29ubLl26sHjxYuc2u93O4sWL6dGjR5nP6dGjR6njARYuXOg8vkmTJkRGRpY6Jisri1WrVp3znO6uKq5zWQ4dOsTx48eJioqqnMJd0MVcazPO6Q6q67rk5OSwe/fuWvtzfbHX+ZVXXuHFF19k/vz5dO3atdQ+/Z4uW1Vc67JU2u/qSh8yLuf0+eefGz4+Psa0adOMbdu2Gffdd58REhJiJCcnG4ZhGH/5y1+Mp556ynn88uXLDU9PT2PSpEnG9u3bjfHjx5c5dUBISIjxzTffGL///rtx00031fpbUiv7OmdnZxtjx441VqxYYezdu9dYtGiRcdlllxktWrQw8vPzTXmPNcWFXuuCggJjw4YNxoYNG4yoqChj7NixxoYNG4ydO3dW+Jy1VVVc68cee8xYunSpsXfvXmP58uVGQkKCERoaaqSmplb7+6spLvQ6T5w40fD29jZmz55d6nb17OzsUsfo9/TZKvtaV+XvaoWlavbWW28ZjRo1Mry9vY3u3bsbK1eudO7r3bu3MWLEiFLHf/HFF0bLli0Nb29vo23btsb3339far/dbjeeffZZIyIiwvDx8TH69etnJCUlVcdbqdEq8zrn5eUZ1157rREWFmZ4eXkZjRs3Nu69995a/8e7xIVc67179xrAWY/evXtX+Jy1WWVf66FDhxpRUVGGt7e30aBBA2Po0KHGrl27qvEd1UwXcp0bN25c5nUeP3688xj9nj63yrzWVfm72mIYhnFpbVMiIiIi7ktjlkRERETKobAkIiIiUg6FJREREZFyKCyJiIiIlENhSURERKQcCksiIiIi5VBYEhERESmHwpKIiIhIORSWRETOoU+fPjz88MNmlyEiJlNYEhERESmHljsRESnDyJEjmT59eqlte/fuJTY21pyCRMQ0CksiImXIzMxk4MCBtGvXjhdeeAGAsLAwPDw8TK5MRKqbp9kFiIjURMHBwXh7e1OnTh0iIyPNLkdETKQxSyIiIiLlUFgSERERKYfCkojIOXh7e2Oz2cwuQ0RMprAkInIOsbGxrFq1in379pGWlobdbje7JBExgcKSiMg5jB07Fg8PD9q0aUNYWBgHDhwwuyQRMYGmDhAREREph1qWRERERMqhsCQiIiJSDoUlERERkXIoLImIiIiUQ2FJREREpBwKSyIiIiLlUFgSERERKYfCkoiIiEg5FJZEREREyqGwJCIiIlIOhSURERGRcigsiYiIiJTj/wEiFn97f7BT4QAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"recon = reconstruct_deltas(model, seq, method=\"expected\")\n",
"compare_lightcurves(test_xy[1490], recon)"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "9564e43a-5d09-4d1a-a2bc-f0dc2ea7e665",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"recon = reconstruct_deltas(model, seq, method=\"expected\")\n",
"compare_lightcurves(test_xy[2015], recon)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "6d680d49-8f0e-4ee2-9cdd-c88eb60869c9",
"metadata": {},
"outputs": [],
"source": [
"from star_sketch_rnn import *\n",
"def plot_class_conditioned_curve(model: StarSketchVAE,\n",
" class_id: int,\n",
" *,\n",
" steps: int = 100,\n",
" method: str = \"expected\",\n",
" temperature: float = 0.9,\n",
" alpha: float = 3.0,\n",
" normalize_dir: bool = True,\n",
" margin: bool = False,\n",
" rng_key: jax.Array | None = None,\n",
" title: str | None = None):\n",
" import matplotlib.pyplot as plt\n",
" deltas, x, t = class_conditioned_random_curve(\n",
" model, class_id, steps=steps, method=method, temperature=temperature,\n",
" alpha=alpha, normalize_dir=normalize_dir, margin=margin, rng_key=rng_key\n",
" )\n",
" if title is None:\n",
" title = f\"class {class_id} | method={method} temp={temperature} alpha={alpha}\"\n",
" plt.figure()\n",
" plt.plot(t, x)\n",
" plt.xlabel(\"t\"); plt.ylabel(\"x\"); plt.title(title)\n",
" return deltas, x, t"
]
},
{
"cell_type": "markdown",
"id": "d3adaaa3-b962-4686-9e83-0171c57e304a",
"metadata": {},
"source": [
"### classification head gives easy class based sampling with clearly different shapes for different star types (albeit not very realistic light curves"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "b663fa10-1600-4a01-b54d-492e5b3abdc4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(0, 'GCAS'),\n",
" (1, 'ROT'),\n",
" (2, 'EW'),\n",
" (3, 'DSCT'),\n",
" (4, 'EA'),\n",
" (5, 'EB'),\n",
" (6, 'UV'),\n",
" (7, 'YSO'),\n",
" (8, 'RRab'),\n",
" (9, 'HADS'),\n",
" (10, 'Cepheids'),\n",
" (11, 'RRcd')]"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(enumerate(types))"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "2956ff13-a4b1-4816-820e-71102cbdb209",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"type\n",
"ROT 36716\n",
"GCAS 23635\n",
"DSCT 4885\n",
"EA 3937\n",
"EW 1301\n",
"UV 477\n",
"EB 403\n",
"RRab 332\n",
"YSO 277\n",
"HADS 184\n",
"Cepheids 184\n",
"RRcd 139\n",
"Name: count, dtype: Int64"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"type\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "7516a66d-0c7c-4d3a-8179-10220e9699c5",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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n8exY8fi3//+NyZNmoSDBw+iXbt2OHDgAL766iu0a9furhcvjImJwbfffgutVou2bdsiPj4ev/32W43HidXEx8cHH374IS5cuIDWrVtj9erVOHToEBYvXnzPJ1zU9/sRuP9jfAYMGIDz589j+vTp2L17N3bv3q0f5+npiX79+ul/79u3LwAYHMf11ltvYe3atejduzdefvll3Lx5Ex999BHat29f7x4oi9XYp5GRNC5evChGjx4t3N3dhUajEc2bNxexsbH6UzZrOgX0xIkTIioqSjg4OAg3NzcxYcIEcfjwYQFALF26VAghxLVr10RsbKwIDg4W9vb2QqvVioiICLFmzRr9fA4cOCBGjhwp/P39hUajER4eHiImJsbglOPaVNVV0+P2U21rc6+ns995Wn7V8teuXVvjfO88RX/Hjh0iOjpaaLVaYWNjI1q0aCHGjh1rsK7l5eXixRdfFO7u7kKhUOjrq60GIUS1U5eFEOK3334T3bp1E7a2tsLJyUkMGjRInDhxotpr4+LiRHh4uFCr1aJ58+Zi4cKF4t13373nSwPUZN26daJ///7Cw8NDqNVq4e/vLyZNmiQyMjL00xQXF4tXX31VeHt7C1tbW9GtWzcRHx8vevbsadCG9/peV63D1atX9cMAiNjYWPHdd9+JVq1aCY1GIx566KFqp5nfeTr77TXcrf1q8+WXX4rmzZvrLxVw+zLrM98xY8YIe3v7avPt2bOnaNeuXbXhAQEB4rHHHqu2TnFxcWLixImiSZMmwsHBQYwaNcrgsgcP6o8//hBdu3YVNjY2wt3dXcTGxoq8vDyDaara8s7P7KVLl8Szzz4rAgMDhVqtFt7e3mLChAkGbVibGzduiHHjxgk3Nzfh4OAgoqOjxalTp0RAQIDBJRZqO529Xbt2IjExUURGRgobGxsREBAg/vvf/9ZY952fwaq/zarvPSHq9/34IGr73qvpuy8gIKDapR2EEOLYsWOif//+ws7OTjg7O4tRo0aJzMzMB67N3CmEMPIRk0QSWrZsGcaNG2f0A4PJNCgUCsTGxjZ4L4o5qPqs79+/v8ZLV8hZr169cO3atXs+1pEsE29ZQURERLLB4ENERESyweBDREREssFjfIiIiEg22ONDREREssHgQ0RERLLBCxjeQafTIT09HY6Ojg98awEiIiJqHEII5Ofnw8fHB0pl7f06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+IgGnydZLpVSAZXSPK9srFAooFIAKihgrQJsarhCs4u9iwSVERFZ2FldarUa4eHh2L59u36YTqfD9u3bERkZWeNrNBoNnJycDB5ERERkmSyqxwcApk2bhjFjxuDhhx9G586d8Z///AcFBQX6s7yIiIhIviwu+Dz55JO4evUq3nnnHWRmZqJDhw745Zdfqh3wTERERPJjccEHAKZMmYIpU6ZIXQYRERGZGIs6xoeIiIhMU0n5X9fukvLSFww+REREZHSl5X+FHSkv+cXgQ0RERLLB4ENERESyweBDREREssHgQ0RERLLB4ENERERGZ3jXQekw+BAREZFsMPgQERGR0fk1sdM/11hJFz8YfIiIiMjoFIqanzc2Bh8iIiKSDQYfIiIikg0GHyIiIpINBh8iIiKSDQYfIiIikg0GHyIiIpINBh8iIiKSDQYfIiIikg0GHyIiIpINBh8iIiKSDQYfIiIikg0GHyIiIpINBh8iIiKSDQYfIiIikg0GHyIiIpINBh8iIiKSDQYfIiIiMjohpK6gEoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8REREZnUIhdQWVrKQugIiIiCxfU2db9Apyh51aBTu1dPGDwYeIiIiMTqFQYNm4zlKXwV1dREREJB8MPkRERCQbDD5EREQkG2YTfN5//3107doVdnZ2cHZ2rnGa1NRUPPbYY7Czs4OHhwdef/11lJeXN26hREREZLLM5uDm0tJSDBs2DJGRkViyZEm18RUVFXjsscfg5eWFPXv2ICMjA6NHj4a1tTU++OADCSomIiIiU6MQQgipi7gXy5Ytw9SpU5GTk2MwfMuWLYiJiUF6ejo8PT0BAAsXLsQbb7yBq1evQq1W12v+eXl50Gq1yM3NhZOTU0OXT0REREZQ3+232ezqupv4+Hi0b99eH3oAIDo6Gnl5eTh+/HitryspKUFeXp7Bg4iIiCyTxQSfzMxMg9ADQP97ZmZmra+bPXs2tFqt/uHn52fUOomIiEg6kgafN998EwqFos7HqVOnjFrDjBkzkJubq3+kpaUZdXlEREQkHUkPbn711VcxduzYOqdp3rx5vebl5eWFffv2GQzLysrSj6uNRqOBRqOp1zKIiIjIvEkafNzd3eHu7t4g84qMjMT777+PK1eu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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = plot_class_conditioned_curve(model, class_id=1, steps=100,\n",
" method=\"sample\", alpha=2.0, temperature=0.8)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "f4984477-a2b2-4457-b035-090d7c25c98a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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7OdGR0dj0qRJ+Ouvv/J8SCYlJQF4+Iv15Zdf4r333oOzszMaN26Mjh07ol+/froPkpYtW6J79+6YOnUqZs2ahVatWqFLly54/fXXCw0tuR8E+fWlye2z8LQPi+J6vC8RAF1g8PDwyDNfq9UiKSkJjo6OuHjxIoQQqFKlSr7bLWrYy6+G3DCZuw+uXbsG4OGX4pP8/Pywb98+vfXyq6latWo4evSo3rymTZsWucZcH3zwAf799180atQIlStXRtu2bfH666/rbevBgwcICwvDokWLcOPGDb1+Obnvo8cVZx/k9+WdX3uf1iesJPff82zX3d09zx8jdnZ2+bYdQJHa7+vrC4VCodfnqH79+kVuQ66n/T4+7Xdx//796NixIyIiInR/hHXp0gW2traYOnUqBg0aBH9//wKff+/ePUydOhUrVqxAfHy83rL83kdPqly5cp6fbdWqVQE87B/2ePB52u8gAJw5cwYff/wxduzYkSf0PV5PpUqV9P5YeBYrV67Exx9/jMGDB2P48OFPXf9595UxY/ChAuXk5KBNmza4d+8ePvjgA/j5+cHKygo3btzAgAED9C49HT16NDp16oT169djy5Yt+OSTTxAWFoYdO3agbt26ukH5IiIisGHDBmzZsgWDBg3CN998g4iIiDx9XHLldnq8detWnmW3bt2Cg4NDiR7tAR4eSSjO/Nwvca1WC0mSsHnz5nzXLaiNz/JapeX27dtF6uNjbW2ta0/16tURFRWFjRs34p9//sGaNWswf/58TJo0CVOnTgXw8IjDokWLMHr0aAQFBcHOzg6SJKFPnz75XsJcnH1QUj+Tktx/z7PdZ33/FSa/o7r37t0r0nAQFhYWupD1+O/jk0Hs1q1baNSoUaHb+v777+Hs7JznyPOrr76KKVOm4MCBA4UGn169euHAgQMYP3486tSpA2tra2i1Wrzyyislfin8037eiYmJaNmyJWxtbfHpp5/C19cX5ubmOHr0KD744AO9elJTU4s0do5SqdT1C3vctm3b0K9fP4SEhGDhwoVFqv9pn52PH8kzNQw+JsDJyQm2trZFvqol16lTp3DhwgUsWbJEr/Potm3b8l3f19cX7733Ht577z1cvHgRderUwTfffIOlS5fq1mncuDEaN26MadOmYdmyZejbty9WrFiBIUOG5LvNihUrwsnJKd9RVA8dOoQ6deoU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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = plot_class_conditioned_curve(model, class_id=0, steps=100,\n",
" method=\"sample\", alpha=2.0, temperature=0.8)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment