93 lines
2.6 KiB
Python
93 lines
2.6 KiB
Python
import importlib
|
|
from packaging.version import Version
|
|
|
|
import pandas as pd
|
|
|
|
import shapely
|
|
import shapely.geos
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# pandas compat
|
|
# -----------------------------------------------------------------------------
|
|
|
|
PANDAS_GE_14 = Version(pd.__version__) >= Version("1.4.0rc0")
|
|
PANDAS_GE_15 = Version(pd.__version__) >= Version("1.5.0")
|
|
PANDAS_GE_20 = Version(pd.__version__) >= Version("2.0.0")
|
|
PANDAS_GE_202 = Version(pd.__version__) >= Version("2.0.2")
|
|
PANDAS_GE_21 = Version(pd.__version__) >= Version("2.1.0")
|
|
PANDAS_GE_22 = Version(pd.__version__) >= Version("2.2.0")
|
|
PANDAS_GE_30 = Version(pd.__version__) >= Version("3.0.0.dev0")
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Shapely / GEOS compat
|
|
# -----------------------------------------------------------------------------
|
|
|
|
SHAPELY_GE_204 = Version(shapely.__version__) >= Version("2.0.4")
|
|
|
|
GEOS_GE_390 = shapely.geos.geos_version >= (3, 9, 0)
|
|
GEOS_GE_310 = shapely.geos.geos_version >= (3, 10, 0)
|
|
|
|
|
|
def import_optional_dependency(name: str, extra: str = ""):
|
|
"""
|
|
Import an optional dependency.
|
|
|
|
Adapted from pandas.compat._optional::import_optional_dependency
|
|
|
|
Raises a formatted ImportError if the module is not present.
|
|
|
|
Parameters
|
|
----------
|
|
name : str
|
|
The module name.
|
|
extra : str
|
|
Additional text to include in the ImportError message.
|
|
Returns
|
|
-------
|
|
module
|
|
"""
|
|
msg = """Missing optional dependency '{name}'. {extra} "
|
|
"Use pip or conda to install {name}.""".format(
|
|
name=name, extra=extra
|
|
)
|
|
|
|
if not isinstance(name, str):
|
|
raise ValueError(
|
|
"Invalid module name: '{name}'; must be a string".format(name=name)
|
|
)
|
|
|
|
try:
|
|
module = importlib.import_module(name)
|
|
|
|
except ImportError:
|
|
raise ImportError(msg) from None
|
|
|
|
return module
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# pyproj compat
|
|
# -----------------------------------------------------------------------------
|
|
try:
|
|
import pyproj # noqa: F401
|
|
|
|
HAS_PYPROJ = True
|
|
|
|
except ImportError as err:
|
|
HAS_PYPROJ = False
|
|
pyproj_import_error = str(err)
|
|
|
|
|
|
def requires_pyproj(func):
|
|
def wrapper(*args, **kwargs):
|
|
if not HAS_PYPROJ:
|
|
raise ImportError(
|
|
f"The 'pyproj' package is required for {func.__name__} to work. "
|
|
"Install it and initialize the object with a CRS before using it."
|
|
f"\nImporting pyproj resulted in: {pyproj_import_error}"
|
|
)
|
|
return func(*args, **kwargs)
|
|
|
|
return wrapper
|