Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add py.typed file to make CQ PEP-561 compatibile #435

Merged
merged 3 commits into from Aug 14, 2020

Conversation

winksaville
Copy link
Contributor

This change signals to mypy that there is type annotations in the files
and they should be used to validate type information for cadquery.

See: https://mypy.readthedocs.io/en/stable/installed_packages.html#making-pep-561-compatible-packages

This change signals to mypy that there is type annotations in the files
and they should be used to validate type information for cadquery.

See: https://mypy.readthedocs.io/en/stable/installed_packages.html#making-pep-561-compatible-packages
@codecov
Copy link

codecov bot commented Aug 13, 2020

Codecov Report

Merging #435 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@           Coverage Diff           @@
##           master     #435   +/-   ##
=======================================
  Coverage   93.58%   93.58%           
=======================================
  Files          25       25           
  Lines        5316     5316           
  Branches      554      554           
=======================================
  Hits         4975     4975           
  Misses        215      215           
  Partials      126      126           

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 83ad6eb...849a6d7. Read the comment docs.

@winksaville
Copy link
Contributor Author

With this change there is at least one known problem, if a user has installed the OCP-stubs so
mypy cadquery can be used to validate cadquery:

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ pip install git+https://github.com/CadQuery/OCP-stubs.git
Collecting git+https://github.com/CadQuery/OCP-stubs.git
  Cloning https://github.com/CadQuery/OCP-stubs.git to /tmp/pip-req-build-qoebuesr
Building wheels for collected packages: OCP-stubs
  Building wheel for OCP-stubs (setup.py) ... done
  Created wheel for OCP-stubs: filename=OCP_stubs-1.0-py3-none-any.whl size=2855372 sha256=edb2040d733924a7515291856644b1a45f5cd408f00f33e12f026aca289a482c
  Stored in directory: /tmp/pip-ephem-wheel-cache-mqwhzycz/wheels/e7/07/65/f0ae365168af5d33d0ba90da000203fec0de1c196fd4496cc0
Successfully built OCP-stubs
Installing collected packages: OCP-stubs
Successfully installed OCP-stubs-1.0

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ mypy cadquery
Success: no issues found in 20 source files

Then the my-splitting-and-mypy test fails:

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy splitting.py 
Traceback (most recent call last):
  File "/opt/miniconda3/envs/cq-dev/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 252, in _build
  File "mypy/build.py", line 2626, in dispatch
  File "mypy/build.py", line 2942, in process_graph
  File "mypy/build.py", line 3020, in process_fresh_modules
  File "mypy/build.py", line 1955, in fix_cross_refs
  File "mypy/fixup.py", line 25, in fixup_module
  File "mypy/fixup.py", line 91, in visit_symbol_table
  File "mypy/nodes.py", line 515, in accept
  File "mypy/fixup.py", line 105, in visit_overloaded_func_def
  File "mypy/types.py", line 1296, in accept
  File "mypy/fixup.py", line 196, in visit_overloaded
  File "mypy/types.py", line 1098, in accept
  File "mypy/fixup.py", line 182, in visit_callable_type
  File "mypy/types.py", line 1724, in accept
  File "mypy/fixup.py", line 251, in visit_union_type
  File "mypy/types.py", line 794, in accept
  File "mypy/fixup.py", line 153, in visit_instance
  File "mypy/fixup.py", line 262, in lookup_qualified_typeinfo
  File "mypy/fixup.py", line 290, in lookup_qualified
  File "mypy/fixup.py", line 299, in lookup_qualified_stnode
  File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'Message' for 'OCP.Message.Message_ProgressIndicator'

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy workplane.py 
Traceback (most recent call last):
  File "/opt/miniconda3/envs/cq-dev/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 252, in _build
  File "mypy/build.py", line 2626, in dispatch
  File "mypy/build.py", line 2942, in process_graph
  File "mypy/build.py", line 3020, in process_fresh_modules
  File "mypy/build.py", line 1955, in fix_cross_refs
  File "mypy/fixup.py", line 25, in fixup_module
  File "mypy/fixup.py", line 91, in visit_symbol_table
  File "mypy/nodes.py", line 515, in accept
  File "mypy/fixup.py", line 105, in visit_overloaded_func_def
  File "mypy/types.py", line 1296, in accept
  File "mypy/fixup.py", line 196, in visit_overloaded
  File "mypy/types.py", line 1098, in accept
  File "mypy/fixup.py", line 182, in visit_callable_type
  File "mypy/types.py", line 1724, in accept
  File "mypy/fixup.py", line 251, in visit_union_type
  File "mypy/types.py", line 794, in accept
  File "mypy/fixup.py", line 153, in visit_instance
  File "mypy/fixup.py", line 262, in lookup_qualified_typeinfo
  File "mypy/fixup.py", line 290, in lookup_qualified
  File "mypy/fixup.py", line 299, in lookup_qualified_stnode
  File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'Message' for 'OCP.Message.Message_ProgressIndicator'

