Spaces:
Sleeping
Sleeping
# 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. | |
import os | |
import re | |
from distutils.core import setup | |
import numpy as np | |
from setuptools import find_packages, Extension | |
from Cython.Build import cythonize # this line should be after 'from setuptools import find_packages' | |
here = os.path.abspath(os.path.dirname(__file__)) | |
def _load_req(file: str): | |
with open(file, 'r', encoding='utf-8') as f: | |
return [line.strip() for line in f.readlines() if line.strip()] | |
requirements = _load_req('requirements.txt') | |
_REQ_PATTERN = re.compile('^requirements-([a-zA-Z0-9_]+)\\.txt$') | |
group_requirements = { | |
item.group(1): _load_req(item.group(0)) | |
for item in [_REQ_PATTERN.fullmatch(reqpath) for reqpath in os.listdir()] if item | |
} | |
def find_pyx(path=None): | |
path = path or os.path.join(here, 'lzero') | |
pyx_files = [] | |
for root, dirs, filenames in os.walk(path): | |
for fname in filenames: | |
if fname.endswith('.pyx'): | |
pyx_files.append(os.path.join(root, fname)) | |
path = os.path.join(here, 'zoo') | |
for root, dirs, filenames in os.walk(path): | |
for fname in filenames: | |
if fname.endswith('.pyx'): | |
pyx_files.append(os.path.join(root, fname)) | |
return pyx_files | |
def find_cython_extensions(path=None): | |
extensions = [] | |
for item in find_pyx(path): | |
relpath = os.path.relpath(os.path.abspath(item), start=here) | |
rpath, _ = os.path.splitext(relpath) | |
extname = '.'.join(rpath.split(os.path.sep)) | |
extensions.append(Extension( | |
extname, [item], | |
include_dirs=[np.get_include()], | |
language="c++", | |
# extra_compile_args=["/std:c++latest"], # only for Windows | |
# extra_link_args=["/std:c++latest"], # only for Windows | |
)) | |
return extensions | |
_LINETRACE = not not os.environ.get('LINETRACE', None) | |
setup( | |
name='LightZero', | |
version='0.0.3', | |
description='A lightweight and efficient MCTS/AlphaZero/MuZero algorithm toolkits.', | |
long_description_content_type='text/markdown', | |
author='opendilab', | |
author_email='[email protected]', | |
url='https://github.com/opendilab/LightZero', | |
license='Apache License, Version 2.0', | |
keywords='Reinforcement Learning, MCTS, MuZero', | |
packages=[ | |
# framework | |
*find_packages(include=('lzero', "lzero.*")), | |
# application zoo | |
*find_packages(include=('zoo', 'zoo.*')), | |
], | |
package_data={ | |
package_name: ['*.yaml'] | |
for package_name in find_packages(include=('lzero.*',)) | |
}, | |
python_requires=">=3.7", | |
install_requires=requirements, | |
tests_require=group_requirements['test'], | |
extras_require=group_requirements, | |
ext_modules=cythonize( | |
find_cython_extensions(), | |
language_level=3, | |
compiler_directives=dict( | |
linetrace=_LINETRACE, | |
), | |
), | |
classifiers=[ | |
'Development Status :: 5 - Production/Stable', | |
"Intended Audience :: Science/Research", | |
'License :: OSI Approved :: Apache Software License', | |
'Operating System :: POSIX :: Linux', | |
# 'Operating System :: Microsoft :: Windows', | |
'Operating System :: MacOS :: MacOS X', | |
'Programming Language :: Python :: 3.7', | |
'Programming Language :: Python :: 3.8', | |
'Programming Language :: Python :: 3.9', | |
'Programming Language :: Python :: 3.10', | |
'Topic :: Scientific/Engineering :: Artificial Intelligence', | |
], | |
) | |