setup.py 3.2 KB
Newer Older
Louis Martin's avatar
Louis Martin committed
1
#!/usr/bin/env python3
2
# Copyright (c) Facebook, Inc. and its affiliates.
Sergey Edunov's avatar
Sergey Edunov committed
3
#
4
5
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
Sergey Edunov's avatar
Sergey Edunov committed
6
7

from setuptools import setup, find_packages, Extension
8
from torch.utils import cpp_extension
Sergey Edunov's avatar
Sergey Edunov committed
9
10
11
12
13
14
import sys


if sys.version_info < (3,):
    sys.exit('Sorry, Python3 is required for fairseq.')

Myle Ott's avatar
Myle Ott committed
15

Sergey Edunov's avatar
Sergey Edunov committed
16
17
18
with open('README.md') as f:
    readme = f.read()

Myle Ott's avatar
Myle Ott committed
19

20
if sys.platform == 'darwin':
21
    extra_compile_args = ['-stdlib=libc++', '-O3']
22
else:
23
    extra_compile_args = ['-std=c++11', '-O3']
Sergey Edunov's avatar
Sergey Edunov committed
24

25

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class NumpyExtension(Extension):
    """Source: https://stackoverflow.com/a/54128391"""

    def __init__(self, *args, **kwargs):
        self.__include_dirs = []
        super().__init__(*args, **kwargs)

    @property
    def include_dirs(self):
        import numpy
        return self.__include_dirs + [numpy.get_include()]

    @include_dirs.setter
    def include_dirs(self, dirs):
        self.__include_dirs = dirs


Myle Ott's avatar
Myle Ott committed
43
44
45
46
47
48
49
extensions = [
    Extension(
        'fairseq.libbleu',
        sources=[
            'fairseq/clib/libbleu/libbleu.cpp',
            'fairseq/clib/libbleu/module.cpp',
        ],
50
        extra_compile_args=extra_compile_args,
Myle Ott's avatar
Myle Ott committed
51
    ),
52
    NumpyExtension(
Myle Ott's avatar
Myle Ott committed
53
54
55
        'fairseq.data.data_utils_fast',
        sources=['fairseq/data/data_utils_fast.pyx'],
        language='c++',
56
        extra_compile_args=extra_compile_args,
Myle Ott's avatar
Myle Ott committed
57
    ),
58
    NumpyExtension(
Myle Ott's avatar
Myle Ott committed
59
60
61
62
63
        'fairseq.data.token_block_utils_fast',
        sources=['fairseq/data/token_block_utils_fast.pyx'],
        language='c++',
        extra_compile_args=extra_compile_args,
    ),
64
65
66
67
68
69
    cpp_extension.CppExtension(
        'fairseq.libnat',
        sources=[
            'fairseq/clib/libnat/edit_dist.cpp',
        ],
    )
Myle Ott's avatar
Myle Ott committed
70
]
71
72


Sergey Edunov's avatar
Sergey Edunov committed
73
74
setup(
    name='fairseq',
Myle Ott's avatar
Myle Ott committed
75
    version='0.8.0',
Sergey Edunov's avatar
Sergey Edunov committed
76
    description='Facebook AI Research Sequence-to-Sequence Toolkit',
Myle Ott's avatar
Myle Ott committed
77
78
79
    url='https://github.com/pytorch/fairseq',
    classifiers=[
        'Intended Audience :: Science/Research',
80
        'License :: OSI Approved :: MIT License',
Bairen Yi's avatar
Bairen Yi committed
81
        'Programming Language :: Python :: 3.5',
Myle Ott's avatar
Myle Ott committed
82
83
84
        'Programming Language :: Python :: 3.6',
        'Topic :: Scientific/Engineering :: Artificial Intelligence',
    ],
Sergey Edunov's avatar
Sergey Edunov committed
85
    long_description=readme,
Myle Ott's avatar
Myle Ott committed
86
    long_description_content_type='text/markdown',
87
88
    setup_requires=[
        'cython',
Myle Ott's avatar
Myle Ott committed
89
        'numpy',
90
91
        'setuptools>=18.0',
    ],
Myle Ott's avatar
Myle Ott committed
92
93
    install_requires=[
        'cffi',
Naman Goyal's avatar
Naman Goyal committed
94
        'cython',
Myle Ott's avatar
Myle Ott committed
95
        'fastBPE',
Myle Ott's avatar
Myle Ott committed
96
        'numpy',
Myle Ott's avatar
Myle Ott committed
97
        'regex',
Myle Ott's avatar
Myle Ott committed
98
        'sacrebleu',
Myle Ott's avatar
Myle Ott committed
99
        'torch',
Myle Ott's avatar
Myle Ott committed
100
101
102
        'tqdm',
    ],
    packages=find_packages(exclude=['scripts', 'tests']),
Myle Ott's avatar
Myle Ott committed
103
    ext_modules=extensions,
Myle Ott's avatar
Myle Ott committed
104
    test_suite='tests',
Myle Ott's avatar
Myle Ott committed
105
106
    entry_points={
        'console_scripts': [
Myle Ott's avatar
Myle Ott committed
107
108
109
110
111
            'fairseq-eval-lm = fairseq_cli.eval_lm:cli_main',
            'fairseq-generate = fairseq_cli.generate:cli_main',
            'fairseq-interactive = fairseq_cli.interactive:cli_main',
            'fairseq-preprocess = fairseq_cli.preprocess:cli_main',
            'fairseq-score = fairseq_cli.score:main',
Myle Ott's avatar
Myle Ott committed
112
113
            'fairseq-train = fairseq_cli.train:cli_main',
            'fairseq-validate = fairseq_cli.validate:cli_main',
Myle Ott's avatar
Myle Ott committed
114
115
        ],
    },
116
    cmdclass={'build_ext': cpp_extension.BuildExtension},
117
    zip_safe=False,
Sergey Edunov's avatar
Sergey Edunov committed
118
)