UFM / UniCeption /setup.py
infinity1096
initial commit
c8b42eb
"""Package installation setup."""
import os
import subprocess
import sys
from pathlib import Path
from setuptools import find_packages, setup
from setuptools.command.develop import develop
from setuptools.command.install import install
def install_croco_rope():
"""Install CroCo RoPE extension."""
try:
curope_path = Path(__file__).parent / "uniception" / "models" / "libs" / "croco" / "curope"
if curope_path.exists():
print("Installing CroCo RoPE extension...")
original_cwd = os.getcwd()
try:
os.chdir(curope_path)
subprocess.check_call([sys.executable, "setup.py", "build_ext", "--inplace"])
print("CroCo RoPE extension installed successfully!")
return True
except subprocess.CalledProcessError as e:
print(f"Warning: Failed to install CroCo RoPE extension: {e}")
print("You can install it later by running:")
print(f"cd {curope_path} && python setup.py build_ext --inplace")
return False
finally:
os.chdir(original_cwd)
else:
print("Warning: CroCo RoPE source code not found.")
return False
except Exception as e:
print(f"Warning: Error during CroCo RoPE installation: {e}")
return False
def check_dependencies():
"""Check if optional dependencies are available."""
try:
import torch
print(f"PyTorch version: {torch.__version__}")
if torch.cuda.is_available():
print(f"CUDA available: {torch.version.cuda}")
else:
print("CUDA not available")
except ImportError:
print("PyTorch not installed")
try:
import xformers
print(f"XFormers version: {xformers.__version__}")
except ImportError:
print("XFormers not installed")
try:
from uniception.models.libs.croco.curope import cuRoPE2D
print("CroCo RoPE extension available")
except ImportError:
print("CroCo RoPE extension not available")
class CustomDevelopCommand(develop):
"""Custom development installation command."""
def run(self):
develop.run(self)
# Only install CroCo RoPE if explicitly requested
if os.getenv("INSTALL_CROCO_ROPE", "false").lower() in ("true", "1", "yes"):
install_croco_rope()
class CustomInstallCommand(install):
"""Custom installation command."""
def run(self):
install.run(self)
# Only install CroCo RoPE if explicitly requested
if os.getenv("INSTALL_CROCO_ROPE", "false").lower() in ("true", "1", "yes"):
install_croco_rope()
class CrocoInstallCommand(install):
"""Install command that includes CroCo RoPE extension."""
def run(self):
install.run(self)
install_croco_rope()
class CheckDependenciesCommand(install):
"""Command to check available dependencies."""
def run(self):
check_dependencies()
# Core dependencies (including PyTorch which is essential for UniCeption)
install_requires = [
"numpy",
"torch",
"torchvision",
"torchaudio",
"timm",
"black",
"jaxtyping",
"matplotlib",
"Pillow",
"scikit-learn",
"einops",
"rerun-sdk",
"pre-commit",
"minio",
"pytest",
"isort",
]
# Optional dependencies
extras_require = {
"xformers": [
"xformers", # Will be installed from PyTorch wheel index
],
"dev": [
"black",
"isort",
"pre-commit",
"pytest",
],
"minimal": [
# Minimal dependencies for basic functionality without PyTorch
"numpy",
"matplotlib",
"Pillow",
"scikit-learn",
"einops",
],
}
# All optional dependencies combined (excluding minimal since it's subset of install_requires)
extras_require["all"] = list(set(extras_require["xformers"] + extras_require["dev"]))
setup(
name="uniception",
version="0.1.0",
description="Generalizable Perception Stack for 3D, 4D, spatial AI and scene understanding",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
author="AirLab",
license="BSD Clause-3",
packages=find_packages(),
package_dir={"": "."},
include_package_data=True,
python_requires=">=3.10",
install_requires=install_requires,
extras_require=extras_require,
cmdclass={
"develop": CustomDevelopCommand,
"install": CustomInstallCommand,
"install_croco": CrocoInstallCommand,
"check_deps": CheckDependenciesCommand,
},
entry_points={
"console_scripts": [
"uniception-download-checkpoints=scripts.download_checkpoints:main",
"uniception-validate=scripts.validate_installation:main",
"uniception-prepare-offline=scripts.prepare_offline_install:main",
"uniception-check-deps=scripts.check_dependencies:main",
"uniception-install-croco=scripts.install_croco_rope:main",
],
},
classifiers=[
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Python Modules",
],
keywords="computer-vision, 3d-vision, spatial-ai, perception, deep-learning, pytorch",
)