Source code for isaaclab.utils.version

# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Utility functions for versioning."""

from __future__ import annotations

import functools
from packaging.version import Version


[docs]@functools.lru_cache(maxsize=1) def get_isaac_sim_version() -> Version: """Get the Isaac Sim version as a Version object, cached for performance. This function wraps :func:`isaacsim.core.version.get_version()` and caches the result to avoid repeated file I/O operations. The underlying Isaac Sim function reads from a file each time it's called, which can be slow when called frequently. Returns: A :class:`packaging.version.Version` object representing the Isaac Sim version. This object supports rich comparison operators (<, <=, >, >=, ==, !=). Example: >>> from isaaclab.utils import get_isaac_sim_version >>> from packaging.version import Version >>> >>> isaac_version = get_isaac_sim_version() >>> print(isaac_version) 5.0.0 >>> >>> # Natural version comparisons >>> if isaac_version >= Version("5.0.0"): ... print("Using Isaac Sim 5.0 or later") >>> >>> # Access components >>> print(isaac_version.major, isaac_version.minor, isaac_version.micro) 5 0 0 """ from isaacsim.core.version import get_version version_tuple = get_version() # version_tuple[2] = major (year), [3] = minor (release), [4] = micro (patch) return Version(f"{version_tuple[2]}.{version_tuple[3]}.{version_tuple[4]}")
[docs]def compare_versions(v1: str, v2: str) -> int: """Compare two version strings and return the comparison result. The version strings are expected to be in the format "x.y.z" where x, y, and z are integers. The version strings are compared lexicographically. .. note:: This function is provided for backward compatibility. For new code, prefer using :class:`packaging.version.Version` objects directly with comparison operators (``<``, ``<=``, ``>``, ``>=``, ``==``, ``!=``). Args: v1: The first version string. v2: The second version string. Returns: An integer indicating the comparison result: - :attr:`1` if v1 is greater - :attr:`-1` if v2 is greater - :attr:`0` if v1 and v2 are equal Example: >>> from isaaclab.utils import compare_versions >>> compare_versions("5.0.0", "4.5.0") 1 >>> compare_versions("4.5.0", "5.0.0") -1 >>> compare_versions("5.0.0", "5.0.0") 0 >>> >>> # Better: use Version objects directly >>> from packaging.version import Version >>> Version("5.0.0") > Version("4.5.0") True """ ver1 = Version(v1) ver2 = Version(v2) if ver1 > ver2: return 1 elif ver1 < ver2: return -1 else: return 0