napistu.utils.optional

Utilities for handling optional dependencies in Napistu.

This module provides lazy loading functionality for optional dependencies, allowing the package to be imported even when optional dependencies are not installed. It includes logging configuration to prevent import-time side effects from noisy packages.

Function Factories

create_package_importer:

Create a cached package importer function.

import_package:

Import a package with pre-configured logging to avoid side effects.

require_package:

Decorator to ensure a package is available before calling a function.

Convenience Functions

import_anndata:

Import and return anndata, raising an informative error if missing.

import_beautifulsoup:

Import and return bs4, raising an informative error if missing.

import_gseapy:

Import and return gseapy, raising an informative error if missing.

import_libsbml:

Import and return libsbml, raising an informative error if missing.

import_mudata:

Import and return mudata, raising an informative error if missing.

import_omnipath:

Import and return omnipath, raising an informative error if missing.

import_omnipath_interactions:

Import and return omnipath.interactions, raising an informative error if missing.

import_statsmodels:

Import and return statsmodels, raising an informative error if missing.

import_statsmodels_multitest:

Import and return statsmodels.stats.multitest.multipletests, raising an informative error if missing.

Decorators

require_anndata:

Decorator ensuring anndata is available before calling a function.

require_beautifulsoup:

Decorator ensuring bs4 is available before calling a function.

require_gseapy:

Decorator ensuring gseapy is available before calling a function.

require_libsbml:

Decorator ensuring libsbml is available before calling a function.

require_mudata:

Decorator ensuring mudata is available before calling a function.

require_omnipath:

Decorator ensuring omnipath is available before calling a function.

require_statsmodels:

Decorator ensuring statsmodels is available before calling a function.

Functions

create_package_importer(package_name)

Create a cached package importer function.

import_anndata()

import_beautifulsoup()

import_gseapy()

import_libsbml()

import_mudata()

import_omnipath()

import_omnipath_interactions()

import_package(package_name)

Import a package with pre-configured logging to avoid side effects.

import_statsmodels()

import_statsmodels_multitest()

require_anndata(func)

require_beautifulsoup(func)

require_gseapy(func)

require_libsbml(func)

require_mudata(func)

require_omnipath(func)

require_package(package_name)

Decorator to ensure a package is available before calling a function.

require_statsmodels(func)

napistu.utils.optional._configure_package_logging(package_name: str) Any

Configure logging for a package before import to prevent pollution.

Parameters:

package_name (str) – Name of the package to configure logging for.

Returns:

Original logging level that was configured, or None if no configuration was needed.

Return type:

Any

napistu.utils.optional._restore_logging(package_name: str, original_level: Any) None

Restore original logging configuration after import.

Parameters:
  • package_name (str) – Name of the package that was imported.

  • original_level (Any) – Original logging level to restore, or None if no restoration is needed.

napistu.utils.optional.create_package_importer(package_name: str)

Create a cached package importer function.

This creates a function that lazily imports and caches a package. The cache ensures the package is only imported once per Python session.

Parameters:

package_name (str) – Name of the package to create an importer for.

Returns:

A cached function that returns the imported package.

Return type:

Callable

napistu.utils.optional.import_anndata()
napistu.utils.optional.import_beautifulsoup()
napistu.utils.optional.import_gseapy()
napistu.utils.optional.import_libsbml()
napistu.utils.optional.import_mudata()
napistu.utils.optional.import_omnipath()
napistu.utils.optional.import_omnipath_interactions()
napistu.utils.optional.import_package(package_name: str) Any

Import a package with pre-configured logging to avoid side effects.

This function handles optional dependencies by: 1. Configuring logging to prevent import-time noise 2. Importing the package 3. Restoring original logging configuration 4. Providing helpful error messages if the package is missing

Parameters:

package_name (str) – Name of the package to import (e.g., “omnipath”, “gseapy”).

Returns:

The imported package module.

Return type:

Any

Raises:

ImportError – If the package cannot be imported, with a helpful message about which extras can satisfy the dependency if the package is in PACKAGE_TO_EXTRA.

napistu.utils.optional.import_statsmodels()
napistu.utils.optional.import_statsmodels_multitest()
napistu.utils.optional.require_anndata(func: _F) _F
napistu.utils.optional.require_beautifulsoup(func: _F) _F
napistu.utils.optional.require_gseapy(func: _F) _F
napistu.utils.optional.require_libsbml(func: _F) _F
napistu.utils.optional.require_mudata(func: _F) _F
napistu.utils.optional.require_omnipath(func: _F) _F
napistu.utils.optional.require_package(package_name: str)

Decorator to ensure a package is available before calling a function.

Use this decorator for functions that require an optional dependency. The package will be imported (with proper logging configuration) when the function is called, not at import time.

Parameters:

package_name (str) – Name of the package that must be available.

Returns:

A decorator function.

Return type:

Callable

Examples

>>> @require_package("omnipath")
>>> def process_omnipath_data():
...     # Uses omnipath
...     pass
napistu.utils.optional.require_statsmodels(func: _F) _F