{"record":{"id":"e734b50fb8d0fc11","repo":"Genesis-Embodied-AI/genesis-world","slug":"pygel3d-is-not-supported-on-linux-arm-aarch64","errorCode":null,"errorMessage":"pygel3d is not supported on Linux ARM (aarch64).","messagePattern":"pygel3d is not supported on Linux ARM \\(aarch64\\)\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"genesis/utils/hybrid.py","lineNumber":19,"sourceCode":"import hashlib\nimport os\nimport platform\nimport sys\nimport time\nfrom itertools import combinations\n\nimport networkx as nx\nimport numpy as np\nfrom matplotlib.patches import FancyArrowPatch\n\nimport genesis as gs\n\nfrom .misc import get_gel_cache_dir\n\n\ndef load_hmesh(fpath: str):\n    if sys.platform == \"linux\" and platform.machine() == \"aarch64\":\n        raise ImportError(\"pygel3d is not supported on Linux ARM (aarch64).\")\n    from pygel3d import hmesh\n\n    return hmesh.load(fpath)\n\n\ndef trimesh_to_gelmesh(tmesh):\n    if sys.platform == \"linux\" and platform.machine() == \"aarch64\":\n        raise ImportError(\"pygel3d is not supported on Linux ARM (aarch64).\")\n    from pygel3d import hmesh\n\n    return hmesh.Manifold.from_triangles(vertices=tmesh.vertices, faces=tmesh.faces)\n\n\ndef get_gel_path(positions, nodes, sampling):\n    hasher = hashlib.sha256()\n    hasher.update(positions.tobytes())\n    hasher.update(nodes.tobytes())\n    hasher.update(str(sampling).encode())","sourceCodeStart":1,"sourceCodeEnd":37,"githubUrl":"https://github.com/Genesis-Embodied-AI/genesis-world/blob/56e4aa5d82bdb83f2e532e4cc364cb69527acb06/genesis/utils/hybrid.py#L1-L37","documentation":"load_hmesh loads a mesh file into a pygel3d Manifold, but pygel3d ships no Linux aarch64 wheels and its build fails on that platform, so Genesis refuses upfront with an ImportError instead of crashing during the native import. The check is platform.machine() == 'aarch64' combined with sys.platform == 'linux'. Any mesh loading through this helper on Linux ARM raises immediately.","triggerScenarios":"Calling genesis.utils.hybrid.load_hmesh(path) on a Linux aarch64 machine (e.g. AWS Graviton, Raspberry Pi 5, ARM CI runners, NVIDIA Grace, Apple Rosetta-free ARM containers).","commonSituations":"Running Genesis soft-body/hybrid workflow examples or rigid-from-soft instantiation on Graviton instances or ARM docker images; also hitting it in CI after the runner was migrated to ARM.","solutions":["Run the workload on an x86_64 Linux host or container (e.g. docker --platform linux/amd64 with qemu emulation).","Use an alternative mesh path that avoids pygel3d (load with trimesh-based morphs/options if available for your use case).","Build pygel3d from source for aarch64 if you have a toolchain, then patch out the guard."],"exampleFix":"# before (fails on linux/aarch64)\nm = load_hmesh('model.obj')\n# after\ntmesh = trimesh.load('model.obj')  # trimesh works on aarch64; avoid pygel3d-dependent paths","handlingStrategy":"fallback","validationCode":"import sys, platform\nIS_LINUX_ARM = sys.platform == 'linux' and platform.machine() == 'aarch64'\nif IS_LINUX_ARM:\n    raise SystemExit('pygel3d mesh loading unsupported on linux/aarch64; use x86_64 or trimesh')","typeGuard":null,"tryCatchPattern":"try:\n    m = load_hmesh(path)\nexcept ImportError as e:\n    if 'aarch64' in str(e):\n        m = None  # fall back to trimesh-based path\n    else:\n        raise","preventionTips":["Check platform.machine() before running pygel3d-dependent pipelines on shared/CI infra.","Run heavy geometry pipelines in amd64 containers on ARM hosts."],"tags":["genesis","pygel3d","platform-support","linux-arm","import-error"],"backgroundTag":"unsupported-platform-architecture","analyzedSha":"56e4aa5d82bdb83f2e532e4cc364cb69527acb06","analyzedAt":"2026-08-28T15:15:07.922Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}