graxpert 3.2.0a0.dev4__tar.gz → 3.2.0a0.dev5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/PKG-INFO +3 -2
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/README.md +2 -1
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ai_model_handling.py +215 -215
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/astroimage.py +308 -308
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/background_flood_selection.py +240 -240
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/grid_utils.py +38 -38
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/mp_logging.py +97 -97
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/parallel_processing.py +3 -3
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/preferences.py +139 -139
- graxpert-3.2.0a0.dev5/graxpert/s3_secrets.py +8 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui_scaling.py +13 -13
- graxpert-3.2.0a0.dev5/graxpert/version.py +2 -0
- graxpert-3.2.0a0.dev5/graxpert/version.py.bak +2 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert.egg-info/PKG-INFO +3 -2
- graxpert-3.2.0a0.dev5/graxpert.egg-info/SOURCES.txt +80 -0
- graxpert-3.2.0a0.dev5/img/Icon.icns +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/pyproject.toml +7 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/setup.py +8 -3
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/AstroImageRepository.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/AstroImageRepository.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/AstroImageRepository.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-310.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/__init__.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-310.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ai_model_handling.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/app_state.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/app_state.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/app_state.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/astroimage.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/astroimage.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/astroimage.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_extraction.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_extraction.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_extraction.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_flood_selection.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_flood_selection.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_flood_selection.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_grid_selection.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_grid_selection.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/background_grid_selection.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/cmdline_tools.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/cmdline_tools.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/commands.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/commands.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/commands.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/deconvolution.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/deconvolution.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/deconvolution.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/denoising.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/denoising.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/denoising.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/grid_utils.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/grid_utils.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/grid_utils.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/localization.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/localization.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/localization.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/main.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/main.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/main.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/mp_logging.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/mp_logging.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/mp_logging.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/parallel_processing.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/parallel_processing.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/parallel_processing.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/preferences.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/preferences.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/preferences.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/radialbasisinterpolation.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/radialbasisinterpolation.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/radialbasisinterpolation.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/resource_utils.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/resource_utils.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/resource_utils.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/s3_secrets.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/s3_secrets.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/s3_secrets.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/skyall.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/skyall.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/skyall.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/stretch.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/stretch.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/stretch.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ui_scaling.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ui_scaling.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/ui_scaling.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/version.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/version.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/__pycache__/version.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/__init__.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/__init__.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/__init__.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app_events.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app_events.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/app_events.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/eventbus.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/eventbus.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/application/__pycache__/eventbus.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/img/__pycache__/__init__.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/s3_secrets.py +0 -16
- graxpert-3.2.0a0.dev4/graxpert/theme/__pycache__/__init__.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/__init__.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/__init__.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/__init__.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/application_frame.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/application_frame.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/application_frame.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/canvas.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/canvas.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/canvas.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/left_menu.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/left_menu.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/left_menu.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/loadingframe.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/loadingframe.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/loadingframe.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/right_menu.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/right_menu.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/right_menu.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/statusbar.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/statusbar.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/statusbar.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/styling.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/styling.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/styling.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/tooltip.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/tooltip.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/tooltip.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/ui_events.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/ui_events.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/ui_events.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/widgets.cpython-311.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/widgets.cpython-312.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/ui/__pycache__/widgets.cpython-313.pyc +0 -0
- graxpert-3.2.0a0.dev4/graxpert/version.py +0 -2
- graxpert-3.2.0a0.dev4/graxpert/version.py.bak +0 -2
- graxpert-3.2.0a0.dev4/graxpert.egg-info/SOURCES.txt +0 -202
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/MANIFEST.in +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/AstroImageRepository.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/__init__.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/app_state.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/application/__init__.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/application/app.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/application/app_events.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/application/eventbus.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/background_extraction.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/background_grid_selection.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/cmdline_tools.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/commands.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/deconvolution.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/denoising.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/GraXpert_LOGO_Hauptvariante.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/Icon.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/LDN1235_original.jpg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/LDN1235_processed.jpg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/__init__.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/gfx_numbers.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/gfx_numbers.svg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/graXpert_Startbadge_Umbriel.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/img/hourglass.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/locales/__init__.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/locales/base.pot +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/locales/de_DE/LC_MESSAGES/base.mo +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/locales/de_DE/LC_MESSAGES/base.po +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/localization.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/main.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/radialbasisinterpolation.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/resource_utils.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/skyall.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/stretch.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/theme/__init__.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/theme/graxpert-dark-blue.json +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/__init__.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/application_frame.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/canvas.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/left_menu.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/loadingframe.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/right_menu.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/statusbar.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/styling.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/tooltip.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/ui_events.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert/ui/widgets.py +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert.egg-info/dependency_links.txt +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert.egg-info/entry_points.txt +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert.egg-info/requires.txt +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/graxpert.egg-info/top_level.txt +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/Icon.ico +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/Icon.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/NGC7000_original.jpg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/NGC7000_processed.jpg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Ariel.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Ariel.svg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Dione.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Dione.svg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Tethys.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Tethys.svg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Umbriel.png +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/img/graXpert_Startbadge_Umbriel.svg +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/requirements.txt +0 -0
- {graxpert-3.2.0a0.dev4 → graxpert-3.2.0a0.dev5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: graxpert
|
|
3
|
-
Version: 3.2.0a0.
|
|
3
|
+
Version: 3.2.0a0.dev5
|
|
4
4
|
Summary: GraXpert is an astronomical image processing program for extracting and removing gradients in the background of your astrophotos
|
|
5
5
|
Home-page: https://graxpert.com
|
|
6
6
|
Author: GraXpert Development Team
|
|
@@ -69,7 +69,7 @@ Dynamic: summary
|
|
|
69
69
|
</p>
|
|
70
70
|
|
|
71
71
|
# WARNING: This is a test branch/pip build, you probably don't want it yet.
|
|
72
|
-
For the time being you
|
|
72
|
+
For the time being you are better off with the install images from the graxpert
|
|
73
73
|
homepage! for questions regarding this test build contact kevinh@geeksville.com.
|
|
74
74
|
|
|
75
75
|
GraXpert is an astronomical image processing program for extracting and removing
|
|
@@ -97,6 +97,7 @@ We do this via the the python [pypi.org](https://pypi.org/project/graxpert/) rep
|
|
|
97
97
|
|
|
98
98
|
FIXME, recommend directml for windows, FIXME for linux and FIXME for mac
|
|
99
99
|
|
|
100
|
+
* **pip install graxpert\[cpuonly\]** - Use this if you are on OS-X - it is poorly named, but it will still use the CoreML Apple GPU support
|
|
100
101
|
* **pip install graxpert\[cuda\]** - Use this if you have an Nvidia GPU
|
|
101
102
|
* **pip install graxpert\[rocm\]** - Use this if you have an AMD GPU
|
|
102
103
|
* **pip install graxpert\[openvino\]** - Use this if you don't have an advanced GPU or don't know what you have (provides sizable acceleration on most modern Intel CPUs)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
# WARNING: This is a test branch/pip build, you probably don't want it yet.
|
|
6
|
-
For the time being you
|
|
6
|
+
For the time being you are better off with the install images from the graxpert
|
|
7
7
|
homepage! for questions regarding this test build contact kevinh@geeksville.com.
|
|
8
8
|
|
|
9
9
|
GraXpert is an astronomical image processing program for extracting and removing
|
|
@@ -31,6 +31,7 @@ We do this via the the python [pypi.org](https://pypi.org/project/graxpert/) rep
|
|
|
31
31
|
|
|
32
32
|
FIXME, recommend directml for windows, FIXME for linux and FIXME for mac
|
|
33
33
|
|
|
34
|
+
* **pip install graxpert\[cpuonly\]** - Use this if you are on OS-X - it is poorly named, but it will still use the CoreML Apple GPU support
|
|
34
35
|
* **pip install graxpert\[cuda\]** - Use this if you have an Nvidia GPU
|
|
35
36
|
* **pip install graxpert\[rocm\]** - Use this if you have an AMD GPU
|
|
36
37
|
* **pip install graxpert\[openvino\]** - Use this if you don't have an advanced GPU or don't know what you have (provides sizable acceleration on most modern Intel CPUs)
|
|
@@ -1,215 +1,215 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import os
|
|
3
|
-
import sys
|
|
4
|
-
import re
|
|
5
|
-
import shutil
|
|
6
|
-
import zipfile
|
|
7
|
-
|
|
8
|
-
from appdirs import user_data_dir
|
|
9
|
-
from minio import Minio
|
|
10
|
-
from packaging import version
|
|
11
|
-
|
|
12
|
-
try:
|
|
13
|
-
from graxpert.s3_secrets import endpoint, ro_access_key, ro_secret_key
|
|
14
|
-
|
|
15
|
-
client = Minio(endpoint, ro_access_key, ro_secret_key)
|
|
16
|
-
except Exception as e:
|
|
17
|
-
logging.exception(e)
|
|
18
|
-
client = None
|
|
19
|
-
|
|
20
|
-
from graxpert.ui.loadingframe import DynamicProgressThread
|
|
21
|
-
|
|
22
|
-
ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "ai-models")
|
|
23
|
-
bge_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "bge-ai-models")
|
|
24
|
-
|
|
25
|
-
# old ai-models folder exists, rename to 'bge-ai-models'
|
|
26
|
-
if os.path.exists(ai_models_dir):
|
|
27
|
-
logging.warning(f"Older 'ai_models_dir' {ai_models_dir} exists. Renaming to {bge_ai_models_dir} due to introduction of new denoising models in GraXpert 3.")
|
|
28
|
-
try:
|
|
29
|
-
os.rename(ai_models_dir, bge_ai_models_dir)
|
|
30
|
-
except Exception as e:
|
|
31
|
-
logging.error(f"Renaming {ai_models_dir} to {bge_ai_models_dir} failed. {bge_ai_models_dir} will be newly created. Consider deleting obsolete {ai_models_dir} manually.")
|
|
32
|
-
|
|
33
|
-
os.makedirs(bge_ai_models_dir, exist_ok=True)
|
|
34
|
-
|
|
35
|
-
deconvolution_object_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "deconvolution-object-ai-models")
|
|
36
|
-
os.makedirs(deconvolution_object_ai_models_dir, exist_ok=True)
|
|
37
|
-
deconvolution_stars_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "deconvolution-stars-ai-models")
|
|
38
|
-
os.makedirs(deconvolution_stars_ai_models_dir, exist_ok=True)
|
|
39
|
-
denoise_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "denoise-ai-models")
|
|
40
|
-
os.makedirs(denoise_ai_models_dir, exist_ok=True)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
# ui operations
|
|
44
|
-
def list_remote_versions(bucket_name):
|
|
45
|
-
if client is None:
|
|
46
|
-
return []
|
|
47
|
-
try:
|
|
48
|
-
objects = client.list_objects(bucket_name)
|
|
49
|
-
versions = []
|
|
50
|
-
|
|
51
|
-
for o in objects:
|
|
52
|
-
tags = client.get_object_tags(o.bucket_name, o.object_name)
|
|
53
|
-
if tags is not None and "ai-version" in tags:
|
|
54
|
-
versions.append(
|
|
55
|
-
{
|
|
56
|
-
"bucket": o.bucket_name,
|
|
57
|
-
"object": o.object_name,
|
|
58
|
-
"version": tags["ai-version"],
|
|
59
|
-
}
|
|
60
|
-
)
|
|
61
|
-
return versions
|
|
62
|
-
|
|
63
|
-
except Exception as e:
|
|
64
|
-
logging.exception(e)
|
|
65
|
-
finally:
|
|
66
|
-
return versions
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def list_local_versions(ai_models_dir):
|
|
70
|
-
try:
|
|
71
|
-
model_dirs = [
|
|
72
|
-
{"path": os.path.join(ai_models_dir, f), "version": f}
|
|
73
|
-
for f in os.listdir(ai_models_dir)
|
|
74
|
-
if re.search(r"\d\.\d\.\d", f) and len(os.listdir(os.path.join(ai_models_dir, f))) > 0 # match semantic version
|
|
75
|
-
]
|
|
76
|
-
return model_dirs
|
|
77
|
-
except Exception as e:
|
|
78
|
-
logging.exception(e)
|
|
79
|
-
return None
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def latest_version(ai_models_dir, bucket_name):
|
|
83
|
-
try:
|
|
84
|
-
remote_versions = list_remote_versions(bucket_name)
|
|
85
|
-
except Exception as e:
|
|
86
|
-
remote_versions = []
|
|
87
|
-
logging.exception(e)
|
|
88
|
-
try:
|
|
89
|
-
local_versions = list_local_versions(ai_models_dir)
|
|
90
|
-
except Exception as e:
|
|
91
|
-
local_versions = []
|
|
92
|
-
logging.exception(e)
|
|
93
|
-
ai_options = set([])
|
|
94
|
-
ai_options.update([rv["version"] for rv in remote_versions])
|
|
95
|
-
ai_options.update(set([lv["version"] for lv in local_versions]))
|
|
96
|
-
ai_options = sorted(ai_options, key=lambda k: version.parse(k), reverse=True)
|
|
97
|
-
return ai_options[0]
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def ai_model_path_from_version(ai_models_dir, local_version):
|
|
101
|
-
if local_version is None:
|
|
102
|
-
return None
|
|
103
|
-
|
|
104
|
-
return os.path.join(ai_models_dir, local_version, "model.onnx")
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def compute_orphaned_local_versions(ai_models_dir):
|
|
108
|
-
remote_versions = list_remote_versions(ai_models_dir)
|
|
109
|
-
|
|
110
|
-
if remote_versions is None:
|
|
111
|
-
logging.warning("Could not fetch remote versions. Thus, aborting cleaning of local versions in {}. Consider manual cleaning".format(ai_models_dir))
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
local_versions = list_local_versions()
|
|
115
|
-
|
|
116
|
-
if local_versions is None:
|
|
117
|
-
logging.warning("Could not read local versions in {}. Thus, aborting cleaning. Consider manual cleaning".format(ai_models_dir))
|
|
118
|
-
return
|
|
119
|
-
|
|
120
|
-
orphaned_local_versions = [{"path": lv["path"], "version": lv["version"]} for lv in local_versions if lv["version"] not in [rv["version"] for rv in remote_versions]]
|
|
121
|
-
|
|
122
|
-
return orphaned_local_versions
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
def cleanup_orphaned_local_versions(orphaned_local_versions):
|
|
126
|
-
for olv in orphaned_local_versions:
|
|
127
|
-
try:
|
|
128
|
-
shutil.rmtree(olv["path"])
|
|
129
|
-
except Exception as e:
|
|
130
|
-
logging.exception(e)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
def download_version(ai_models_dir, bucket_name, target_version, progress=None):
|
|
134
|
-
try:
|
|
135
|
-
remote_versions = list_remote_versions(bucket_name)
|
|
136
|
-
for r in remote_versions:
|
|
137
|
-
if target_version == r["version"]:
|
|
138
|
-
remote_version = r
|
|
139
|
-
break
|
|
140
|
-
|
|
141
|
-
ai_model_dir = os.path.join(ai_models_dir, "{}".format(remote_version["version"]))
|
|
142
|
-
os.makedirs(ai_model_dir, exist_ok=True)
|
|
143
|
-
|
|
144
|
-
ai_model_file = os.path.join(ai_model_dir, "model.onnx")
|
|
145
|
-
ai_model_zip = os.path.join(ai_model_dir, "model.zip")
|
|
146
|
-
client.fget_object(
|
|
147
|
-
remote_version["bucket"],
|
|
148
|
-
remote_version["object"],
|
|
149
|
-
ai_model_zip,
|
|
150
|
-
progress=DynamicProgressThread(callback=progress),
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
with zipfile.ZipFile(ai_model_zip, "r") as zip_ref:
|
|
154
|
-
zip_ref.extractall(ai_model_dir)
|
|
155
|
-
|
|
156
|
-
if not os.path.isfile(ai_model_file):
|
|
157
|
-
raise ValueError(f"Could not find ai 'model.onnx' file after extracting {ai_model_zip}")
|
|
158
|
-
os.remove(ai_model_zip)
|
|
159
|
-
|
|
160
|
-
except Exception as e:
|
|
161
|
-
# try to delete (rollback) ai_model_dir in case of errors
|
|
162
|
-
logging.exception(e)
|
|
163
|
-
try:
|
|
164
|
-
shutil.rmtree(ai_model_dir)
|
|
165
|
-
except Exception as e2:
|
|
166
|
-
logging.exception(e2)
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
def validate_local_version(ai_models_dir, local_version):
|
|
170
|
-
return os.path.isfile(os.path.join(ai_models_dir, local_version, "model.onnx"))
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
def get_execution_providers_ordered(gpu_acceleration=True):
|
|
174
|
-
if gpu_acceleration:
|
|
175
|
-
supported_providers = [
|
|
176
|
-
(
|
|
177
|
-
"OpenVINOExecutionProvider",
|
|
178
|
-
{
|
|
179
|
-
# per https://onnxruntime.ai/docs/execution-providers/OpenVINO-ExecutionProvider.html#summary-of-options
|
|
180
|
-
# "device_type": "HETERO:GPU,CPU,NPU AUTO:GPU,CPU,NPU MULTI:GPU,CPU,NPU", # Will prefer dGPU, fallback to iGPU, NPU or CPU with extra Intel specific optimizations
|
|
181
|
-
"device_type": "AUTO:GPU,CPU", # Will prefer dGPU, fallback to iGPU, NPU or CPU with extra Intel specific optimizations
|
|
182
|
-
}
|
|
183
|
-
),
|
|
184
|
-
"ROCMExecutionProvider",
|
|
185
|
-
"DmlExecutionProvider",
|
|
186
|
-
(
|
|
187
|
-
"CoreMLExecutionProvider",
|
|
188
|
-
{
|
|
189
|
-
"flags": "COREML_FLAG_CREATE_MLPROGRAM",
|
|
190
|
-
},
|
|
191
|
-
),
|
|
192
|
-
"CUDAExecutionProvider",
|
|
193
|
-
"CPUExecutionProvider",
|
|
194
|
-
]
|
|
195
|
-
else:
|
|
196
|
-
supported_providers = ["CPUExecutionProvider"]
|
|
197
|
-
|
|
198
|
-
result = []
|
|
199
|
-
try:
|
|
200
|
-
import onnxruntime as ort
|
|
201
|
-
available = ort.get_available_providers()
|
|
202
|
-
for provider in supported_providers:
|
|
203
|
-
if isinstance(provider, tuple):
|
|
204
|
-
if provider[0] in available:
|
|
205
|
-
result.append(provider) # Append the entire tuple
|
|
206
|
-
else:
|
|
207
|
-
if provider in available:
|
|
208
|
-
result.append(provider)
|
|
209
|
-
return result
|
|
210
|
-
except Exception as e:
|
|
211
|
-
logging.error("Critical error! The required ONNX Runtime (AI library) package is misconfigured.\n" \
|
|
212
|
-
"Please read the README.md to confirm that you've selected the correct build for your hardware.\n" \
|
|
213
|
-
"If you are using one of our prebuilt executables, please file a bug with the following information:\n"
|
|
214
|
-
"{}".format(e))
|
|
215
|
-
sys.exit(1)
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
import re
|
|
5
|
+
import shutil
|
|
6
|
+
import zipfile
|
|
7
|
+
|
|
8
|
+
from appdirs import user_data_dir
|
|
9
|
+
from minio import Minio
|
|
10
|
+
from packaging import version
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from graxpert.s3_secrets import endpoint, ro_access_key, ro_secret_key
|
|
14
|
+
|
|
15
|
+
client = Minio(endpoint, ro_access_key, ro_secret_key)
|
|
16
|
+
except Exception as e:
|
|
17
|
+
logging.exception(e)
|
|
18
|
+
client = None
|
|
19
|
+
|
|
20
|
+
from graxpert.ui.loadingframe import DynamicProgressThread
|
|
21
|
+
|
|
22
|
+
ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "ai-models")
|
|
23
|
+
bge_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "bge-ai-models")
|
|
24
|
+
|
|
25
|
+
# old ai-models folder exists, rename to 'bge-ai-models'
|
|
26
|
+
if os.path.exists(ai_models_dir):
|
|
27
|
+
logging.warning(f"Older 'ai_models_dir' {ai_models_dir} exists. Renaming to {bge_ai_models_dir} due to introduction of new denoising models in GraXpert 3.")
|
|
28
|
+
try:
|
|
29
|
+
os.rename(ai_models_dir, bge_ai_models_dir)
|
|
30
|
+
except Exception as e:
|
|
31
|
+
logging.error(f"Renaming {ai_models_dir} to {bge_ai_models_dir} failed. {bge_ai_models_dir} will be newly created. Consider deleting obsolete {ai_models_dir} manually.")
|
|
32
|
+
|
|
33
|
+
os.makedirs(bge_ai_models_dir, exist_ok=True)
|
|
34
|
+
|
|
35
|
+
deconvolution_object_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "deconvolution-object-ai-models")
|
|
36
|
+
os.makedirs(deconvolution_object_ai_models_dir, exist_ok=True)
|
|
37
|
+
deconvolution_stars_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "deconvolution-stars-ai-models")
|
|
38
|
+
os.makedirs(deconvolution_stars_ai_models_dir, exist_ok=True)
|
|
39
|
+
denoise_ai_models_dir = os.path.join(user_data_dir(appname="GraXpert"), "denoise-ai-models")
|
|
40
|
+
os.makedirs(denoise_ai_models_dir, exist_ok=True)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# ui operations
|
|
44
|
+
def list_remote_versions(bucket_name):
|
|
45
|
+
if client is None:
|
|
46
|
+
return []
|
|
47
|
+
try:
|
|
48
|
+
objects = client.list_objects(bucket_name)
|
|
49
|
+
versions = []
|
|
50
|
+
|
|
51
|
+
for o in objects:
|
|
52
|
+
tags = client.get_object_tags(o.bucket_name, o.object_name)
|
|
53
|
+
if tags is not None and "ai-version" in tags:
|
|
54
|
+
versions.append(
|
|
55
|
+
{
|
|
56
|
+
"bucket": o.bucket_name,
|
|
57
|
+
"object": o.object_name,
|
|
58
|
+
"version": tags["ai-version"],
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
return versions
|
|
62
|
+
|
|
63
|
+
except Exception as e:
|
|
64
|
+
logging.exception(e)
|
|
65
|
+
finally:
|
|
66
|
+
return versions
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def list_local_versions(ai_models_dir):
|
|
70
|
+
try:
|
|
71
|
+
model_dirs = [
|
|
72
|
+
{"path": os.path.join(ai_models_dir, f), "version": f}
|
|
73
|
+
for f in os.listdir(ai_models_dir)
|
|
74
|
+
if re.search(r"\d\.\d\.\d", f) and len(os.listdir(os.path.join(ai_models_dir, f))) > 0 # match semantic version
|
|
75
|
+
]
|
|
76
|
+
return model_dirs
|
|
77
|
+
except Exception as e:
|
|
78
|
+
logging.exception(e)
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def latest_version(ai_models_dir, bucket_name):
|
|
83
|
+
try:
|
|
84
|
+
remote_versions = list_remote_versions(bucket_name)
|
|
85
|
+
except Exception as e:
|
|
86
|
+
remote_versions = []
|
|
87
|
+
logging.exception(e)
|
|
88
|
+
try:
|
|
89
|
+
local_versions = list_local_versions(ai_models_dir)
|
|
90
|
+
except Exception as e:
|
|
91
|
+
local_versions = []
|
|
92
|
+
logging.exception(e)
|
|
93
|
+
ai_options = set([])
|
|
94
|
+
ai_options.update([rv["version"] for rv in remote_versions])
|
|
95
|
+
ai_options.update(set([lv["version"] for lv in local_versions]))
|
|
96
|
+
ai_options = sorted(ai_options, key=lambda k: version.parse(k), reverse=True)
|
|
97
|
+
return ai_options[0]
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def ai_model_path_from_version(ai_models_dir, local_version):
|
|
101
|
+
if local_version is None:
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
return os.path.join(ai_models_dir, local_version, "model.onnx")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def compute_orphaned_local_versions(ai_models_dir):
|
|
108
|
+
remote_versions = list_remote_versions(ai_models_dir)
|
|
109
|
+
|
|
110
|
+
if remote_versions is None:
|
|
111
|
+
logging.warning("Could not fetch remote versions. Thus, aborting cleaning of local versions in {}. Consider manual cleaning".format(ai_models_dir))
|
|
112
|
+
return
|
|
113
|
+
|
|
114
|
+
local_versions = list_local_versions()
|
|
115
|
+
|
|
116
|
+
if local_versions is None:
|
|
117
|
+
logging.warning("Could not read local versions in {}. Thus, aborting cleaning. Consider manual cleaning".format(ai_models_dir))
|
|
118
|
+
return
|
|
119
|
+
|
|
120
|
+
orphaned_local_versions = [{"path": lv["path"], "version": lv["version"]} for lv in local_versions if lv["version"] not in [rv["version"] for rv in remote_versions]]
|
|
121
|
+
|
|
122
|
+
return orphaned_local_versions
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def cleanup_orphaned_local_versions(orphaned_local_versions):
|
|
126
|
+
for olv in orphaned_local_versions:
|
|
127
|
+
try:
|
|
128
|
+
shutil.rmtree(olv["path"])
|
|
129
|
+
except Exception as e:
|
|
130
|
+
logging.exception(e)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def download_version(ai_models_dir, bucket_name, target_version, progress=None):
|
|
134
|
+
try:
|
|
135
|
+
remote_versions = list_remote_versions(bucket_name)
|
|
136
|
+
for r in remote_versions:
|
|
137
|
+
if target_version == r["version"]:
|
|
138
|
+
remote_version = r
|
|
139
|
+
break
|
|
140
|
+
|
|
141
|
+
ai_model_dir = os.path.join(ai_models_dir, "{}".format(remote_version["version"]))
|
|
142
|
+
os.makedirs(ai_model_dir, exist_ok=True)
|
|
143
|
+
|
|
144
|
+
ai_model_file = os.path.join(ai_model_dir, "model.onnx")
|
|
145
|
+
ai_model_zip = os.path.join(ai_model_dir, "model.zip")
|
|
146
|
+
client.fget_object(
|
|
147
|
+
remote_version["bucket"],
|
|
148
|
+
remote_version["object"],
|
|
149
|
+
ai_model_zip,
|
|
150
|
+
progress=DynamicProgressThread(callback=progress),
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
with zipfile.ZipFile(ai_model_zip, "r") as zip_ref:
|
|
154
|
+
zip_ref.extractall(ai_model_dir)
|
|
155
|
+
|
|
156
|
+
if not os.path.isfile(ai_model_file):
|
|
157
|
+
raise ValueError(f"Could not find ai 'model.onnx' file after extracting {ai_model_zip}")
|
|
158
|
+
os.remove(ai_model_zip)
|
|
159
|
+
|
|
160
|
+
except Exception as e:
|
|
161
|
+
# try to delete (rollback) ai_model_dir in case of errors
|
|
162
|
+
logging.exception(e)
|
|
163
|
+
try:
|
|
164
|
+
shutil.rmtree(ai_model_dir)
|
|
165
|
+
except Exception as e2:
|
|
166
|
+
logging.exception(e2)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def validate_local_version(ai_models_dir, local_version):
|
|
170
|
+
return os.path.isfile(os.path.join(ai_models_dir, local_version, "model.onnx"))
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def get_execution_providers_ordered(gpu_acceleration=True):
|
|
174
|
+
if gpu_acceleration:
|
|
175
|
+
supported_providers = [
|
|
176
|
+
(
|
|
177
|
+
"OpenVINOExecutionProvider",
|
|
178
|
+
{
|
|
179
|
+
# per https://onnxruntime.ai/docs/execution-providers/OpenVINO-ExecutionProvider.html#summary-of-options
|
|
180
|
+
# "device_type": "HETERO:GPU,CPU,NPU AUTO:GPU,CPU,NPU MULTI:GPU,CPU,NPU", # Will prefer dGPU, fallback to iGPU, NPU or CPU with extra Intel specific optimizations
|
|
181
|
+
"device_type": "AUTO:GPU,CPU", # Will prefer dGPU, fallback to iGPU, NPU or CPU with extra Intel specific optimizations
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
"ROCMExecutionProvider",
|
|
185
|
+
"DmlExecutionProvider",
|
|
186
|
+
(
|
|
187
|
+
"CoreMLExecutionProvider",
|
|
188
|
+
{
|
|
189
|
+
"flags": "COREML_FLAG_CREATE_MLPROGRAM",
|
|
190
|
+
},
|
|
191
|
+
),
|
|
192
|
+
"CUDAExecutionProvider",
|
|
193
|
+
"CPUExecutionProvider",
|
|
194
|
+
]
|
|
195
|
+
else:
|
|
196
|
+
supported_providers = ["CPUExecutionProvider"]
|
|
197
|
+
|
|
198
|
+
result = []
|
|
199
|
+
try:
|
|
200
|
+
import onnxruntime as ort
|
|
201
|
+
available = ort.get_available_providers()
|
|
202
|
+
for provider in supported_providers:
|
|
203
|
+
if isinstance(provider, tuple):
|
|
204
|
+
if provider[0] in available:
|
|
205
|
+
result.append(provider) # Append the entire tuple
|
|
206
|
+
else:
|
|
207
|
+
if provider in available:
|
|
208
|
+
result.append(provider)
|
|
209
|
+
return result
|
|
210
|
+
except Exception as e:
|
|
211
|
+
logging.error("Critical error! The required ONNX Runtime (AI library) package is misconfigured.\n" \
|
|
212
|
+
"Please read the README.md to confirm that you've selected the correct build for your hardware.\n" \
|
|
213
|
+
"If you are using one of our prebuilt executables, please file a bug with the following information:\n"
|
|
214
|
+
"{}".format(e))
|
|
215
|
+
sys.exit(1)
|