But if you uninstall OCP-stubs both work:

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ pip uninstall OCP-stubs
Found existing installation: OCP-stubs 1.0
Uninstalling OCP-stubs-1.0:
  Would remove:
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/AIS/__init__.pyi
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/Adaptor2d/__init__.pyi
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/Adaptor3d/__init__.pyi
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/AdvApp2Var/__init__.pyi
...
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/gp/__init__.pyi
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/math/__init__.pyi
    /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP_stubs-1.0.dist-info/*
Proceed (y/n)? y
  Successfully uninstalled OCP-stubs-1.0
(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy splitting.py 
Success: no issues found in 1 source file
(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy workplane.py 
Success: no issues found in 1 source file

I've no idea if this a problem with the OCP-stubs or mypy or something with my configuration.

@adam-urbanczyk adam-urbanczyk changed the title Add PEP-561 compatibility Add py.typed file to make CQ PEP-561 compatibile Aug 13, 2020
@adam-urbanczyk
Copy link
Member

Here is a simple sanity check not related to CQ:

import OCP.gp

v = OCP.gp.gp_Vec()
x:int = v.X()

running mypy on this code should result in one error being detected:

mocp.py:4: error: Incompatible types in assignment (expression has type "float", variable has type "int")
Found 1 error in 1 file (checked 1 source file)

@winksaville
Copy link
Contributor Author

Result of sanity check is as you expected:

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ cat ocp1.py 
import OCP.gp

v = OCP.gp.gp_Vec()
x: int = v.X()

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ pip install git+https://github.com/CadQuery/OCP-stubs.git
Collecting git+https://github.com/CadQuery/OCP-stubs.git
  Cloning https://github.com/CadQuery/OCP-stubs.git to /tmp/pip-req-build-34hvjf10
Building wheels for collected packages: OCP-stubs
  Building wheel for OCP-stubs (setup.py) ... done
  Created wheel for OCP-stubs: filename=OCP_stubs-1.0-py3-none-any.whl size=2855372 sha256=8066b59e96b384db99bc311baaee1d4cc8e986ecf968bb45389cc3ed523c4914
  Stored in directory: /tmp/pip-ephem-wheel-cache-vf4rb0x9/wheels/e7/07/65/f0ae365168af5d33d0ba90da000203fec0de1c196fd4496cc0
Successfully built OCP-stubs
Installing collected packages: OCP-stubs
Successfully installed OCP-stubs-1.0

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy ocp1.py 
ocp1.py:4: error: Incompatible types in assignment (expression has type "float", variable has type "int")
Found 1 error in 1 file (checked 1 source file)

@winksaville
Copy link
Contributor Author

What do you get if you execute: mypy workplane.py

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ cat workplane.py 
import cadquery as cq

a = cq.Workplane("XY").box(1, 2, 3)
print(f"""type(a)={type(a)}
type(a.val())={type(a.val())}""")
#b = cq.Workplane(inPlane=cq.Plane((0, 0, 0), (1, 0, 0), (0, 0, 1)))
s = cq.Workplane(cq.Plane.XY())
sPnts = [
    (2.75, 1.5),
    (2.5, 1.75),
    (2.0, 1.5),
    (1.5, 1.0),
    (1.0, 1.25),
    (0.5, 1.0),
    (0, 1.0),
]
print(f"""type(s)={type(s)}
type(s.val())={type(s.val())}""")
r = s.lineTo(3.0, 0).lineTo(3.0, 1.0).spline(sPnts).close()
print(f"""type(r)={type(r)}
type(r.val())={type(r.val())}""")
b = cq.Workplane(obj=r.val())
print(f"""type(b)={type(b)}
type(b.val())={type(b.val())}""")

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy workplane.py
Traceback (most recent call last):
  File "/opt/miniconda3/envs/cq-dev/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 252, in _build
  File "mypy/build.py", line 2626, in dispatch
  File "mypy/build.py", line 2942, in process_graph
  File "mypy/build.py", line 3020, in process_fresh_modules
  File "mypy/build.py", line 1955, in fix_cross_refs
  File "mypy/fixup.py", line 25, in fixup_module
  File "mypy/fixup.py", line 91, in visit_symbol_table
  File "mypy/nodes.py", line 515, in accept
  File "mypy/fixup.py", line 105, in visit_overloaded_func_def
  File "mypy/types.py", line 1296, in accept
  File "mypy/fixup.py", line 196, in visit_overloaded
  File "mypy/types.py", line 1098, in accept
  File "mypy/fixup.py", line 182, in visit_callable_type
  File "mypy/types.py", line 1724, in accept
  File "mypy/fixup.py", line 251, in visit_union_type
  File "mypy/types.py", line 794, in accept
  File "mypy/fixup.py", line 153, in visit_instance
  File "mypy/fixup.py", line 262, in lookup_qualified_typeinfo
  File "mypy/fixup.py", line 290, in lookup_qualified
  File "mypy/fixup.py", line 299, in lookup_qualified_stnode
  File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'Message' for 'OCP.Message.Message_ProgressIndicator'

@adam-urbanczyk
Copy link
Member

It runs fine for me:

Success: no issues found in 1 source file

Do you maybe have some uncommitted files in your cq source dir that are interfering?

@winksaville
Copy link
Contributor Author

winksaville commented Aug 13, 2020

Here's some info, what mypy, python and OS versions are you using?

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ git status
On branch Add-PEP-561-compatibility
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   cadquery.egg-info/PKG-INFO
	modified:   cadquery.egg-info/SOURCES.txt

no changes added to commit (use "git add" and/or "git commit -a")

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ git log -1
commit 68454cc288cfabdc78890f5b5e6cb50d5d13df2b (HEAD -> Add-PEP-561-compatibility, origin/Add-PEP-561-compatibility)
Author: Wink Saville <wink@saville.com>
Date:   Wed Aug 12 16:26:45 2020 -0700

    Add PEP-561 compatibility
    
    This change signals to mypy that there is type annotations in the files
    and they should be used to validate type information for cadquery.
    
    See: https://mypy.readthedocs.io/en/stable/installed_packages.html#making-pep-561-compatible-packages

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ pip install -e .
Obtaining file:///home/wink/prgs/CadQuery/forks/cadquery
Installing collected packages: cadquery
  Attempting uninstall: cadquery
    Found existing installation: cadquery 2.0
    Uninstalling cadquery-2.0:
      Successfully uninstalled cadquery-2.0
  Running setup.py develop for cadquery
Successfully installed cadquery

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ cd ../../projects/splitting/

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	ocp1.py

nothing added to commit but untracked files present (use "git add" to track)

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy ocp1.py
ocp1.py:4: error: Incompatible types in assignment (expression has type "float", variable has type "int")
Found 1 error in 1 file (checked 1 source file)

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy workplane.py 
Traceback (most recent call last):
  File "/opt/miniconda3/envs/cq-dev/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 252, in _build
  File "mypy/build.py", line 2626, in dispatch
  File "mypy/build.py", line 2942, in process_graph
  File "mypy/build.py", line 3020, in process_fresh_modules
  File "mypy/build.py", line 1955, in fix_cross_refs
  File "mypy/fixup.py", line 25, in fixup_module
  File "mypy/fixup.py", line 91, in visit_symbol_table
  File "mypy/nodes.py", line 515, in accept
  File "mypy/fixup.py", line 105, in visit_overloaded_func_def
  File "mypy/types.py", line 1296, in accept
  File "mypy/fixup.py", line 196, in visit_overloaded
  File "mypy/types.py", line 1098, in accept
  File "mypy/fixup.py", line 182, in visit_callable_type
  File "mypy/types.py", line 1724, in accept
  File "mypy/fixup.py", line 251, in visit_union_type
  File "mypy/types.py", line 794, in accept
  File "mypy/fixup.py", line 153, in visit_instance
  File "mypy/fixup.py", line 262, in lookup_qualified_typeinfo
  File "mypy/fixup.py", line 290, in lookup_qualified
  File "mypy/fixup.py", line 299, in lookup_qualified_stnode
  File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'Message' for 'OCP.Message.Message_ProgressIndicator'

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy --version
mypy 0.782

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ python --version
Python 3.7.8

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ in
in              inetcat         infocmp         init            install         instmodsh       invgeod         inxi            
indxbib         info            infotocap       insmod          install-info    integritysetup  invproj         

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ inxi -Fxz
System:    Kernel: 5.7.12-arch1-1 x86_64 bits: 64 compiler: gcc v: 10.1.0 Desktop: Cinnamon 4.6.6 Distro: Arch Linux 
Machine:   Type: Desktop Mobo: ASRock model: X570 Creator serial: <filter> UEFI: American Megatrends v: P2.10 date: 12/16/2019 
CPU:       Topology: 12-Core model: AMD Ryzen 9 3900X bits: 64 type: MT MCP arch: Zen 2 L2 cache: 6144 KiB 
           flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm bogomips: 182495 
           Speed: 4059 MHz min/max: 2200/3800 MHz Core speeds (MHz): 1: 4052 2: 4052 3: 4048 4: 4048 5: 4051 6: 4051 7: 4051 
           8: 4052 9: 4052 10: 4052 11: 4050 12: 4050 13: 4051 14: 4050 15: 4048 16: 4048 17: 4048 18: 4052 19: 4052 20: 4052 
           21: 4050 22: 4050 23: 4060 24: 4057 
Graphics:  Device-1: NVIDIA TU116 [GeForce GTX 1660] vendor: Micro-Star MSI driver: nvidia v: 450.57 bus ID: 33:00.0 
           Display: x11 server: X.org 1.20.8 driver: nvidia unloaded: modesetting resolution: <xdpyinfo missing> 
           Message: Unable to show advanced data. Required tool glxinfo missing. 
Audio:     Device-1: NVIDIA TU116 High Definition Audio vendor: Micro-Star MSI driver: snd_hda_intel v: kernel bus ID: 33:00.1 
           Device-2: Advanced Micro Devices [AMD] Starship/Matisse HD Audio vendor: ASRock driver: snd_hda_intel v: kernel 
           bus ID: 35:00.4 
           Sound Server: ALSA v: k5.7.12-arch1-1 
Network:   Device-1: Intel I211 Gigabit Network vendor: ASRock driver: igb v: 5.6.0-k port: b000 bus ID: 28:00.0 
           IF: enp40s0 state: down mac: <filter> 
           Device-2: Intel Wi-Fi 6 AX200 driver: iwlwifi v: kernel port: b000 bus ID: 29:00.0 
           IF: wlp41s0 state: down mac: <filter> 
           Device-3: Aquantia AQC107 NBase-T/IEEE 802.3bz Ethernet [AQtion] vendor: ASRock driver: atlantic v: kernel 
           port: a000 bus ID: 2e:00.0 
           IF: enp46s0 state: up speed: 1000 Mbps duplex: full mac: <filter> 
Drives:    Local Storage: total: 465.76 GiB used: 104.33 GiB (22.4%) 
           ID-1: /dev/nvme0n1 vendor: Sabrent model: Rocket 4.0 500GB size: 465.76 GiB 
           ID-2: /dev/nvme1n1 vendor: Sabrent model: Rocket 4.0 500GB size: 465.76 GiB 
Partition: ID-1: / size: 491.15 GiB used: 104.26 GiB (21.2%) fs: ext4 dev: /dev/dm-2 
           ID-2: /boot size: 1.86 GiB used: 72.1 MiB (3.8%) fs: vfat dev: /dev/nvme0n1p1 
Swap:      ID-1: swap-1 type: file size: 512.0 MiB used: 0 KiB (0.0%) file: /swapfile 
Sensors:   System Temperatures: cpu: 81.9 C mobo: N/A 
           Fan Speeds (RPM): N/A 
Info:      Processes: 452 Uptime: 58m Memory: 31.29 GiB used: 3.97 GiB (12.7%) Init: systemd Compilers: gcc: 10.1.0 
           clang: 10.0.1 Shell: bash v: 5.0.17 inxi: 3.1.03 

Also. just to be obvious, this has my change ontop of lastest master:

(cq-dev) wink@3900x:~/prgs/CadQuery/forks/cadquery (Add-PEP-561-compatibility)
$ git log -2 --oneline 
68454cc (HEAD -> Add-PEP-561-compatibility, origin/Add-PEP-561-compatibility) Add PEP-561 compatibility
83ad6eb (upstream/master, origin/master, origin/HEAD, master) Fix type annotation for selectors (#430)

@winksaville
Copy link
Contributor Author

Another question, until I used either modified cadquery with "stubs" or added "py.typed" I had to use import cadquery as cq # type: ignore to be able to use mypy.

But apparently, you don't have to, how do you accomplish that?

@winksaville
Copy link
Contributor Author

Well guess what, if I clone mypy and then pip install -e . it works!

I added the print("mypy.main:+ WINK") statement to mypy/main.py so I'd know it was executing:

(cq-dev) wink@3900x:~/prgs/python/clones/mypy (master)
$ git diff
diff --git a/mypy/main.py b/mypy/main.py
index 7038ce40..33de9788 100644
--- a/mypy/main.py
+++ b/mypy/main.py
@@ -53,6 +53,8 @@ def main(script_path: Optional[str],
         args: Custom command-line arguments.  If not given, sys.argv[1:] will
         be used.
     """
+    #print(f"mypy.main:+")
+
     util.check_python_version('mypy')
     t0 = time.time()
     # To log stat() calls: os.stat = stat_proxy

(cq-dev) wink@3900x:~/prgs/python/clones/mypy (master)
$ pip install -e .
Obtaining file:///home/wink/prgs/python/clones/mypy
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: mypy-extensions<0.5.0,>=0.4.3 in /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages (from mypy==0.790+dev.0dfac58ede61f7c4a92f55ffe5f527fa6781fab2.dirty) (0.4.3)
Requirement already satisfied: typing-extensions>=3.7.4 in /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages (from mypy==0.790+dev.0dfac58ede61f7c4a92f55ffe5f527fa6781fab2.dirty) (3.7.4.2)
Requirement already satisfied: typed-ast<1.5.0,>=1.4.0 in /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages (from mypy==0.790+dev.0dfac58ede61f7c4a92f55ffe5f527fa6781fab2.dirty) (1.4.1)
Installing collected packages: mypy
  Attempting uninstall: mypy
    Found existing installation: mypy 0.782
    Uninstalling mypy-0.782:
      Successfully uninstalled mypy-0.782
  Running setup.py develop for mypy
Successfully installed mypy
(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy --version
mypy.main:+ WINK
mypy 0.790+dev.0dfac58ede61f7c4a92f55ffe5f527fa6781fab2.dirty

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy workplane.py 
mypy.main:+ WINK
Success: no issues found in 1 source file

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy workplane.py 
mypy.main:+ WINK
Success: no issues found in 1 source file

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy splitting.py 
mypy.main:+ WINK
Success: no issues found in 1 source file

When I use verbose mode there is one HUGE difference between mypy master
and 7.8.2. On "all" runs after the first in 7.8.2 the caching doesn't seem to work
well and many, but no all files, have these three lines:

LOG:  Could not load cache for OCP.Blend: OCP/Blend/__init__.meta.json
LOG:  Metadata not found for OCP.Blend
LOG:  Parsing /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/Blend/__init__.pyi (OCP.Blend)

Here is a "snippet" of the logs for a second run of mypy 7.8.2

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy -v workplane.py 2>&1 |  tee mypy.2.log

LOG:  Mypy Version:           0.782
LOG:  Config File:            Default
LOG:  Source Path:            workplane.py
LOG:  Configured Executable:  /opt/miniconda3/envs/cq-dev/bin/python3.7
LOG:  Current Executable:     /opt/miniconda3/envs/cq-dev/bin/python3.7
LOG:  Cache Dir:              .mypy_cache
LOG:  Compiled:               True
LOG:  Metadata abandoned for workplane: file workplane.py has different size
LOG:  Parsing workplane.py (workplane)
LOG:  Metadata fresh for cadquery: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/__init__.py
LOG:  Metadata fresh for builtins: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/2and3/builtins.pyi
LOG:  Metadata fresh for cadquery.occ_impl.geom: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/geom.py
LOG:  Parsing /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/geom.py (cadquery.occ_impl.geom)
LOG:  Metadata fresh for cadquery.occ_impl.shapes: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/shapes.py
LOG:  Parsing /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/shapes.py (cadquery.occ_impl.shapes)
LOG:  Metadata fresh for cadquery.occ_impl: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/__init__.py
LOG:  Metadata fresh for cadquery.occ_impl.exporters: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/exporters/__init__.py
LOG:  Metadata fresh for cadquery.occ_impl.importers: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/importers.py
LOG:  Parsing /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/importers.py (cadquery.occ_impl.importers)
LOG:  Metadata fresh for cadquery.selectors: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/selectors.py
LOG:  Metadata fresh for cadquery.cq: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/cq.py
LOG:  Metadata fresh for cadquery.plugins: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/plugins/__init__.py
LOG:  Metadata fresh for typing: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/3/typing.pyi
LOG:  Metadata fresh for abc: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/3/abc.pyi
LOG:  Metadata fresh for ast: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/3/ast.pyi
LOG:  Metadata fresh for types: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/3/types.pyi
LOG:  Metadata fresh for sys: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/3/sys.pyi
LOG:  Metadata fresh for typing_extensions: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/third_party/2and3/typing_extensions.pyi
LOG:  Metadata fresh for math: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/2and3/math.pyi
LOG:  Metadata fresh for OCP.gp: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/gp/__init__.pyi
LOG:  Metadata fresh for OCP.Bnd: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/Bnd/__init__.pyi
LOG:  Could not load cache for OCP.BRepBndLib: OCP/BRepBndLib/__init__.meta.json
LOG:  Metadata not found for OCP.BRepBndLib
LOG:  Parsing /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/BRepBndLib/__init__.pyi (OCP.BRepBndLib)
LOG:  Could not load cache for OCP.BRepMesh: OCP/BRepMesh/__init__.meta.json
LOG:  Metadata not found for OCP.BRepMesh
LOG:  Parsing /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/BRepMesh/__init__.pyi (OCP.BRepMesh)
LOG:  Metadata fresh for OCP.TopoDS: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/TopoDS/__init__.pyi

...

LOG:  Could not load cache for OCP.Contap: OCP/Contap/__init__.meta.json
LOG:  Metadata not found for OCP.Contap
LOG:  Parsing /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/Contap/__init__.pyi (OCP.Contap)
LOG:  Metadata fresh for xml.parsers.expat: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi
LOG:  Metadata fresh for OCP.StdSelect: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/StdSelect/__init__.pyi
LOG:  Metadata fresh for OCP.DsgPrs: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/DsgPrs/__init__.pyi
LOG:  Could not load cache for OCP.PLib: OCP/PLib/__init__.meta.json
LOG:  Metadata not found for OCP.PLib
LOG:  Parsing /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/PLib/__init__.pyi (OCP.PLib)
LOG:  Could not load cache for OCP.IntCurve: OCP/IntCurve/__init__.meta.json
LOG:  Metadata not found for OCP.IntCurve
LOG:  Parsing /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/IntCurve/__init__.pyi (OCP.IntCurve)
LOG:  Loaded graph with 196 nodes (1.981 sec)
LOG:  Found 151 SCCs; largest has 20 nodes
LOG:  Processing 40 queued fresh SCCs
LOG:  Build finished in 2.343 seconds with 150 modules, and 0 errors
Traceback (most recent call last):
  File "/opt/miniconda3/envs/cq-dev/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 252, in _build
  File "mypy/build.py", line 2626, in dispatch
  File "mypy/build.py", line 2942, in process_graph
  File "mypy/build.py", line 3020, in process_fresh_modules
  File "mypy/build.py", line 1955, in fix_cross_refs
  File "mypy/fixup.py", line 25, in fixup_module
  File "mypy/fixup.py", line 91, in visit_symbol_table
  File "mypy/nodes.py", line 515, in accept
  File "mypy/fixup.py", line 105, in visit_overloaded_func_def
  File "mypy/types.py", line 1296, in accept
  File "mypy/fixup.py", line 196, in visit_overloaded
  File "mypy/types.py", line 1098, in accept
  File "mypy/fixup.py", line 182, in visit_callable_type
  File "mypy/types.py", line 1724, in accept
  File "mypy/fixup.py", line 251, in visit_union_type
  File "mypy/types.py", line 794, in accept
  File "mypy/fixup.py", line 153, in visit_instance
  File "mypy/fixup.py", line 262, in lookup_qualified_typeinfo
  File "mypy/fixup.py", line 290, in lookup_qualified
  File "mypy/fixup.py", line 299, in lookup_qualified_stnode
  File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'Message' for 'OCP.Message.Message_ProgressIndicator'

Where as with mypy master "all" files on second and subsequent runs begin with LOG: Metadata fresh for ....:

(cq-dev) wink@3900x:~/prgs/CadQuery/projects/splitting (master)
$ mypy -v workplane.py 2>&1 |  tee mypy.4.log

LOG:  Mypy Version:           0.790+dev.0dfac58ede61f7c4a92f55ffe5f527fa6781fab2.dirty
LOG:  Config File:            Default
LOG:  Source Path:            workplane.py
LOG:  Configured Executable:  /opt/miniconda3/envs/cq-dev/bin/python3.7
LOG:  Current Executable:     /opt/miniconda3/envs/cq-dev/bin/python3.7
LOG:  Cache Dir:              .mypy_cache
LOG:  Compiled:               False
LOG:  Metadata fresh for workplane: file workplane.py
LOG:  Metadata fresh for cadquery: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/__init__.py
LOG:  Metadata fresh for builtins: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/2and3/builtins.pyi
LOG:  Metadata fresh for cadquery.occ_impl.geom: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/geom.py
LOG:  Metadata fresh for cadquery.occ_impl.shapes: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/shapes.py
LOG:  Metadata fresh for cadquery.occ_impl: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/__init__.py
LOG:  Metadata fresh for cadquery.occ_impl.exporters: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/exporters/__init__.py
LOG:  Metadata fresh for cadquery.occ_impl.importers: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/occ_impl/importers.py
LOG:  Metadata fresh for cadquery.selectors: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/selectors.py
LOG:  Metadata fresh for cadquery.cq: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/cq.py
LOG:  Metadata fresh for cadquery.plugins: file /home/wink/prgs/CadQuery/forks/cadquery/cadquery/plugins/__init__.py
LOG:  Metadata fresh for pyexpat.errors: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/2and3/pyexpat/errors.pyi
LOG:  Metadata fresh for pyexpat.model: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/2and3/pyexpat/model.pyi
LOG:  Metadata fresh for sys: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/3/sys.pyi
LOG:  Metadata fresh for _typeshed: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/2and3/_typeshed/__init__.pyi
LOG:  Metadata fresh for abc: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/3/abc.pyi
LOG:  Metadata fresh for ast: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/3/ast.pyi
LOG:  Metadata fresh for io: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/3/io.pyi
LOG:  Metadata fresh for types: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/3/types.pyi
LOG:  Metadata fresh for typing: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/3/typing.pyi
LOG:  Metadata fresh for typing_extensions: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/third_party/2and3/typing_extensions.pyi
LOG:  Metadata fresh for math: file /home/wink/prgs/python/clones/mypy/mypy/typeshed/stdlib/2and3/math.pyi
LOG:  Metadata fresh for OCP.gp: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/gp/__init__.pyi
LOG:  Metadata fresh for OCP.Bnd: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/Bnd/__init__.pyi
LOG:  Metadata fresh for OCP.BRepBndLib: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/BRepBndLib/__init__.pyi
LOG:  Metadata fresh for OCP.BRepMesh: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/BRepMesh/__init__.pyi
LOG:  Metadata fresh for OCP.TopoDS: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/TopoDS/__init__.pyi

...

LOG:  Metadata fresh for OCP.DsgPrs: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/DsgPrs/__init__.pyi
LOG:  Metadata fresh for OCP.PLib: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/PLib/__init__.pyi
LOG:  Metadata fresh for OCP.IntCurve: file /opt/miniconda3/envs/cq-dev/lib/python3.7/site-packages/OCP-stubs/IntCurve/__init__.pyi
LOG:  Loaded graph with 197 nodes (0.163 sec)
LOG:  Found 148 SCCs; largest has 21 nodes
LOG:  148 fresh SCCs (197 nodes) left in queue (and will remain unprocessed)
LOG:  Build finished in 0.171 seconds with 0 modules, and 0 errors
mypy.main:+ WINK
Success: no issues found in 1 source file

I'd noticed that anomaly and was going to debug it with mypy master.
Thank goodness I don't have to do that!!

@adam-urbanczyk
Copy link
Member

This PR is ready for merging @winksaville , right ? Any thougths @jmwright ?

@jmwright
Copy link
Member

I think it looks fine, but I'm relying somewhat on you guys since all of this mypy stuff is very new to me.

@adam-urbanczyk adam-urbanczyk merged commit 1a6651d into CadQuery:master Aug 14, 2020
@winksaville winksaville deleted the Add-PEP-561-compatibility branch August 15, 2020 00:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants