Skip to content

_state

All singletons in one place: R packages and stored environment. This is the ONLY module with global mutable state.

Attributes

_brms = None module-attribute

_cmdstanr = None module-attribute

_rstan = None module-attribute

_base = None module-attribute

_posterior = None module-attribute

_stored_env = None module-attribute

Classes

StoredEnv dataclass

Captured R environment used for deactivation/restoration.

Attributes:

Name Type Description
lib_paths list[str]

.libPaths() values captured before activation.

cmdstan_path str or None

CmdStan path captured before activation.

Source code in brmspy/types/runtime.py
@dataclass
class StoredEnv:
    """
    Captured R environment used for deactivation/restoration.

    Attributes
    ----------
    lib_paths : list[str]
        `.libPaths()` values captured before activation.
    cmdstan_path : str or None
        CmdStan path captured before activation.
    """

    lib_paths: list[str]
    cmdstan_path: str | None

Attributes

lib_paths instance-attribute
cmdstan_path instance-attribute

Functions

__init__(lib_paths, cmdstan_path)

Functions

get_brms()

Get brms R package, importing on first access.

Source code in brmspy/_runtime/_state.py
def get_brms() -> Any:
    """Get brms R package, importing on first access."""
    global _brms
    if _brms is None:
        try:
            from rpy2.robjects.packages import importr
            import rpy2.robjects as ro

            _brms = importr("brms")
            ro.r("library(brms)")
        except Exception as e:
            raise ImportError(
                "brms R package not found. Install it using:\n\n"
                "  import brmspy\n"
                "  brmspy.install_brms(use_prebuilt=True)  # for prebuilt binaries\n\n"
                "Or install from source:\n"
                "  brmspy.install_brms()\n"
            ) from e
    return _brms

get_cmdstanr()

Get cmdstanr R package or None if not available.

Source code in brmspy/_runtime/_state.py
def get_cmdstanr() -> Any | None:
    """Get cmdstanr R package or None if not available."""
    global _cmdstanr
    if _cmdstanr is None:
        try:
            from rpy2.robjects.packages import importr

            _cmdstanr = importr("cmdstanr")
        except Exception:
            pass
    return _cmdstanr

get_rstan()

Get rstan R package or None if not available.

Source code in brmspy/_runtime/_state.py
def get_rstan() -> Any | None:
    """Get rstan R package or None if not available."""
    global _rstan
    if _rstan is None:
        try:
            from rpy2.robjects.packages import importr

            _rstan = importr("rstan")
        except Exception:
            pass
    return _rstan

get_base()

Get base R package.

Source code in brmspy/_runtime/_state.py
def get_base() -> Any:
    """Get base R package."""
    global _base
    if _base is None:
        from rpy2.robjects.packages import importr

        _base = importr("base")
    return _base

get_posterior()

Get posterior R package.

Source code in brmspy/_runtime/_state.py
def get_posterior() -> Any:
    """Get posterior R package."""
    global _posterior
    if _posterior is None:
        from rpy2.robjects.packages import importr

        _posterior = importr("posterior")
    return _posterior

invalidate_packages()

Clear all cached package singletons.

Source code in brmspy/_runtime/_state.py
def invalidate_packages() -> None:
    """Clear all cached package singletons."""
    global _brms, _cmdstanr, _rstan, _base, _posterior
    _brms = None
    _cmdstanr = None
    _rstan = None
    _base = None
    _posterior = None

capture_current_env()

Capture current R environment (lib_paths, cmdstan_path).

Source code in brmspy/_runtime/_state.py
def capture_current_env() -> StoredEnv:
    """Capture current R environment (lib_paths, cmdstan_path)."""
    return StoredEnv(
        lib_paths=_r_env.get_lib_paths(),
        cmdstan_path=_r_env.get_cmdstan_path(),
    )

store_env(env)

Store environment for later restoration.

Source code in brmspy/_runtime/_state.py
def store_env(env: StoredEnv) -> None:
    """Store environment for later restoration."""
    if ".brmspy/runtime/" in env.lib_paths or ".brmspy\\runtime\\" in env.lib_paths:
        return
    global _stored_env
    _stored_env = env

get_stored_env()

Get stored environment or None.

Source code in brmspy/_runtime/_state.py
def get_stored_env() -> StoredEnv | None:
    """Get stored environment or None."""
    return _stored_env

clear_stored_env()

Clear stored environment.

Source code in brmspy/_runtime/_state.py
def clear_stored_env() -> None:
    """Clear stored environment."""
    global _stored_env
    _stored_env = None

has_stored_env()

Check if environment is stored (i.e., runtime is active).

Source code in brmspy/_runtime/_state.py
def has_stored_env() -> bool:
    """Check if environment is stored (i.e., runtime is active)."""
    return _stored_env is not None