# Copyright The PyTorch Lightning team.
#
# 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.

[tool:pytest]
norecursedirs =
    .git
    dist
    build
python_files =
    test_*.py
# doctest_plus = disabled
addopts =
    --strict
    --doctest-modules
    --color=yes
markers =
    slow
    remote_data
    filterwarnings
    gpus_param_tests
junit_duration_report = call


[coverage:report]
exclude_lines =
    pragma: no-cover
    warnings
    pass
    rank_zero_warn
    raise NotImplementedError

# TODO: figure out how to get codecov to pick up the test results on these backends
#  The actual coverage for each is 90%+
# *metrics (94%+) are temporarily removed from testing while tests speed up
omit =
    pytorch_lightning/accelerators/ddp_*.py
    pytorch_lightning/accelerators/ddp2_*.py
    pytorch_lightning/accelerators/dp_*.py
    pytorch_lightning/accelerators/tpu_*.py
    pytorch_lightning/cluster_environments/*.py
    pytorch_lightning/utilities/xla_device_utils.py
    pytorch_lightning/utilities/distributed.py
    pytorch_lightning/tuner/auto_gpu_select.py
    # TODO: temporary, until accelerator refactor is finished
    pytorch_lightning/accelerators/accelerator.py
    pytorch_lightning/plugins/training_type/*.py
    pytorch_lightning/plugins/precision/*.py
    pytorch_lightning/plugins/base_plugin.py


[flake8]
# TODO: this should be 88 or 100 according PEP8
max-line-length = 120
exclude =
    .tox,
    *.egg
    build
    temp

select = E,W,F
doctests = True
verbose = 2
# https://pep8.readthedocs.io/en/latest/intro.html#error-codes
format = pylint
ignore =
    E731  # do not assign a lambda expression, use a def
    W503  # line break before binary operator
    # because of YAPF - till https://github.com/google/yapf/issues/897 is resolved
    E231  # missing whitespace after ',', ';', or ':'; for black


# setup.cfg or tox.ini
[check-manifest]
ignore =
    *.yml
    .github
    .github/*
    .circleci


[metadata]
license_file = LICENSE
# long_description = file:README.md
# long_description_content_type = text/markdown


[pydocstyle]
convention = pep257
# D104, D107: Ignore missing docstrings in __init__ files and methods.
# D202: Ignore a blank line after docstring (collision with Python Black in decorators)
add-ignore = D104,D107,D202
max-line-length = 120


[yapf]
based_on_style = pep8
spaces_before_comment = 2
split_before_logical_operator = true
split_before_arithmetic_operator = true
COLUMN_LIMIT = 120
COALESCE_BRACKETS = true
DEDENT_CLOSING_BRACKETS = true
ALLOW_SPLIT_BEFORE_DICT_VALUE = false
BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true
NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS = false


[mypy]
# Typing tests is low priority, but enabling type checking on the
# untyped test functions (using `--check-untyped-defs`) is still
# high-value because it helps test the typing.
files = pytorch_lightning, pl_examples, benchmarks, tests
disallow_untyped_defs = True
ignore_missing_imports = True
show_error_codes = True
warn_redundant_casts = True
warn_unused_configs = True
warn_unused_ignores = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.callbacks.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.core.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.loggers.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.metrics.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.overrides.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.plugins.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.profiler.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.pt_overrides.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.root_module.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.trainer.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.distributed.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.tuner.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pytorch_lightning.utilities.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-pl_examples.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-benchmarks.*]
ignore_errors = True

# todo: add proper typing to this module...
[mypy-tests.*]
ignore_errors = True