[metadata]
name = aesara
author = aesara-devs
author_email = aesara.devs@gmail.com
description = Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
long_description = file: DESCRIPTION.txt
long_description_content_type = text/x-rst
url = https://github.com/aesara-devs/aesara
license = BSD
platforms =
    Windows
    Linux
    Solaris
    Mac OS-X
    Unix
classifiers =
    Development Status :: 6 - Mature
    Intended Audience :: Education
    Intended Audience :: Science/Research
    Intended Audience :: Developers
    License :: OSI Approved :: BSD License
    Programming Language :: Python
    Topic :: Software Development :: Code Generators
    Topic :: Software Development :: Compilers
    Topic :: Scientific/Engineering :: Mathematics
    Operating System :: Microsoft :: Windows
    Operating System :: POSIX
    Operating System :: Unix
    Operating System :: MacOS
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.7
    Programming Language :: Python :: 3.8
    Programming Language :: Python :: 3.9
keywords =
    aesara
    math
    numerical
    symbolic
    blas
    numpy
    autodiff
    differentiation

[options]
packages = find:
python_requires = >=3.7
install_requires =
    numpy >=1.17.0
    scipy >=0.14
    filelock
    etuples
    logical-unification
    miniKanren
    cons
    typing_extensions
    setuptools >=48.0.0

[options.packages.find]
exclude =
    tests
    tests.*

[options.entry_points]
console_scripts =
    aesara-cache = bin.aesara_cache:main

[options.package_data]
* =
    *.txt
    *.rst
    *.cu
    *.cuh
    *.c
    *.sh
    *.pkl
    *.h
    *.cpp
    ChangeLog
    c_code/*
aesara =
    py.typed
aesara.misc =
    *.sh
aesara.d3viz =
    html/*
    css/*
    js/*

[flake8]
select = C,E,F,W
ignore = E203,E231,E501,E741,W503,W504,C901
max-line-length = 88
per-file-ignores =
    **/__init__.py:F401,E402,F403
    aesara/tensor/linalg.py:F401,F403
    aesara/scalar/basic_scipy.py:E402,F403,F401
    aesara/graph/toolbox.py:E402,F403,F401
    aesara/link/jax/jax_dispatch.py:E402,F403,F401
    aesara/link/jax/jax_linker.py:E402,F403,F401
    aesara/sparse/sandbox/sp2.py:F401
    tests/tensor/test_math_scipy.py:E402
    tests/sparse/test_basic.py:E402
    tests/sparse/test_opt.py:E402
    tests/sparse/test_sp2.py:E402
    tests/sparse/test_utils.py:E402,F401
    tests/sparse/sandbox/test_sp.py:E402,F401
    tests/scalar/test_basic_sympy.py:E402
    aesara/graph/rewriting/unify.py:F811
exclude =
    versioneer.py
    doc/
    aesara/_version.py

[coverage:run]
omit =
    aesara/_version.py
    tests/*
    aesara/assert_op.py
    aesara/graph/opt.py
    aesara/graph/opt_utils.py
    aesara/graph/optdb.py
    aesara/graph/kanren.py
    aesara/graph/unify.py
    aesara/link/jax/jax_linker.py
    aesara/link/jax/jax_dispatch.py
    aesara/graph/toolbox.py
    aesara/scalar/basic_scipy.py
branch = True
relative_files = true

[coverage:report]
omit =
    aesara/_version.py
    tests/*
exclude_lines =
    pragma: no cover
    if TYPE_CHECKING:
show_missing = 1

[versioneer]
VCS = git
style = pep440
versionfile_source = aesara/_version.py
versionfile_build = aesara/_version.py
tag_prefix = rel-

[tool:pytest]
addopts = --durations=50
testpaths = tests/

[pylint]
max-line-length = 88

[pylint.messages_control]
disable = C0330, C0326

[isort]
profile = black
lines_after_imports = 2
lines_between_sections = 1
honor_noqa = True
skip_gitignore = True
skip = aesara/version.py
skip_glob = **/*.pyx

[mypy]
ignore_missing_imports = True
no_implicit_optional = True
check_untyped_defs = False
strict_equality = True
warn_redundant_casts = True
warn_unused_configs = True
warn_unused_ignores = True
warn_return_any = True
warn_no_return = False
warn_unreachable = True
show_error_codes = True
allow_redefinition = False
files = aesara,tests
plugins = numpy.typing.mypy_plugin

[mypy-versioneer]
check_untyped_defs = False

[mypy-doc.*]
ignore_errors = True
check_untyped_defs = False

[mypy-setup]
ignore_errors = True
check_untyped_defs = False

[mypy-tests.*]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara._version]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.mode]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.builders]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.sharedvalue]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.compilelock]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.function.pfunc]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.function.types]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.compile.debugmode]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.type]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.var]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.basic]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.elemwise]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.math]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.rewriting.basic]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.rewriting.shape]
warn_unused_ignores = False

[mypy-aesara.tensor.rewriting.elemwise]
warn_unused_ignores = False

[mypy-aesara.tensor.subtensor]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.shape]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.extra_ops]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.type_other]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.blas]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.blas_headers]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.slinalg]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.sharedvar]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.rewriting.math]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.blas_c]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.random.op]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.random.basic]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.random.utils]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.link.numba.dispatch.extra_ops]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.link.numba.dispatch.elemwise]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.link.numba.dispatch.random]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.link.jax.dispatch]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.raise_op]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.nnet.conv3d2d]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.nnet.neighbours]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.nnet.abstract_conv]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.tensor.nnet.ctc]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.sandbox.*]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.ifelse]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.typed_list.*]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.sparse.basic]
ignore_errors = True
check_untyped_defs = False

[mypy-aesara.sparse.sharedvar]
ignore_errors = True
check_untyped_defs = False