Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """Generate a small official-PyTorch oracle for host Gaussian activation math. | |
| The neural Gaussian decoder emits 480 raw features per octree point. The browser | |
| then applies the official ElasticGaussianFixedlenDecoder representation semantics | |
| on the host. This fixture calls the upstream ``_build_gaussians`` implementation | |
| directly, without loading decoder weights, so TypeScript tests are gated against | |
| the numerical source of truth rather than a second handwritten formula. | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import copy | |
| import json | |
| import sys | |
| from pathlib import Path | |
| import numpy as np | |
| from decoder_onnx_common import import_official_triposplat, source_commit | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument("--triposplat-repo", type=Path, required=True) | |
| parser.add_argument("--output", type=Path, required=True) | |
| parser.add_argument("--seed", type=int, default=20260715) | |
| parser.add_argument("--point-count", type=int, default=2) | |
| return parser.parse_args() | |
| def main() -> None: | |
| args = parse_args() | |
| if args.point_count <= 0: | |
| raise ValueError("--point-count must be positive") | |
| import torch | |
| upstream = import_official_triposplat(args.triposplat_repo) | |
| model_module = sys.modules.get("model") | |
| if model_module is None: | |
| raise RuntimeError("Official model.py was not loaded") | |
| decoder_type = model_module.ElasticGaussianFixedlenDecoder | |
| class ActivationOracle(torch.nn.Module): | |
| _calc_layout = decoder_type._calc_layout | |
| _build_perturbation = decoder_type._build_perturbation | |
| _get_offset = decoder_type._get_offset | |
| def __init__(self) -> None: | |
| super().__init__() | |
| self.rep_config = copy.deepcopy(upstream.GS_DECODER_ARGS["representation_config"]) | |
| self.use_learned_offset_scale = True | |
| self.use_per_offset = True | |
| self._calc_layout() | |
| self._build_perturbation() | |
| rng = np.random.default_rng(args.seed) | |
| points = rng.uniform(0.05, 0.95, size=(1, args.point_count, 3)).astype(np.float32) | |
| features = rng.normal(0.0, 2.0, size=(1, args.point_count, 480)).astype(np.float32) | |
| # Exercise stable softplus/sigmoid branches and non-trivial quaternion lanes. | |
| probes = np.asarray([-32.0, -12.0, -2.0, 0.0, 2.0, 12.0, 32.0], dtype=np.float32) | |
| flat = features.reshape(-1) | |
| flat[: probes.size] = probes | |
| flat[192 : 192 + probes.size] = probes | |
| flat[416 : 416 + probes.size] = probes | |
| flat[448 : 448 + probes.size] = probes | |
| oracle = ActivationOracle() | |
| with torch.no_grad(): | |
| gaussian = upstream._build_gaussians( | |
| oracle, | |
| {"points": torch.from_numpy(points)}, | |
| {"features": torch.from_numpy(features)}, | |
| )[0] | |
| payload = { | |
| "source": { | |
| "repository": "https://github.com/VAST-AI-Research/TripoSplat", | |
| "commit": source_commit(args.triposplat_repo), | |
| "function": "triposplat._build_gaussians", | |
| }, | |
| "settings": { | |
| "seed": args.seed, | |
| "point_count": args.point_count, | |
| "gaussians_per_point": 32, | |
| "feature_width": 480, | |
| }, | |
| "inputs": { | |
| "points": points.reshape(-1).tolist(), | |
| "features": features.reshape(-1).tolist(), | |
| }, | |
| "expected": { | |
| "positions": gaussian.get_xyz.detach().cpu().float().reshape(-1).tolist(), | |
| "scales": gaussian.get_scaling.detach().cpu().float().reshape(-1).tolist(), | |
| "rotations": ( | |
| gaussian._rotation + gaussian.rots_bias[None, :] | |
| ).detach().cpu().float().reshape(-1).tolist(), | |
| "opacities": gaussian.get_opacity.detach().cpu().float().reshape(-1).tolist(), | |
| "spherical_harmonics": ( | |
| gaussian._features_dc[:, 0, :] | |
| ).detach().cpu().float().reshape(-1).tolist(), | |
| }, | |
| } | |
| destination = args.output.expanduser().resolve() | |
| destination.parent.mkdir(parents=True, exist_ok=True) | |
| destination.write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8") | |
| print(f"Wrote {destination}") | |
| if __name__ == "__main__": | |
| main() | |