Spaces:
Runtime error
Runtime error
| # ! /usr/bin/python | |
| # -*- coding: utf-8 -*- | |
| # Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| """Setup for pip package.""" | |
| import codecs | |
| import importlib.util | |
| import os | |
| import subprocess | |
| from distutils import cmd as distutils_cmd | |
| from distutils import log as distutils_log | |
| from itertools import chain | |
| import setuptools | |
| spec = importlib.util.spec_from_file_location('package_info', 'nemo/package_info.py') | |
| package_info = importlib.util.module_from_spec(spec) | |
| spec.loader.exec_module(package_info) | |
| __contact_emails__ = package_info.__contact_emails__ | |
| __contact_names__ = package_info.__contact_names__ | |
| __description__ = package_info.__description__ | |
| __download_url__ = package_info.__download_url__ | |
| __homepage__ = package_info.__homepage__ | |
| __keywords__ = package_info.__keywords__ | |
| __license__ = package_info.__license__ | |
| __package_name__ = package_info.__package_name__ | |
| __repository_url__ = package_info.__repository_url__ | |
| __version__ = package_info.__version__ | |
| with open("README.md", "r", encoding='utf-8') as fh: | |
| long_description = fh.read() | |
| long_description_content_type = "text/markdown" | |
| ############################################################################### | |
| # Dependency Loading # | |
| # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # | |
| def req_file(filename, folder="requirements"): | |
| files = [filename] if not isinstance(filename, list) else filename | |
| ans = [] | |
| for file in files: | |
| with open(os.path.join(folder, file), encoding='utf-8') as f: | |
| ans.extend(list(map(str.strip, f.readlines()))) | |
| return ans | |
| install_requires = req_file("requirements.txt") | |
| extras_require = { | |
| # User packages | |
| 'test': req_file("requirements_test.txt"), | |
| 'run': req_file("requirements_run.txt"), | |
| # Lightning Collections Packages | |
| 'core': req_file(["requirements_lightning.txt"]), | |
| 'lightning': req_file(["requirements_lightning.txt"]), | |
| 'common-only': req_file('requirements_common.txt'), | |
| # domain packages | |
| 'asr-only': req_file("requirements_asr.txt"), | |
| 'ctc_segmentation': req_file("requirements.txt", folder="tools/ctc_segmentation"), | |
| 'nlp-only': req_file("requirements_nlp.txt"), | |
| 'tts': req_file("requirements_tts.txt"), | |
| 'slu': req_file("requirements_slu.txt"), | |
| 'multimodal-only': req_file("requirements_multimodal.txt"), | |
| 'audio': req_file("requirements_audio.txt"), | |
| } | |
| extras_require['all'] = list(chain(val for key, val in extras_require.items())) | |
| # Add lightning requirements as needed | |
| extras_require['common'] = extras_require['common-only'] | |
| extras_require['common'] = list( | |
| chain( | |
| extras_require['common'], | |
| extras_require['core'], | |
| ) | |
| ) | |
| extras_require['test'] = list( | |
| chain( | |
| extras_require['test'], | |
| extras_require['tts'], | |
| extras_require['common'], | |
| ) | |
| ) | |
| extras_require['asr'] = extras_require['asr-only'] | |
| extras_require['asr'] = list( | |
| chain( | |
| extras_require['asr'], | |
| extras_require['ctc_segmentation'], | |
| extras_require['common'], | |
| ) | |
| ) | |
| extras_require['nlp'] = extras_require['nlp-only'] | |
| extras_require['nlp'] = list( | |
| chain( | |
| extras_require['nlp'], | |
| extras_require['common'], | |
| ) | |
| ) | |
| extras_require['llm'] = extras_require['nlp'] | |
| extras_require['tts'] = list( | |
| chain( | |
| extras_require['tts'], | |
| extras_require['asr'], | |
| extras_require['common'], | |
| ) | |
| ) | |
| extras_require['multimodal'] = extras_require['multimodal-only'] | |
| extras_require['multimodal'] = list( | |
| chain( | |
| extras_require['multimodal'], | |
| extras_require['nlp'], | |
| extras_require['common'], | |
| ) | |
| ) | |
| extras_require['audio'] = list( | |
| chain( | |
| extras_require['audio'], | |
| extras_require['common'], | |
| ) | |
| ) | |
| extras_require['slu'] = list( | |
| chain( | |
| extras_require['slu'], | |
| extras_require['asr'], | |
| ) | |
| ) | |
| ############################################################################### | |
| # Code style checkers # | |
| # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # | |
| class StyleCommand(distutils_cmd.Command): | |
| __ISORT_BASE = 'isort' | |
| __BLACK_BASE = 'black' | |
| description = 'Checks overall project code style.' | |
| user_options = [ | |
| ('scope=', None, 'Folder of file to operate within.'), | |
| ('fix', None, 'True if tries to fix issues in-place.'), | |
| ] | |
| def __call_checker(self, base_command, scope, check): | |
| command = list(base_command) | |
| command.append(scope) | |
| if check: | |
| command.extend(['--check', '--diff']) | |
| self.announce( | |
| msg='Running command: %s' % str(' '.join(command)), | |
| level=distutils_log.INFO, | |
| ) | |
| return_code = subprocess.call(command) | |
| return return_code | |
| def _isort(self, scope, check): | |
| return self.__call_checker( | |
| base_command=self.__ISORT_BASE.split(), | |
| scope=scope, | |
| check=check, | |
| ) | |
| def _black(self, scope, check): | |
| return self.__call_checker( | |
| base_command=self.__BLACK_BASE.split(), | |
| scope=scope, | |
| check=check, | |
| ) | |
| def _pass(self): | |
| self.announce(msg='\033[32mPASS\x1b[0m', level=distutils_log.INFO) | |
| def _fail(self): | |
| self.announce(msg='\033[31mFAIL\x1b[0m', level=distutils_log.INFO) | |
| # noinspection PyAttributeOutsideInit | |
| def initialize_options(self): | |
| self.scope = '.' | |
| self.fix = '' | |
| def run(self): | |
| scope, check = self.scope, not self.fix | |
| isort_return = self._isort(scope=scope, check=check) | |
| black_return = self._black(scope=scope, check=check) | |
| if isort_return == 0 and black_return == 0: | |
| self._pass() | |
| else: | |
| self._fail() | |
| exit(isort_return if isort_return != 0 else black_return) | |
| def finalize_options(self): | |
| pass | |
| ############################################################################### | |
| setuptools.setup( | |
| name=__package_name__, | |
| # Versions should comply with PEP440. For a discussion on single-sourcing | |
| # the version across setup.py and the project code, see | |
| # https://packaging.python.org/en/latest/single_source_version.html | |
| version=__version__, | |
| description=__description__, | |
| long_description=long_description, | |
| long_description_content_type=long_description_content_type, | |
| # The project's main homepage. | |
| url=__repository_url__, | |
| download_url=__download_url__, | |
| # Author details | |
| author=__contact_names__, | |
| author_email=__contact_emails__, | |
| # maintainer Details | |
| maintainer=__contact_names__, | |
| maintainer_email=__contact_emails__, | |
| # The licence under which the project is released | |
| license=__license__, | |
| classifiers=[ | |
| # How mature is this project? Common values are | |
| # 1 - Planning | |
| # 2 - Pre-Alpha | |
| # 3 - Alpha | |
| # 4 - Beta | |
| # 5 - Production/Stable | |
| # 6 - Mature | |
| # 7 - Inactive | |
| 'Development Status :: 5 - Production/Stable', | |
| # Indicate who your project is intended for | |
| 'Intended Audience :: Developers', | |
| 'Intended Audience :: Science/Research', | |
| 'Intended Audience :: Information Technology', | |
| # Indicate what your project relates to | |
| 'Topic :: Scientific/Engineering', | |
| 'Topic :: Scientific/Engineering :: Mathematics', | |
| 'Topic :: Scientific/Engineering :: Image Recognition', | |
| 'Topic :: Scientific/Engineering :: Artificial Intelligence', | |
| 'Topic :: Software Development :: Libraries', | |
| 'Topic :: Software Development :: Libraries :: Python Modules', | |
| 'Topic :: Utilities', | |
| # Pick your license as you wish (should match "license" above) | |
| 'License :: OSI Approved :: Apache Software License', | |
| # Supported python versions | |
| 'Programming Language :: Python :: 3', | |
| 'Programming Language :: Python :: 3.10', | |
| # Additional Setting | |
| 'Environment :: Console', | |
| 'Natural Language :: English', | |
| 'Operating System :: OS Independent', | |
| ], | |
| packages=setuptools.find_packages(), | |
| python_requires='>=3.10', | |
| install_requires=install_requires, | |
| # List additional groups of dependencies here (e.g. development | |
| # dependencies). You can install these using the following syntax, | |
| # $ pip install -e ".[all]" | |
| # $ pip install nemo_toolkit[all] | |
| extras_require=extras_require, | |
| # Add in any packaged data. | |
| include_package_data=True, | |
| exclude=['tools', 'tests'], | |
| package_data={'': ['*.tsv', '*.txt', '*.far', '*.fst', '*.cpp', 'Makefile']}, | |
| zip_safe=False, | |
| # PyPI package information. | |
| keywords=__keywords__, | |
| # Custom commands. | |
| cmdclass={'style': StyleCommand}, | |
| entry_points={ | |
| "nemo_run.cli": [ | |
| "llm = nemo.collections.llm", | |
| ], | |
| }, | |
| ) | |