This is an automated email from the ASF dual-hosted git repository.

pingsutw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new 5cd74b9  SUBMARINE-1009. Support mypy for Submarine SDK
5cd74b9 is described below

commit 5cd74b996fc8ca3e1870e159fcd81e516b31b496
Author: KUAN-HSUN-LI <[email protected]>
AuthorDate: Tue Sep 7 15:55:23 2021 +0800

    SUBMARINE-1009. Support mypy for Submarine SDK
    
    ### What is this PR for?
    [mypy](https://github.com/python/mypy) is an optional static type checker 
for Python.
    With `mypy` we can find bugs in our programs without even running them.
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/SUBMARINE-1009
    
    ### How should this be tested?
    ci pass
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Do the license files need updating? No
    * Are there breaking changes for older versions? No
    * Does this need new documentation? Yes
    
    Author: KUAN-HSUN-LI <[email protected]>
    
    Signed-off-by: Kevin <[email protected]>
    
    Closes #739 from KUAN-HSUN-LI/SUBMARINE-1009 and squashes the following 
commits:
    
    6203323a [KUAN-HSUN-LI] fix ci
    950dbdce [KUAN-HSUN-LI] SUBMARINE-1009. update development docs
    e0821715 [KUAN-HSUN-LI] SUBMARINE-1009. fix files incompatible with mypy
    e36f5347 [KUAN-HSUN-LI] SUBMARINE-1009. mypy requirements
---
 .github/workflows/python.yml                         |  1 +
 dev-support/style-check/python/lint.sh               |  2 ++
 .../python/{lint.sh => mypy-requirements.txt}        | 20 +++++---------------
 .../pysubmarine/submarine/experiment/api_client.py   |  2 +-
 .../submarine/ml/pytorch/input/libsvm_dataset.py     | 11 +++++++----
 .../pysubmarine/submarine/store/database/models.py   |  4 +++-
 .../pysubmarine/submarine/tracking/fluent.py         |  1 -
 .../submarine-sdk/pysubmarine/development.md         |  6 +++++-
 .../submarine-sdk/pysubmarine/development.md         |  6 +++++-
 9 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
index 9ffdb4d..a741316 100644
--- a/.github/workflows/python.yml
+++ b/.github/workflows/python.yml
@@ -41,6 +41,7 @@ jobs:
           pip install --no-cache-dir ./submarine-sdk/pysubmarine/.
           pip install -r 
./submarine-sdk/pysubmarine/github-actions/test-requirements.txt
           pip install -r ./dev-support/style-check/python/lint-requirements.txt
+          pip install -r ./dev-support/style-check/python/mypy-requirements.txt
       - name: Check python sdk code style
         run: ./dev-support/style-check/python/lint.sh
       - name: Run unit test
diff --git a/dev-support/style-check/python/lint.sh 
b/dev-support/style-check/python/lint.sh
index db1f3af..596e6c5 100755
--- a/dev-support/style-check/python/lint.sh
+++ b/dev-support/style-check/python/lint.sh
@@ -26,5 +26,7 @@ isort -c submarine-sdk/ dev-support/ website/
 black submarine-sdk/ dev-support/ website/ --check 
--experimental-string-processing
 # Check lint: Not checking the code in website
 flake8 submarine-sdk/ dev-support/
+# Check static typing for Python
+mypy --ignore-missing-imports submarine-sdk/pysubmarine/submarine/
 
 set +euxo pipefail
diff --git a/dev-support/style-check/python/lint.sh 
b/dev-support/style-check/python/mypy-requirements.txt
old mode 100755
new mode 100644
similarity index 67%
copy from dev-support/style-check/python/lint.sh
copy to dev-support/style-check/python/mypy-requirements.txt
index db1f3af..6a581e3
--- a/dev-support/style-check/python/lint.sh
+++ b/dev-support/style-check/python/mypy-requirements.txt
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -14,17 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-set -euxo pipefail
-
-FWDIR="$(cd "$(dirname "$0")"; pwd)"
-cd "$FWDIR"
-cd ../../../
-
-# Check imports
-isort -c submarine-sdk/ dev-support/ website/
-# Check code format
-black submarine-sdk/ dev-support/ website/ --check 
--experimental-string-processing
-# Check lint: Not checking the code in website
-flake8 submarine-sdk/ dev-support/
-
-set +euxo pipefail
+mypy==0.910
+types-requests==2.25.6
+types-certifi==2020.4.0
+types-six==1.16.1
+types-python-dateutil==2.8.0
diff --git a/submarine-sdk/pysubmarine/submarine/experiment/api_client.py 
b/submarine-sdk/pysubmarine/submarine/experiment/api_client.py
index 54c18d3..2414243 100644
--- a/submarine-sdk/pysubmarine/submarine/experiment/api_client.py
+++ b/submarine-sdk/pysubmarine/submarine/experiment/api_client.py
@@ -71,7 +71,7 @@ class ApiClient(object):
     PRIMITIVE_TYPES = (float, bool, bytes, six.text_type) + six.integer_types
     NATIVE_TYPES_MAPPING = {
         "int": int,
-        "long": int if six.PY3 else long,  # noqa: F821
+        "long": int,
         "float": float,
         "str": str,
         "bool": bool,
diff --git 
a/submarine-sdk/pysubmarine/submarine/ml/pytorch/input/libsvm_dataset.py 
b/submarine-sdk/pysubmarine/submarine/ml/pytorch/input/libsvm_dataset.py
index 0ec3b0d..76efa3b 100644
--- a/submarine-sdk/pysubmarine/submarine/ml/pytorch/input/libsvm_dataset.py
+++ b/submarine-sdk/pysubmarine/submarine/ml/pytorch/input/libsvm_dataset.py
@@ -17,7 +17,7 @@ import functools
 import itertools
 import multiprocessing as mp
 import os
-from typing import List, Tuple
+from typing import List, Optional, Tuple
 
 import numpy as np
 import torch
@@ -53,9 +53,12 @@ class LIBSVMDataset(Dataset):
         return feature_idx, feature_value, int(label)
 
     @classmethod
-    def prepare_dataset(cls, data_uri: str, n_jobs: int = os.cpu_count()):
-        sample_offset = 
LIBSVMDataset._locate_sample_offsets(data_uri=data_uri, n_jobs=n_jobs)
-        return LIBSVMDataset(data_uri=data_uri, sample_offset=sample_offset)
+    def prepare_dataset(cls, data_uri: str, n_jobs: Optional[int] = 
os.cpu_count()):
+        if n_jobs is None:
+            raise Exception("No enough cpu!")
+        else:
+            sample_offset = 
LIBSVMDataset._locate_sample_offsets(data_uri=data_uri, n_jobs=n_jobs)
+            return LIBSVMDataset(data_uri=data_uri, 
sample_offset=sample_offset)
 
     @classmethod
     def _locate_sample_offsets(cls, data_uri: str, n_jobs: int) -> np.ndarray:
diff --git a/submarine-sdk/pysubmarine/submarine/store/database/models.py 
b/submarine-sdk/pysubmarine/submarine/store/database/models.py
index 8b9752e..c4593d7 100644
--- a/submarine-sdk/pysubmarine/submarine/store/database/models.py
+++ b/submarine-sdk/pysubmarine/submarine/store/database/models.py
@@ -14,6 +14,7 @@
 # limitations under the License.
 
 import time
+from typing import Any
 
 import sqlalchemy as sa
 from sqlalchemy import BigInteger, Boolean, Column, PrimaryKeyConstraint, 
String
@@ -21,7 +22,8 @@ from sqlalchemy.ext.declarative import declarative_base
 
 from submarine.entities import Metric, Param
 
-Base = declarative_base()
+# Base class in sqlalchemy is a dynamic type
+Base: Any = declarative_base()
 
 
 # 
+--------------------+-------+-------------------+--------------+---------------+------+--------+
diff --git a/submarine-sdk/pysubmarine/submarine/tracking/fluent.py 
b/submarine-sdk/pysubmarine/submarine/tracking/fluent.py
index 816569e..f7ee031 100644
--- a/submarine-sdk/pysubmarine/submarine/tracking/fluent.py
+++ b/submarine-sdk/pysubmarine/submarine/tracking/fluent.py
@@ -25,7 +25,6 @@ from submarine.tracking.client import SubmarineClient
 from submarine.tracking.utils import get_job_id, get_worker_index
 
 _RUN_ID_ENV_VAR = "SUBMARINE_RUN_ID"
-_active_run_stack = []
 
 _logger = logging.getLogger(__name__)
 
diff --git a/website/docs/userDocs/submarine-sdk/pysubmarine/development.md 
b/website/docs/userDocs/submarine-sdk/pysubmarine/development.md
index d2f18b6..537cf82 100644
--- a/website/docs/userDocs/submarine-sdk/pysubmarine/development.md
+++ b/website/docs/userDocs/submarine-sdk/pysubmarine/development.md
@@ -30,6 +30,9 @@ conda activate submarine-dev
 # Install auto-format and lints (lint-requirements.txt is in 
./dev-support/style-check/python)
 pip install -r lint-requirements.txt
 
+# Install mypy (mypy-requirements.txt is in ./dev-support/style-check/python)
+pip install -r mypy-requirements.txt
+
 # test-requirements.txt is in ./submarine-sdk/pysubmarine/github-actions
 pip install -r test-requirements.txt
 
@@ -62,7 +65,8 @@ The script does the following things:
 ./dev-support/style-check/python/auto-format.sh
 ```
 
-- Use [flake8](https://github.com/PyCQA/flake8) to verify the linter, its' 
configure is in `.flake8`
+- Use [flake8](https://github.com/PyCQA/flake8) to verify the linter, its' 
configure is in `.flake8`.
+- Also, we are using [mypy](https://github.com/python/mypy) to check the 
static type in `submarine-sdk/pysubmarine/submarine`.
 - Verify linter pass before submitting a pull request by running:
 
 ```bash
diff --git 
a/website/versioned_docs/version-0.6.0/userDocs/submarine-sdk/pysubmarine/development.md
 
b/website/versioned_docs/version-0.6.0/userDocs/submarine-sdk/pysubmarine/development.md
index d2f18b6..537cf82 100644
--- 
a/website/versioned_docs/version-0.6.0/userDocs/submarine-sdk/pysubmarine/development.md
+++ 
b/website/versioned_docs/version-0.6.0/userDocs/submarine-sdk/pysubmarine/development.md
@@ -30,6 +30,9 @@ conda activate submarine-dev
 # Install auto-format and lints (lint-requirements.txt is in 
./dev-support/style-check/python)
 pip install -r lint-requirements.txt
 
+# Install mypy (mypy-requirements.txt is in ./dev-support/style-check/python)
+pip install -r mypy-requirements.txt
+
 # test-requirements.txt is in ./submarine-sdk/pysubmarine/github-actions
 pip install -r test-requirements.txt
 
@@ -62,7 +65,8 @@ The script does the following things:
 ./dev-support/style-check/python/auto-format.sh
 ```
 
-- Use [flake8](https://github.com/PyCQA/flake8) to verify the linter, its' 
configure is in `.flake8`
+- Use [flake8](https://github.com/PyCQA/flake8) to verify the linter, its' 
configure is in `.flake8`.
+- Also, we are using [mypy](https://github.com/python/mypy) to check the 
static type in `submarine-sdk/pysubmarine/submarine`.
 - Verify linter pass before submitting a pull request by running:
 
 ```bash

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to