# Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
#
version: 2.0

references:

  install_deps: &install_deps
    run:
      name: Install Dependences
      command: |
        sudo apt-get update && sudo apt-get install -y cmake
        pip install "$TORCH_VERSION"
        pip install -r requirements.txt -q
        sudo pip install pytest pytest-cov pytest-flake8 -q
        pip install -r ./tests/requirements-devel.txt -q

  tests: &tests
   run:
     name: Testing
     command: |
       python --version ; pip --version ; pip list
       py.test pytorch_lightning tests -v --doctest-modules --junitxml=test-reports/pytest_junit.xml
     no_output_timeout: 30m

  examples: &examples
   run:
     name: PL Examples
     command: |
       pip install -r ./pl_examples/requirements.txt --user
       python --version ; pip --version ; pip list
       py.test pl_examples -v --doctest-modules --junitxml=test-reports/pytest_junit.xml
     no_output_timeout: 20m

  install_pkg: &install_pkg
    run:
      name: Install package
      command: |
        virtualenv vEnv ; source vEnv/bin/activate
        pip install --editable . ; cd .. & python -c "import pytorch_lightning ; print(pytorch_lightning.__version__)"
        deactivate ; rm -rf vEnv

  create_pkg: &create_pkg
    run:
      name: Create package
      command: |
        sudo pip install twine==1.13.0
        python setup.py sdist
        twine check dist/*
        python setup.py clean

  format: &format
   run:
     name: Formatting
     command: |
       python --version ; pip --version
       sudo pip install flake8 -q
       pip list
       flake8 .

  make_docs: &make_docs
   run:
     name: Make Documentation
     command: |
       # sudo apt-get install pandoc
       sudo apt-get update && sudo apt-get install -y cmake
       pip install -r requirements.txt --user
       sudo pip install -r docs/requirements.txt
       pip install -r requirements-extra.txt --user  # for doctesting loggers etc.
       # sphinx-apidoc -o ./docs/source ./pytorch_lightning **/test_* --force --follow-links
       cd docs; make clean; make html --debug --jobs 2 SPHINXOPTS="-W"
       make doctest; make coverage

jobs:

  Build-Docs:
    docker:
      - image: circleci/python:3.7
    steps:
      - checkout
      - *make_docs
      - store_artifacts:
          # allows us to preview the generated html pages
          path: docs/build/html/
          destination: html

  Formatting:
    docker:
      - image: circleci/python:3.7
    environment:
        - TORCH_VERSION: "torch"
    steps:
      - checkout
      - *format

  PyTorch:
    docker:
      - image: circleci/python:3.6
    environment:
      - TORCH_VERSION: "torch"
    steps: &steps
      - checkout
      #- restore_cache:
      #    keys:
      #      # when lock file changes, use increasingly general patterns to restore cache
      #      - pip-packages--{{ .Environment.CIRCLE_JOB }}
      #      - pip-packages--
      - *install_deps
      #- save_cache:
      #    key: pip-packages--{{ .Environment.CIRCLE_JOB }}
      #    paths:
      #      # this path depends on where pipenv creates a virtualenv
      #      - "~/.cache/pip"
      #      - "/usr/local/lib/python3.6/site-packages"
      #      - "/usr/local/lib/site-python"
      - *tests
      - store_test_results:
          path: test-reports
      - store_artifacts:
          path: test-reports

  PyTorch-v1_1:
    docker:
      - image: circleci/python:3.6
    environment:
      - TORCH_VERSION: "torch>=1.1, <1.2"
    steps: *steps

  PyTorch-v1_2:
    docker:
      - image: circleci/python:3.6
    environment:
      - TORCH_VERSION: "torch>=1.2, <1.3"
    steps: *steps

  PyTorch-v1_3:
    docker:
      - image: circleci/python:3.6
    environment:
      - TORCH_VERSION: "torch>=1.3, <1.4"
    steps: *steps

  PyTorch-v1_4:
    docker:
      - image: circleci/python:3.6
    environment:
      - TORCH_VERSION: "torch>=1.4, <1.5"
    steps: *steps

  PyTorch-v1_5:
    docker:
      - image: circleci/python:3.6
    environment:
      - TORCH_VERSION: "torch>=1.5, <1.6"
    steps: *steps

  Examples:
    docker:
      - image: circleci/python:3.7
    environment:
        - TORCH_VERSION: "torch"
    steps:
      - checkout
      - *install_deps
      - *examples

  Install-pkg:
    docker:
      - image: circleci/python:3.7
    steps:
      - checkout
      - *create_pkg
      - *install_pkg

#orbs:
#  python: circleci/python@0.2.1

workflows:
  version: 2
  build:
    jobs:
      - Formatting
      - Build-Docs
      - PyTorch-v1_1
      - PyTorch-v1_2
      - PyTorch-v1_3
      - PyTorch-v1_4
      - PyTorch-v1_5
      - Install-pkg
      - Examples