# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 """Factory helpers for building predefined skeleton variants.""" from pathlib import Path from ardy.assets import SKELETONS_ROOT from .definitions import ( CoreSkeleton27, G1Skeleton34, SOMASkeleton30, SOMASkeleton77, ) def build_skeleton(nbjoints: int, assets_folder: str | Path = SKELETONS_ROOT): """Instantiate a known skeleton class from its joint count. Supported joint counts: 30 (SOMA compact), 34 (G1), 77 (SOMA full). Args: nbjoints: Number of joints expected in the skeleton representation. assets_folder: Base skeleton-assets directory containing per-skeleton subfolders. Returns: A configured `SkeletonBase` subclass instance. Raises: ValueError: If `nbjoints` does not match a registered skeleton. """ assets_folder = Path(assets_folder) if nbjoints == 34: return G1Skeleton34(assets_folder / "g1skel34") elif nbjoints == 30: return SOMASkeleton30(assets_folder / "somaskel30") elif nbjoints == 77: return SOMASkeleton77(assets_folder / "somaskel77") elif nbjoints == 27: return CoreSkeleton27(assets_folder / "cskel27") else: raise ValueError("This skeleton is not recognized.")