From 33ffdf6fd07d15e647f1208be24ac644769c4425 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 8 Jul 2024 16:27:58 +0200 Subject: [PATCH 01/57] stubber: get_frozen > hack to add arduino_lib to the paths to resolve manifest imports for some of the ARDUINO boards fixes https://github.com/Josverl/micropython-stubber/issues/591 Signed-off-by: Jos Verlinde --- .vscode/launch.json | 10 +++++----- src/stubber/freeze/freeze_manifest_2.py | 9 ++++++++- src/stubber/freeze/get_frozen.py | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index ca3d9a94..8b4ddbe2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,8 +12,8 @@ "justMyCode": true, "cwd": "${workspaceFolder}", "args": [ - "-VV", - "list", + // "-VV", + "flash", // "--board", // "SEEED_WIO_TERMINAL", // "PICO", @@ -40,9 +40,9 @@ "module": "stubber.stubber", "cwd": "${workspaceFolder}", "args": [ - // "-v", - "get-docstubs", - // "get-frozen", + "-VV", + // "get-mcu-stubs", + "get-frozen", // "--version", // "preview", // "switch", diff --git a/src/stubber/freeze/freeze_manifest_2.py b/src/stubber/freeze/freeze_manifest_2.py index 3b64fc23..518de8a5 100644 --- a/src/stubber/freeze/freeze_manifest_2.py +++ b/src/stubber/freeze/freeze_manifest_2.py @@ -43,13 +43,20 @@ def make_path_vars( raise ValueError("board path not found") # VARS must be absolute paths - return { + vars = { "MPY_DIR": mpy_path.absolute().as_posix(), "MPY_LIB_DIR": mpy_lib_path.absolute().as_posix(), "PORT_DIR": port_path.absolute().as_posix(), "BOARD_DIR": board_path.absolute().as_posix(), } + if board and "ARDUINO" in board: + log.warning(f"HACK- Adding [TOP]/lib/arduino-lib to paths: {board}") + # see micropython/ports/renesas-ra/boards/ARDUINO_PORTENTA_C33/mpconfigboard.mk + vars["ARDUINO_LIB_DIR"] = (mpy_path / "lib/arduino-lib").absolute().as_posix() + + return vars + def freeze_one_manifest_2( manifest: Path, frozen_stub_path: Path, mpy_path: Path, mpy_lib_path: Path, version: str diff --git a/src/stubber/freeze/get_frozen.py b/src/stubber/freeze/get_frozen.py index c1de4c53..b488f50b 100644 --- a/src/stubber/freeze/get_frozen.py +++ b/src/stubber/freeze/get_frozen.py @@ -19,6 +19,8 @@ # - 1.11 and older - include content of /port/modules folder if it exists import os import shutil # start moving from os & glob to pathlib +import subprocess + from pathlib import Path from typing import List, Optional @@ -59,6 +61,16 @@ def add_comment_to_path(path: Path, comment: str) -> None: pass +def checkout_arduino_lib(mpy_path: Path): + """ + Checkout the arduino-lib repo if it is not already checked out + """ + # arduino_lib_path = mpy_path / "lib/arduino-lib" + cmd = ["git", "submodule", "update", "--init", "lib/arduino-lib"] + result = subprocess.run(cmd, cwd=mpy_path, check=True) + log.info(f"checkout arduino-lib: {result.returncode}") + + def freeze_any( stub_folder: Optional[Path] = None, version: str = V_PREVIEW, @@ -78,6 +90,8 @@ def freeze_any( mpy_path = Path(mpy_path).absolute() if mpy_path else CONFIG.mpy_path.absolute() mpy_lib_path = Path(mpy_lib_path).absolute() if mpy_lib_path else CONFIG.mpy_path.absolute() + if version > "v1.23.0" or version in SET_PREVIEW: + checkout_arduino_lib(mpy_path) # if old version of micropython, use the old freeze method if version not in SET_PREVIEW and Version(version) <= Version("1.11"): frozen_stub_path = get_fsp(version, stub_folder) From 687797e5fe015d4a8e707e2d21084c2a99598b3b Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 10 Jul 2024 23:26:02 +0200 Subject: [PATCH 02/57] chore: Cleanup and fix parsing errors in enrich.py and merge_docstubs.py Signed-off-by: Jos Verlinde --- .vscode/launch.json | 12 ++++++++---- src/stubber/codemod/enrich.py | 6 ++++++ src/stubber/publish/merge_docstubs.py | 12 ++++++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 5d26e6a6..a5a1bb7c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,7 +13,6 @@ "cwd": "${workspaceFolder}", "args": [ "-VV", - "list", // "--board", // "SEEED_WIO_TERMINAL", // "PICO", @@ -41,9 +40,14 @@ "cwd": "${workspaceFolder}", "args": [ "-VV", - "get-mcu-stubs", - "--serial", - "/dev/ttyUSB0", + "merge", + "--version", + "preview", + "--port", + "esp8266", + // "get-mcu-stubs", + // "--serial", + // "/dev/ttyUSB0", // "get-frozen", // "--version", // "preview", diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index c644a24c..cc0c7b7d 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -6,6 +6,7 @@ from pathlib import Path from typing import Any, Dict, Optional +from libcst import ParserSyntaxError from libcst.codemod import CodemodContext, diff_code, exec_transform_with_prettyprint from libcst.tool import _default_config # type: ignore from mpflash.logger import log @@ -113,6 +114,7 @@ def enrich_folder( raise FileNotFoundError(f"Source {source_path} does not exist") if not docstub_path.exists(): raise FileNotFoundError(f"Docstub {docstub_path} does not exist") + log.debug(f"Enrich folder {source_path}.") count = 0 # list all the .py and .pyi files in the source folder if source_path.is_file(): @@ -138,6 +140,10 @@ def enrich_folder( # no docstub to enrich with if require_docstub: raise (FileNotFoundError(f"No doc-stub file found for {source_file}")) from e + except (Exception, ParserSyntaxError) as e: + log.error(f"Error parsing {source_file}") + log.exception(e) + continue # run black on the destination folder run_black(source_path) # DO NOT run Autoflake as this removes some relevant (unused) imports diff --git a/src/stubber/publish/merge_docstubs.py b/src/stubber/publish/merge_docstubs.py index fa9d7c56..a1416dfe 100644 --- a/src/stubber/publish/merge_docstubs.py +++ b/src/stubber/publish/merge_docstubs.py @@ -66,10 +66,14 @@ def merge_all_docstubs( log.info(f"skipping {merged_path.name}, no MCU stubs found in {board_path}") continue log.info(f"Merge {candidate['version']} docstubs with boardstubs to {merged_path.name}") - result = copy_and_merge_docstubs(board_path, merged_path, doc_path) - # Add methods from docstubs to the MCU stubs that do not exist in the MCU stubs - # Add the __call__ method to the machine.Pin and pyb.Pin class - add_machine_pin_call(merged_path, candidate["version"]) + try: + result = copy_and_merge_docstubs(board_path, merged_path, doc_path) + # Add methods from docstubs to the MCU stubs that do not exist in the MCU stubs + # Add the __call__ method to the machine.Pin and pyb.Pin class + add_machine_pin_call(merged_path, candidate["version"]) + except Exception as e: + log.error(f"Error parsing {candidate['version']} docstubs: {e}") + continue if result: merged += 1 log.info(f"merged {merged} of {len(candidates)} candidates") From e98f892b1477baf290c74e0d2074a129a21d5c82 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 11 Jul 2024 17:50:07 +0200 Subject: [PATCH 03/57] stubber: docstubs and merge handle stubs in a complex package format foo/__init__.pyi Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 53 ++++++++++++------ src/stubber/codemod/test_enrich.py | 87 ++++++++++++++++++++++++++++++ src/stubber/rst/reader.py | 57 +++++++++++++++----- src/stubber/stubs_from_docs.py | 10 ++-- 4 files changed, 172 insertions(+), 35 deletions(-) create mode 100644 src/stubber/codemod/test_enrich.py diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index cc0c7b7d..4aea4854 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -4,7 +4,7 @@ """ from pathlib import Path -from typing import Any, Dict, Optional +from typing import Any, Dict, List, Optional from libcst import ParserSyntaxError from libcst.codemod import CodemodContext, diff_code, exec_transform_with_prettyprint @@ -48,22 +48,7 @@ def enrich_file( ) # find a matching doc-stub file in the docstub_path - docstub_file = None - if docstub_path.is_file(): - candidates = [docstub_path] - else: - candidates = [] - for ext in [".py", ".pyi"]: - candidates = list(docstub_path.rglob(package_name + ext)) - if package_name[0].lower() == "u": - # also look for candidates without leading u ( usys.py <- sys.py) - candidates += list(docstub_path.rglob(package_name[1:] + ext)) - elif package_name[0] == "_": - # also look for candidates without leading _ ( _rp2.py <- rp2.py ) - candidates += list(docstub_path.rglob(package_name[1:] + ext)) - else: - # also look for candidates with leading u ( sys.py <- usys.py) - candidates += list(docstub_path.rglob("u" + package_name + ext)) + candidates = merge_source_candidates(package_name, docstub_path) for docstub_file in candidates: if docstub_file.exists(): @@ -97,6 +82,40 @@ def enrich_file( return diff_code(old_code, new_code, 5, filename=target_path.name) if diff else new_code +def merge_source_candidates(package_name: str, docstub_path: Path) -> List[Path]: + """Return a list of candidate files in the docstub path that can be used to enrich the provided package_name. + + The package_name is used to find a matching file in the docstub_path. + """ + if docstub_path.is_file(): + candidates = [docstub_path] + return candidates + # selectc from .py and .pyi files + candidates: List[Path] = [] + for ext in [".py", ".pyi"]: + candidates.extend(file_package(package_name, docstub_path, ext)) + if package_name[0].lower() in ["u", "_"]: + # also look for candidates without leading u ( usys.py <- sys.py) + # also look for candidates without leading _ ( _rp2.py <- rp2.py ) + candidates.extend(file_package(package_name[1:], docstub_path, ext)) + else: + # also look for candidates with leading u ( sys.py <- usys.py) + candidates.extend(file_package("u" + package_name, docstub_path, ext)) + return candidates + + +def file_package(name: str, docstub_path: Path, ext: str) -> List[Path]: + """ + Return a list of candidate files in the docstub path that can be used to enrich the provided package_name. + package_name can be ufoo, foo, _foo, foo or foo.bar + """ + candidates: List[Path] = [] + candidates.extend(docstub_path.rglob(name.replace(".", "/") + ext)) + if (docstub_path / name).is_dir(): + candidates.extend(docstub_path.rglob(f"{name}/*{ext}")) + return candidates + + def enrich_folder( source_path: Path, docstub_path: Path, diff --git a/src/stubber/codemod/test_enrich.py b/src/stubber/codemod/test_enrich.py new file mode 100644 index 00000000..5260e80c --- /dev/null +++ b/src/stubber/codemod/test_enrich.py @@ -0,0 +1,87 @@ +from typing import List +import pytest +from pathlib import Path +from stubber.codemod.enrich import merge_source_candidates + + +@pytest.fixture +def docstub_path(tmp_path): + # Create a temporary directory for docstub files + docstub_path = tmp_path / "docstubs" + docstub_path.mkdir(exist_ok=True, parents=True) + + (docstub_path / "one.pyi").touch() + + # Create some docstub files + (docstub_path / "package.py").touch() + (docstub_path / "package.pyi").touch() + (docstub_path / "upackage.py").touch() + (docstub_path / "upackage.pyi").touch() + # for ufoo to foo + (docstub_path / "usys.pyi").touch() + (docstub_path / "sys.pyi").touch() + # from _foo to foo + (docstub_path / "rp2.pyi").touch() + (docstub_path / "_rp2.pyi").touch() + + # dist package format + (docstub_path / "foo").mkdir(exist_ok=True, parents=True) + (docstub_path / "foo" / "__init__.pyi").touch() + + # dist package format + (docstub_path / "bar").mkdir(exist_ok=True, parents=True) + (docstub_path / "bar" / "__init__.pyi").touch() + (docstub_path / "bar" / "barclass.pyi").touch() + + # dist package format + (docstub_path / "machine").mkdir(exist_ok=True, parents=True) + (docstub_path / "machine" / "__init__.pyi").touch() + (docstub_path / "machine" / "Pin.pyi").touch() + (docstub_path / "machine" / "Signal.pyi").touch() + (docstub_path / "machine" / "ADC.pyi").touch() + return docstub_path + + +@pytest.mark.parametrize( + "package_name, expected_candidates", + [ + ( + "package", + [ + "package.py", + "package.pyi", + "upackage.py", + "upackage.pyi", + ], + ), + ("usys", ["usys.pyi", "sys.pyi"]), + ("_rp2", ["rp2.pyi", "_rp2.pyi"]), + ("rp2", ["rp2.pyi"]), + ("nonexistent", []), + ("foo", ["foo/__init__.pyi"]), + ("ufoo", ["foo/__init__.pyi"]), + ("bar", ["bar/__init__.pyi", "bar/barclass.pyi"]), + ( + "machine", + [ + "machine/__init__.pyi", + "machine/Pin.pyi", + "machine/Signal.pyi", + "machine/ADC.pyi", + ], + ), + ("machine.Pin", ["machine/Pin.pyi"]), + ], +) +def test_merge_source_candidates( + package_name: str, + expected_candidates: List[str], + docstub_path: Path, +): + # Test with package name "package" + candidates = merge_source_candidates(package_name, docstub_path) + assert len(candidates) == len(expected_candidates) + for e in expected_candidates: + assert docstub_path / e in candidates + + # todo : test ordering diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index 1c28a674..f5f2b06c 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -90,7 +90,9 @@ class FileReadWriter: """base class for reading rst files""" def __init__(self): - self.filename = "" + self.filename: Path = Path("") + self.modulename: str = "" + self.out_file: str = "__init__.pyi" # input buffer self.rst_text: List[str] = [] self.max_line = 0 @@ -111,6 +113,8 @@ def read_file(self, filename: Path): # some lines now may have \n sin them , so re-join and re-split the lines self.rst_text = "".join(self.rst_text).splitlines(keepends=True) + self.modulename = filename.stem + self.out_file = "__init__.pyi" self.filename = filename.as_posix() # use fwd slashes in origin self.max_line = len(self.rst_text) - 1 @@ -148,7 +152,11 @@ def extend_and_balance_line(self) -> str: """ append = 0 newline = self.rst_text[self.line_no] - while not self.is_balanced(newline) and self.line_no >= 0 and (self.line_no + append + 1) <= self.max_line: + while ( + not self.is_balanced(newline) + and self.line_no >= 0 + and (self.line_no + append + 1) <= self.max_line + ): append += 1 # concat the lines newline += self.rst_text[self.line_no + append] @@ -219,7 +227,9 @@ def at_heading(self, large=False) -> bool: "stop at heading" u_line = self.rst_text[min(self.line_no + 1, self.max_line - 1)].rstrip() # Heading ---, ==, ~~~ - underlined = u_line.startswith("---") or u_line.startswith("===") or u_line.startswith("~~~") + underlined = ( + u_line.startswith("---") or u_line.startswith("===") or u_line.startswith("~~~") + ) if underlined and self.line_no > 0: # check if previous line is a heading line = self.rst_text[self.line_no].strip() @@ -366,9 +376,15 @@ class RSTParser(RSTReader): target = ".py" # py/pyi # TODO: Move to lookup.py PARAM_RE_FIXES = [ - Fix(r"\[angle, time=0\]", "[angle], time=0", is_re=True), # fix: method:: Servo.angle([angle, time=0]) - Fix(r"\[speed, time=0\]", "[speed], time=0", is_re=True), # fix: .. method:: Servo.speed([speed, time=0]) - Fix(r"\[service_id, key=None, \*, \.\.\.\]", "[service_id], [key], *, ...", is_re=True), # fix: network - AbstractNIC.connect + Fix( + r"\[angle, time=0\]", "[angle], time=0", is_re=True + ), # fix: method:: Servo.angle([angle, time=0]) + Fix( + r"\[speed, time=0\]", "[speed], time=0", is_re=True + ), # fix: .. method:: Servo.speed([speed, time=0]) + Fix( + r"\[service_id, key=None, \*, \.\.\.\]", "[service_id], [key], *, ...", is_re=True + ), # fix: network - AbstractNIC.connect ] def __init__(self, v_tag: str) -> None: @@ -432,7 +448,9 @@ def fix_parameters(self, params: str, name: str = "") -> str: def apply_fix(fix: Fix, params: str, name: str = ""): if fix.name and fix.name != name: return params - return re.sub(fix.from_, fix.to, params) if fix.is_re else params.replace(fix.from_, fix.to) + return ( + re.sub(fix.from_, fix.to, params) if fix.is_re else params.replace(fix.from_, fix.to) + ) def create_update_class(self, name: str, params: str, docstr: List[str]): # a bit of a hack: assume no classes in classes or functions in function @@ -493,8 +511,12 @@ def parse_module(self): if "nightly" in self.source_tag: version = V_PREVIEW else: - version = self.source_tag.replace("_", ".") # TODO Use clean_version(self.source_tag) - docstr[0] = f"{docstr[0]}.\n\nMicroPython module: https://docs.micropython.org/en/{version}/library/{module_name}.html" + version = self.source_tag.replace( + "_", "." + ) # TODO Use clean_version(self.source_tag) + docstr[0] = ( + f"{docstr[0]}.\n\nMicroPython module: https://docs.micropython.org/en/{version}/library/{module_name}.html" + ) self.output_dict.name = module_name self.output_dict.add_comment(f"# source version: {self.source_tag}") @@ -526,7 +548,9 @@ def parse_function(self): for this_function in function_names: # Parse return type from docstring - ret_type = return_type_from_context(docstring=docstr, signature=this_function, module=self.current_module) + ret_type = return_type_from_context( + docstring=docstr, signature=this_function, module=self.current_module + ) # defaults name = params = "" @@ -632,7 +656,9 @@ def parse_method(self): params = self.fix_parameters(params, f"{class_name}.{name}") # parse return type from docstring - ret_type = return_type_from_context(docstring=docstr, signature=f"{class_name}.{name}", module=self.current_module) + ret_type = return_type_from_context( + docstring=docstr, signature=f"{class_name}.{name}", module=self.current_module + ) # methods have 4 flavours # - __init__ (self, ) -> None: # - classmethod (cls, ) -> : @@ -753,7 +779,9 @@ def parse_data(self): # deal with documentation wildcards for name in names: - r_type = return_type_from_context(docstring=docstr, signature=name, module=self.current_module, literal=True) + r_type = return_type_from_context( + docstring=docstr, signature=name, module=self.current_module, literal=True + ) if r_type in ["None"]: # None does not make sense r_type = "Incomplete" # Default to Incomplete/ Unknown / int name = self.strip_prefixes(name) @@ -800,9 +828,10 @@ class RSTWriter(RSTParser): def __init__(self, v_tag="v1.xx"): super().__init__(v_tag=v_tag) - def write_file(self, filename: Path) -> bool: + def write_file(self, target: Path) -> bool: self.prepare_output() - return super().write_file(filename) + target.parent.mkdir(parents=True, exist_ok=True) + return super().write_file(target) def prepare_output(self): "Remove trailing spaces and commas from the output." diff --git a/src/stubber/stubs_from_docs.py b/src/stubber/stubs_from_docs.py index 0624faca..8704bcb9 100644 --- a/src/stubber/stubs_from_docs.py +++ b/src/stubber/stubs_from_docs.py @@ -32,8 +32,8 @@ def generate_from_rst( files = get_rst_sources(rst_path, pattern) - # simplify debugging - # files = [f for f in files if f.name == "collections.rst"] + # reduce files for test/debugging + # files = [f for f in files if f.name == "machine.rst"] clean_destination(dst_path) make_docstubs(dst_path, v_tag, release, suffix, files) @@ -81,8 +81,10 @@ def make_docstubs(dst_path: Path, v_tag: str, release: str, suffix: str, files: log.debug(f"Reading: {file}") reader.read_file(file) reader.parse() - fname = (dst_path / file.name).with_suffix(suffix) - reader.write_file(fname) + # Destination = "module.__init__.pyi" + target = dst_path / file.stem / "__init__.pyi" + # fname = (dst_path / file.name).with_suffix(suffix) + reader.write_file(target) if file.stem in U_MODULES: # create umod.py file and mod.py file fname = (dst_path / ("u" + file.name)).with_suffix(suffix) From 5f33b88d6ebb55056443d43b0a310d436dd5b1e2 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 12 Jul 2024 11:38:19 +0200 Subject: [PATCH 04/57] stubber: docstub.pyi refactoring Signed-off-by: Jos Verlinde --- .vscode/launch.json | 4 +-- pyproject.toml | 1 - src/stubber/codemod/enrich.py | 4 +++ src/stubber/publish/missing_class_methods.py | 13 ++++++-- src/stubber/rst/lookup.py | 27 ++++++++++----- src/stubber/rst/reader.py | 35 +++++++++++--------- src/stubber/rst/rst_utils.py | 10 +++++- src/stubber/stubs_from_docs.py | 31 ++++++++++++----- src/stubber/utils/post.py | 15 +++++---- tests/rst/test_returns.py | 29 ++++++++++++++-- tests/rst/test_rst.py | 25 +++++++++----- 11 files changed, 138 insertions(+), 56 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index a5a1bb7c..a8899a5c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -40,11 +40,9 @@ "cwd": "${workspaceFolder}", "args": [ "-VV", - "merge", + "get-docstubs", "--version", "preview", - "--port", - "esp8266", // "get-mcu-stubs", // "--serial", // "/dev/ttyUSB0", diff --git a/pyproject.toml b/pyproject.toml index 7d6162a5..28af8319 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -227,7 +227,6 @@ testpaths = [ "src/stubber", "src/mpflash", "repos/micropython-stubs/tests", - "modules/**/tests", ] norecursedirs = [ ".*", diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 4aea4854..e063eaf5 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -50,10 +50,14 @@ def enrich_file( # find a matching doc-stub file in the docstub_path candidates = merge_source_candidates(package_name, docstub_path) + + + docstub_file = None for docstub_file in candidates: if docstub_file.exists(): break else: + docstub_file = None if not docstub_file: raise FileNotFoundError(f"No doc-stub file found for {target_path}") diff --git a/src/stubber/publish/missing_class_methods.py b/src/stubber/publish/missing_class_methods.py index fbec271e..86e02e65 100644 --- a/src/stubber/publish/missing_class_methods.py +++ b/src/stubber/publish/missing_class_methods.py @@ -24,10 +24,11 @@ def add_machine_pin_call(merged_path: Path, version: str): # first find the __call__ method in the default stubs mod_path = ( - CONFIG.stub_path / f"micropython-{clean_version(version, flat=True)}-docstubs/machine.pyi" + CONFIG.stub_path + / f"micropython-{clean_version(version, flat=True)}-docstubs/machine/Pin.pyi" ) if not mod_path.exists(): - log.error(f"no docstubs found for {version}") + log.error(f"no machine.Pin docstub found for {version}") return False log.trace(f"Parsing {mod_path} for __call__ method") source = mod_path.read_text(encoding="utf-8") @@ -41,8 +42,14 @@ def add_machine_pin_call(merged_path: Path, version: str): return False # then use the CallAdder to add the __call__ method to all machine and pyb stubs - mod_paths = [f for f in merged_path.rglob("*.*") if f.stem in {"machine", "umachine", "pyb"}] + mod_paths = [ + f for f in merged_path.rglob("*.*") if f.stem in ("machine", "umachine", "pyb", "Pin") + ] + if not mod_paths: + log.warning(f"no machine.Pin stubs found for {version}") + return False for mod_path in mod_paths: + log.debug(f"Adding __call__ method to {mod_path}") source = mod_path.read_text(encoding="utf-8") machine_module = cst.parse_module(source) new_module = machine_module.visit(CallAdder(call_finder.call_meth)) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 83f9408f..19ac5ca1 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -229,11 +229,10 @@ class Fix: # - to add missing abstract classes MODULE_GLUE = { - "lcd160cr": ["from .machine import SPI"], # module returns SPI objects defined in machine - "esp32": ["from __future__ import annotations"], # Class methods return Class + "lcd160cr": ["from machine.SPI import SPI"], # module returns SPI objects defined in machine "collections": [ "from queue import Queue", - "from stdlib.collections import OrderedDict as stdlib_OrderedDict, deque as stdlib_deque, namedtuple as stdlib_namedtuple", + "from stdlib.collections import OrderedDict as stdlib_OrderedDict, deque as stdlib_deque, namedtuple as stdlib_namedtuple # type: ignore", ], # dequeu is a subclass "os": [ # "from stdlib.os import uname_result", # uname returns uname_result @@ -245,16 +244,27 @@ class Fix: # const: 3 - paired with param and return typing "micropython": ["Const_T = TypeVar('Const_T',int, float, str, bytes, Tuple) # constant"], # - # "builtins": ["from stdlib.builtins import *"], # integrate STDLIB # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such - "espnow": ["from _espnow import ESPNowBase"], # ESPNowBase is an undocumented base class + "espnow": [ + "from _espnow import ESPNowBase # type: ignore" + ], # ESPNowBase is an undocumented base class + "machine.I2C": ["from .Pin import Pin"], # uses Pin + "machine.Signal": ["from .Pin import Pin"], # uses Pin + "machine.ADC": ["ATTN_0DB:int = ..."], # uses Pin + "machine.RTC": ["from machine import IDLE"], # uses Pin + "machine.UART": ["from machine import IDLE"], # uses Pin + "network": ["from abc import ABC"], # for AbstractNIC + "rp2": ["from .PIO import PIO"], # + "pyb": ["from .UART import UART"], # uses Pin + "pyb.Switch": ["from .Pin import Pin"], # uses Pin } PARAM_FIXES = [ Fix("\\*", "*"), # change weirdly written wildcards \* --> * Fix(r"\**", "*"), # change weirdly written wildcards \* --> * - Fix(r"/*", "*"), # change weirdly written wildcards \* --> * + Fix(r"/*", "*"), # change weirdly written wildcards /* --> * + Fix(r"**", "*"), # change weirdly written wildcards ** --> * Fix(r"/)", ")"), # strange terminator in machine.USBDevice `USBDevice.active(self, [value] /)` Fix("'param'", "param"), # loose notation in documentation # illegal keywords @@ -485,7 +495,6 @@ class Fix: # List of classes and their parent classes that should be added to the class definition CHILD_PARENT_CLASS = { # machine - # SoftSPI is defined before SPI, so baseclass is not yet available - but in a .pyi that is OK "SoftSPI": "SPI", "SoftI2C": "I2C", "Switch": "Pin", @@ -515,10 +524,12 @@ class Fix: "namedtuple": "tuple", "deque": "stdlib_deque", # ESPNow - "ESPNow": "ESPNowBase,Iterator", # causes issue with mypy + "ESPNow": "ESPNowBase, Iterator", # causes issue with mypy "AIOESPNow": "ESPNow", # array "array": "List", + # network + "AbstractNIC": "ABC", } diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index f5f2b06c..9fa8666d 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -90,9 +90,9 @@ class FileReadWriter: """base class for reading rst files""" def __init__(self): - self.filename: Path = Path("") - self.modulename: str = "" - self.out_file: str = "__init__.pyi" + self.filename: str = "" + # self.modulename: str = "" + # self.out_file: str = "__init__.pyi" # input buffer self.rst_text: List[str] = [] self.max_line = 0 @@ -486,11 +486,12 @@ def parse_toc(self): # cleanup toctree toctree = [x.strip() for x in toctree if f"{self.current_module}." in x] # Now parse all files mentioned in the toc - for file in toctree: - # - file_path = CONFIG.mpy_path / "docs" / "library" / file.strip() - self.read_file(file_path) - self.parse() + # sub modules are now processed as individual files + # for file in toctree: + # # + # file_path = CONFIG.mpy_path / "docs" / "library" / file.strip() + # self.read_file(file_path) + # self.parse() # reset this file to done self.rst_text = [] self.line_no = 1 @@ -522,20 +523,24 @@ def parse_module(self): self.output_dict.add_comment(f"# source version: {self.source_tag}") self.output_dict.add_comment(f"# origin module:: {self.filename}") self.output_dict.add_docstr(docstr) - # Add additional imports to allow one module te refer to another + # Add additional imports to allow one module to refer to another if module_name in MODULE_GLUE.keys(): self.output_dict.add_import(MODULE_GLUE[module_name]) def parse_current_module(self): log.trace(f"# {self.line.rstrip()}") - module_name = self.line.split(SEPERATOR)[-1].strip() - mod_comment = f"# + module: {self.current_module}.rst" - self.current_module = module_name + # module_name = self.line.split(SEPERATOR)[-1].strip() + # mod_comment = f"# + module: {self.current_module}.rst" + # now that each .rst is a (sub) module we can process them as such + # log.debug(mod_comment) + # self.current_module = module_name self.current_function = self.current_class = "" - log.debug(mod_comment) - self.output_dict.name = module_name - self.output_dict.add_comment(mod_comment) + self.output_dict.name = self.current_module + # self.output_dict.add_comment(mod_comment) self.line_no += 1 # advance as we did not read any docstring + # Add additional imports to allow one module to refer to another + if self.current_module in MODULE_GLUE.keys(): + self.output_dict.add_import(MODULE_GLUE[self.current_module]) def parse_function(self): log.trace(f"# {self.line.rstrip()}") diff --git a/src/stubber/rst/rst_utils.py b/src/stubber/rst/rst_utils.py index 3ac1b75e..1198d886 100644 --- a/src/stubber/rst/rst_utils.py +++ b/src/stubber/rst/rst_utils.py @@ -499,7 +499,15 @@ def _type_from_context( except IndexError: function_name = signature.strip().strip(":()") - function_name = ".".join((module, function_name)) + if ( + "." in module + and "." in function_name + and module.split(".")[1] == function_name.split(".")[0] + ): + # avoid machine.UART.UART.irq + function_name = function_name = ".".join((module, ".".join(function_name.split(".")[1:]))) + else: + function_name = ".".join((module, function_name)) if function_name in LOOKUP_LIST.keys(): sig_type = LOOKUP_LIST[function_name][0] diff --git a/src/stubber/stubs_from_docs.py b/src/stubber/stubs_from_docs.py index 8704bcb9..c63add11 100644 --- a/src/stubber/stubs_from_docs.py +++ b/src/stubber/stubs_from_docs.py @@ -20,7 +20,7 @@ def generate_from_rst( v_tag: str, release: Optional[str] = None, pattern: str = "*.rst", - suffix: str = ".py", + suffix: str = ".pyi", black: bool = True, ) -> int: dst_path.mkdir(parents=True, exist_ok=True) @@ -33,7 +33,7 @@ def generate_from_rst( files = get_rst_sources(rst_path, pattern) # reduce files for test/debugging - # files = [f for f in files if f.name == "machine.rst"] + # files = [f for f in files if "machine" in f.name] clean_destination(dst_path) make_docstubs(dst_path, v_tag, release, suffix, files) @@ -65,7 +65,7 @@ def clean_destination(dst_path: Path): def get_rst_sources(rst_path: Path, pattern: str) -> List[Path]: """Get the list of rst files to process""" - files = [f for f in rst_path.glob(pattern) if f.stem != "index" and "." not in f.stem] + files = [f for f in rst_path.glob(pattern) if f.stem != "index"] # and "." not in f.stem] # - excluded modules, ones that offer little advantage or cause much problems files = [f for f in files if f.name not in DOCSTUB_SKIP] @@ -82,11 +82,26 @@ def make_docstubs(dst_path: Path, v_tag: str, release: str, suffix: str, files: reader.read_file(file) reader.parse() # Destination = "module.__init__.pyi" - target = dst_path / file.stem / "__init__.pyi" + if "." in file.stem: + target = dst_path / f"{(file.stem).replace('.', '/')}{suffix}" + else: + target = dst_path / file.stem / f"__init__{suffix}" # fname = (dst_path / file.name).with_suffix(suffix) reader.write_file(target) - if file.stem in U_MODULES: - # create umod.py file and mod.py file - fname = (dst_path / ("u" + file.name)).with_suffix(suffix) - reader.write_file(fname) + # if file.stem in U_MODULES: + # # create umod.py file and mod.py file + # fname = (dst_path / ("u" + file.name)).with_suffix(suffix) + # reader.write_file(fname) del reader + for name in U_MODULES: + # create a file "umodule.pyi" for each module + # and add a line : from module import * + # this is to allow the use of the u modules in the code + + # create the file + target = dst_path / f"u{name}.pyi" + with open(target, "w") as f: + f.write(f"# {name} module\n") + f.write(f"# Allow the use of micro-module notation \n\n") + f.write(f"from {name} import * # type: ignore\n") + f.flush() diff --git a/src/stubber/utils/post.py b/src/stubber/utils/post.py index 5ad24fd3..cac782b3 100644 --- a/src/stubber/utils/post.py +++ b/src/stubber/utils/post.py @@ -52,10 +52,13 @@ def run_autoflake(path: Path, capture_output: bool = False, process_pyi: bool = return -1 log.info(f"Running autoflake on: {path}") # create a list of files to be formatted - files: List[str] = [] - files.extend([str(f) for f in path.rglob("*.py")]) + files: List[Path] = [] + files.extend(path.rglob("*.py")) if process_pyi: - files.extend([str(f) for f in path.rglob("*.pyi")]) + files.extend(path.rglob("*.pyi")) + + # do not process umodules as that would remove all imports + files = [f for f in files if not f.name.startswith("u")] # build an argument list autoflake_args = { @@ -75,6 +78,6 @@ def run_autoflake(path: Path, capture_output: bool = False, process_pyi: bool = } # format the files exit_status = 0 - for name in files: - log.debug(f"Running autoflake on: {name}") - exit_status |= autoflake.fix_file(name, args=autoflake_args) + for f in files: + log.debug(f"Running autoflake on: {f}") + exit_status |= autoflake.fix_file(str(f), args=autoflake_args) diff --git a/tests/rst/test_returns.py b/tests/rst/test_returns.py index a5039133..d9cb0c96 100644 --- a/tests/rst/test_returns.py +++ b/tests/rst/test_returns.py @@ -4,7 +4,7 @@ import json # SOT -from stubber.rst.rst_utils import _type_from_context, return_type_from_context # type: ignore +from stubber.rst.rst_utils import _type_from_context, return_type_from_context # type: ignore # mark all tests pytestmark = [pytest.mark.stubber, pytest.mark.doc_stubs] @@ -59,7 +59,9 @@ def make_ids(val): return val -@pytest.mark.parametrize("expected_type, module, signature, docstring", return_type_testcases(), ids=make_ids) +@pytest.mark.parametrize( + "expected_type, module, signature, docstring", return_type_testcases(), ids=make_ids +) def test_returns(module, signature, docstring, expected_type): # return type should be included in the signature # except for classes @@ -69,3 +71,26 @@ def test_returns(module, signature, docstring, expected_type): # assert r["confidence"] >= confidence t = return_type_from_context(docstring=docstring, signature=signature, module=module) assert t == expected_type + + +@pytest.mark.parametrize( + "expected_type, module, signature, docstring", + [ + ( + "Incomplete", + "machine.UART", + ".. method:: UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE)", + "", + ), + ], + ids=make_ids, +) +def test_package_modules(module, signature, docstring, expected_type): + # return type should be included in the signature + # except for classes + # confidence = 0.1 + r = _type_from_context(docstring=docstring, signature=signature, module=module) + assert r["type"] == expected_type + # assert r["confidence"] >= confidence + t = return_type_from_context(docstring=docstring, signature=signature, module=module) + assert t == expected_type diff --git a/tests/rst/test_rst.py b/tests/rst/test_rst.py index 992c70c1..c687f261 100644 --- a/tests/rst/test_rst.py +++ b/tests/rst/test_rst.py @@ -13,6 +13,7 @@ from stubber.rst.lookup import TYPING_IMPORT from stubber.rst.reader import RSTWriter + # SOT from stubber.stubs_from_docs import generate_from_rst @@ -59,7 +60,9 @@ def micropython_repo(testrepo_micropython: Path, testrepo_micropython_lib: Path) # TODO: Source version and tag @pytest.fixture(scope="module") -def rst_stubs(tmp_path_factory: pytest.TempPathFactory, micropython_repo, testrepo_micropython: Path): +def rst_stubs( + tmp_path_factory: pytest.TempPathFactory, micropython_repo, testrepo_micropython: Path +): "Generate stubs from RST files - once for this module" v_tag = micropython_repo # setup our on folder for testing @@ -365,17 +368,21 @@ def test_doc_pyright_obscured_definitions(pyright_results, capsys): for issue in issues: print(f"{issue['message']} in {issue['file']} line {issue['range']['start']['line']}") - assert len(issues) == 0, f"There are {len(issues)} function or class defs that obscure earlier defs" + assert ( + len(issues) == 0 + ), f"There are {len(issues)} function or class defs that obscure earlier defs" @pytest.mark.docfix # @pytest.mark.xfail(reason="upstream docfix needed", condition=XFAIL_DOCFIX) def test_doc_deepsleep_stub(rst_stubs): "Deepsleep stub is generated" - content = read_stub(rst_stubs, "machine.py") + content = read_stub(rst_stubs / "machine", "__init__.pyi") # return type omitted as this is tested seperately found = any(line.startswith("def deepsleep(time_ms") for line in content) - assert found, "machine.deepsleep should be stubbed as a function, not as a class - Upstream Docfix needed" + assert ( + found + ), "machine.deepsleep should be stubbed as a function, not as a class - Upstream Docfix needed" # post version 1.16 documentation has been updated usocket.rst -->socket.rst @@ -386,7 +393,7 @@ def test_doc_socket_class_def(rst_stubs: Path): content = read_stub(rst_stubs, "usocket.py") if content == []: # post version 1.16 documentation has been updated usocket.rst -->socket.rst - content = read_stub(rst_stubs, "socket.py") + content = read_stub(rst_stubs / "socket", "__init__.pyi") found = any(line.startswith("def socket(") for line in content) assert not found, "(u)socket.socket should be stubbed as a class, not as a function" @@ -394,7 +401,7 @@ def test_doc_socket_class_def(rst_stubs: Path): found = any(line.startswith("class socket") for line in content) assert found, "(u)socket.socket classdef should be generated" - # REMOVE FLAKY TESTS - flaky due to formatting + # REMOVE FLAKY TESTS - flaky due to formatting # found = any( # line.lstrip().startswith("def __init__(self, af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP") # for line in content @@ -405,7 +412,7 @@ def test_doc_socket_class_def(rst_stubs: Path): @pytest.mark.parametrize( "modulename, classname", [ - ("uselect", "poll"), # compensated + ("select", "poll"), # compensated ("collections", "deque"), ("collections", "OrderedDict"), ], @@ -414,8 +421,8 @@ def test_doc_socket_class_def(rst_stubs: Path): # @pytest.mark.xfail(reason="upstream docfix needed", condition=XFAIL_DOCFIX) def test_doc_class_not_function_def(rst_stubs: Path, modulename: str, classname: str): "verify `collections.deque` class documented as a function - Upstream Docfix pending" - filename = modulename + ".py" - content = read_stub(rst_stubs, filename) + + content = read_stub(rst_stubs / modulename, "__init__.pyi") if content == [] and modulename[0] == "u": # module name change to select.py in v1.17+ filename = filename[1:] From a30c412250153d0f3f33940e853872542ab7f555 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 12 Jul 2024 12:18:03 +0200 Subject: [PATCH 05/57] stubber: update add_machine_pin_call to new docstub structure Signed-off-by: Jos Verlinde --- src/stubber/publish/missing_class_methods.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/stubber/publish/missing_class_methods.py b/src/stubber/publish/missing_class_methods.py index 86e02e65..41bf6c2a 100644 --- a/src/stubber/publish/missing_class_methods.py +++ b/src/stubber/publish/missing_class_methods.py @@ -23,13 +23,18 @@ def add_machine_pin_call(merged_path: Path, version: str): # and to avoid having to parse the file twice # first find the __call__ method in the default stubs - mod_path = ( - CONFIG.stub_path - / f"micropython-{clean_version(version, flat=True)}-docstubs/machine/Pin.pyi" - ) + for suffix in ["machine/Pin.pyi", "machine.pyi", "machine/__init__.pyi"]: + mod_path = ( + CONFIG.stub_path / f"micropython-{clean_version(version, flat=True)}-docstubs" / suffix + ) + if mod_path.exists(): + break + else: + log.debug(f"{mod_path} not found") if not mod_path.exists(): - log.error(f"no machine.Pin docstub found for {version}") + log.error(f"No machine.Pin.pyi or machine.pyi docstub found for {version}") return False + log.trace(f"Parsing {mod_path} for __call__ method") source = mod_path.read_text(encoding="utf-8") module = cst.parse_module(source) From b85b8063d34a67a52c08a5978c7758c56da4addd Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 12 Jul 2024 13:22:34 +0200 Subject: [PATCH 06/57] stubber: Use ALL matching docstub candidates to enrich Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 46 +++++++++++++++-------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index e063eaf5..14d143f9 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -50,40 +50,34 @@ def enrich_file( # find a matching doc-stub file in the docstub_path candidates = merge_source_candidates(package_name, docstub_path) + # read source file + old_code = current_code = target_path.read_text(encoding="utf-8") - - docstub_file = None + # try to apply all candidates + success = False for docstub_file in candidates: if docstub_file.exists(): - break - else: - - docstub_file = None - if not docstub_file: + log.debug(f"Merge {target_path} from {docstub_file}") + codemod_instance = merge_docstub.MergeCommand(context, docstub_file=docstub_file) + if new_code := exec_transform_with_prettyprint( + codemod_instance, + current_code, + # include_generated=False, + generated_code_marker=config["generated_code_marker"], + # format_code=not args.no_format, + formatter_args=config["formatter"], + # python_version=args.python_version, + ): + current_code = new_code + success = True + if not success: raise FileNotFoundError(f"No doc-stub file found for {target_path}") - log.debug(f"Merge {target_path} from {docstub_file}") - # read source file - old_code = target_path.read_text(encoding="utf-8") - - codemod_instance = merge_docstub.MergeCommand(context, docstub_file=docstub_file) - if not ( - new_code := exec_transform_with_prettyprint( - codemod_instance, - old_code, - # include_generated=False, - generated_code_marker=config["generated_code_marker"], - # format_code=not args.no_format, - formatter_args=config["formatter"], - # python_version=args.python_version, - ) - ): - return None if write_back: log.trace(f"Write back enriched file {target_path}") # write updated code to file - target_path.write_text(new_code, encoding="utf-8") - return diff_code(old_code, new_code, 5, filename=target_path.name) if diff else new_code + target_path.write_text(current_code, encoding="utf-8") + return diff_code(old_code, current_code, 5, filename=target_path.name) if diff else new_code def merge_source_candidates(package_name: str, docstub_path: Path) -> List[Path]: From 241faa56fd03174f89d441369c51a27ff836cb65 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 15 Jul 2024 16:46:59 +0200 Subject: [PATCH 07/57] stubber/docstubs: Skip spaces in python module name. Signed-off-by: Jos Verlinde --- src/stubber/rst/reader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index 9fa8666d..4026d62f 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -329,7 +329,7 @@ def add_link_to_docsstr(block: List[str]): # https://regex101.com/r/5RN8rj/1 # Link to python 3 documentation _l = re.sub( - r"(\s*\|see_cpython_module\|\s+:mod:`python:(?P[\w|\s]*)`)[.]?", + r"(\s*\|see_cpython_module\|\s+:mod:`python:(?P[\w|]*)\s?`)[.]?", r"\g<1> https://docs.python.org/3/library/\g.html .", block[i], ) From d03fa96ced9f21eaf1fbc0cf8824c60fb8275545 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 17 Jul 2024 07:51:22 +0200 Subject: [PATCH 08/57] stubber: Add lookup pyb.hid_* is a tple Signed-off-by: Jos Verlinde --- src/stubber/rst/lookup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 19ac5ca1..eced3a79 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -142,6 +142,8 @@ class Fix: "pyb.hard_reset": ("NoReturn", 0.95), # never returns "pyb.I2C.recv": ("bytes", 0.95), # complex in docstring "pyb.SPI.recv": ("bytes", 0.95), # complex in docstring + "pyb.hid_keyboard": ("Tuple", 0.95), # ? + "pyb.hid_mouse": ("Tuple", 0.95), # plain wrong "ubluetooth.BLE.irq": ("Any", 0.95), # never returns "uctypes.bytearray_at": ("bytearray", 0.95), "uctypes.bytes_at": ("bytes", 0.95), From b2987da37f55f8adbbf9ecd65bbd3adb08dba719 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sat, 27 Jul 2024 00:33:08 +0200 Subject: [PATCH 09/57] stubber: GeneratorExit as Exception. Fix spelling Signed-off-by: Jos Verlinde --- src/stubber/rst/reader.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index 4026d62f..f852861c 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -83,7 +83,7 @@ from stubber.rst.lookup import Fix from stubber.utils.config import CONFIG -SEPERATOR = "::" +SEPARATOR = "::" class FileReadWriter: @@ -223,7 +223,7 @@ def at_anchor(self) -> bool: # return _l.startswith("..") and not any(_l.startswith(a) for a in self.docstring_anchors) # @property - def at_heading(self, large=False) -> bool: + def at_heading(self, large:bool=False) -> bool: "stop at heading" u_line = self.rst_text[min(self.line_no + 1, self.max_line - 1)].rstrip() # Heading ---, ==, ~~~ @@ -288,7 +288,7 @@ def read_docstring(self, large: bool = False) -> List[str]: # remove empty lines at beginning/end of block block = self.clean_docstr(block) # add clickable hyperlinks to CPython docpages - block = self.add_link_to_docsstr(block) + block = self.add_link_to_docstr(block) # make sure the first char of the first line is a capital if len(block) > 0 and len(block[0]) > 0: block[0] = block[0][0].upper() + block[0][1:] @@ -322,7 +322,7 @@ def clean_docstr(block: List[str]): return block @staticmethod - def add_link_to_docsstr(block: List[str]): + def add_link_to_docstr(block: List[str]): """Add clickable hyperlinks to CPython docpages""" for i in range(len(block)): # hyperlink to Cpython doc pages @@ -343,7 +343,7 @@ def add_link_to_docsstr(block: List[str]): # Clean up note and other docstring anchors _l = _l.replace(".. note:: ", "``Note:`` ") _l = _l.replace(".. data:: ", "") - _l = _l.replace(".. admonition:: ", "") + _l = _l.replace(".. admonition:: ", "Admonition:") _l = _l.replace("|see_cpython_module|", "CPython module:") # clean up unsupported escape sequences in rst _l = _l.replace(r"\ ", " ") @@ -357,7 +357,7 @@ def get_rst_hint(self): return m[1] if m else "" def strip_prefixes(self, name: str, strip_mod: bool = True, strip_class: bool = False): - "Remove the modulename. and or the classname. from the begining of a name" + "Remove the modulename. and or the classname. from the beginning of a name" prefixes = self.module_names if strip_mod else [] if strip_class and self.current_class != "": prefixes += [self.current_class] @@ -460,7 +460,9 @@ def create_update_class(self, name: str, params: str, docstr: List[str]): class_def = self.output_dict[full_name] else: parent = CHILD_PARENT_CLASS[name] if name in CHILD_PARENT_CLASS.keys() else "" - if parent == "" and (name.endswith("Error") or name.endswith("Exception")): + if parent == "" and ( + name.endswith("Error") or name.endswith("Exception") or name in {"GeneratorExit"} + ): parent = "Exception" class_def = ClassSourceDict( f"class {name}({parent}):", @@ -499,7 +501,7 @@ def parse_toc(self): def parse_module(self): "parse a module tag and set the module's docstring" log.trace(f"# {self.line.rstrip()}") - module_name = self.line.split(SEPERATOR)[-1].strip() + module_name = self.line.split(SEPARATOR)[-1].strip() self.current_module = module_name self.current_function = self.current_class = "" @@ -529,7 +531,7 @@ def parse_module(self): def parse_current_module(self): log.trace(f"# {self.line.rstrip()}") - # module_name = self.line.split(SEPERATOR)[-1].strip() + # module_name = self.line.split(SEPARATOR)[-1].strip() # mod_comment = f"# + module: {self.current_module}.rst" # now that each .rst is a (sub) module we can process them as such # log.debug(mod_comment) @@ -544,7 +546,7 @@ def parse_current_module(self): def parse_function(self): log.trace(f"# {self.line.rstrip()}") - # this_function = self.line.split(SEPERATOR)[-1].strip() + # this_function = self.line.split(SEPARATOR)[-1].strip() # name = this_function # Get one or more names @@ -577,7 +579,7 @@ def parse_function(self): # fixup parameters params = self.fix_parameters(params, name) # ASSUME no functions in classes, - # so with ther cursor at a function this probably means that we are no longer in a class + # so with the cursor at a function this probably means that we are no longer in a class self.leave_class() fn_def = FunctionSourceDict( @@ -589,7 +591,7 @@ def parse_function(self): def parse_class(self): log.trace(f"# {self.line.rstrip()}") - this_class = self.line.split(SEPERATOR)[-1].strip() # raw + this_class = self.line.split(SEPARATOR)[-1].strip() # raw if "(" in this_class: name, params = this_class.split("(", 2) else: @@ -723,7 +725,7 @@ def lstrip_self(self, params: str): def parse_exception(self): log.trace(f"# {self.line.rstrip()}") - name = self.line.split(SEPERATOR)[1].strip() + name = self.line.split(SEPARATOR)[1].strip() if name == "Exception": # no need to redefine Exception self.line_no += 1 @@ -740,9 +742,9 @@ def parse_name(self, line: Optional[str] = None): "get the constant/function/class name from a line with an identifier" # '.. data:: espnow.MAX_DATA_LEN(=250)\n' if line: - return line.split(SEPERATOR)[-1].strip() + return line.split(SEPARATOR)[-1].strip() else: - return self.line.split(SEPERATOR)[-1].strip() + return self.line.split(SEPARATOR)[-1].strip() def parse_names(self, oneliner: bool = True): """get a list of constant/function/class names from and following a line with an identifier @@ -765,7 +767,7 @@ def parse_names(self, oneliner: bool = True): log.trace("Sequence detected") names.append(self.parse_name(self.rst_text[self.line_no + counter])) counter += 1 - # now advance the linecounter + # now advance the line counter self.line_no += counter - 1 # clean up before returning names = [n.strip() for n in names if n.strip() != "etc."] # remove etc. From 690dfa3dd101f3061a677d8d4c4d5c08d12c9fdb Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sat, 27 Jul 2024 00:36:50 +0200 Subject: [PATCH 10/57] chore: Spelling. Signed-off-by: Jos Verlinde --- .vscode/settings.json | 37 +----------------- cspell.json | 81 ++++++++++++++++++++++++++++++++++++++- src/stubber/rst/lookup.py | 14 +++---- 3 files changed, 87 insertions(+), 45 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2a009ed6..946c0681 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,42 +8,7 @@ "peacock.color": "#9b5f28", "peacock.remoteColor": "#e2b991", "cSpell.words": [ - "aivar", - "annamaa", - "braden", - "chdir", - "cpython", - "createstubs", - "dastultz", - "fname", - "fwid", - "josverl", - "loboris", - "markdownlint", - "mklink", - "mpls", - "mystubs", - "pfalcon", - "pybd", - "pyboard", - "pybricks", - "pylintrc", - "pyright", - "pytest", - "pytests", - "Stubber", - "stubfiles", - "stubgen", - "stuborder", - "sysname", - "testrepo", - "thonny", - "tinypico", - "typeshed", - "ulab", - "unstubbables", - "upysh", - "webrepl" + ], "terminal.integrated.persistentSessionReviveProcess": "never", "workbench.colorCustomizations": { diff --git a/cspell.json b/cspell.json index a7e64703..52870dfc 100644 --- a/cspell.json +++ b/cspell.json @@ -19,9 +19,14 @@ "adcs", "adcx", "adcy", + "AIOESP", + "aiter", "aivar", + "asend", + "atten", "Autoflake", "basicgit", + "baudrate", "boardname", "boardstubs", "braden", @@ -31,21 +36,37 @@ "capsys", "chdir", "codemod", + "configtuple", "cpython", "createstubs", + "currentmodule", "dastultz", + "deadtime", "Decomp", + "deepsleep", + "dequeu", "descr", + "docpages", + "docstr", + "docstream", "docstrings", "docstub", "docstubs", + "espnow", + "extframe", + "firstbit", "fname", + "framebuffer", + "fsobj", "fwid", + "hclk", "imphook", "IPPROTO", "josverl", "jsondb", + "keepends", "libcst", + "linecounter", "loboris", "loguru", "markdownlint", @@ -54,37 +75,93 @@ "micropython", "mklink", "modulelist", + "mpflash", "mpls", "mpremote", "mystubs", "noindex", + "oneliner", + "onewire", "pathnames", + "pclk", "pfalcon", + "prescaler", "pybricks", "pylintrc", "pyright", "pytest", "pytestmark", "pytests", + "readbit", + "readblock", + "readbyte", "reqs", "serialport", + "setfiler", + "setfilter", + "sourcecode", "sourcery", "strerror", "stubfiles", "stubfolder", "stubgen", "stuborder", + "sysclk", "testrepo", + "textblock", "thonny", "tinypico", "toctree", "typeshed", + "UART", "updent", + "uselect", "Verlinde", + "WIZNET", "worklist", - "writeln" + "writebit", + "writeblocks", + "writebyte", + "writeln", + "aivar", + "annamaa", + "braden", + "chdir", + "cpython", + "createstubs", + "dastultz", + "fname", + "fwid", + "josverl", + "loboris", + "markdownlint", + "mklink", + "mpls", + "mystubs", + "pfalcon", + "pybd", + "pyboard", + "pybricks", + "pylintrc", + "pyright", + "pytest", + "pytests", + "stopwords", + "Stubber", + "stubfiles", + "stubgen", + "stuborder", + "sysname", + "testrepo", + "thonny", + "tinypico", + "typeshed", + "ulab", + "unstubbables", + "upysh", + "webrepl" ], "enableFiletypes": [ "!plaintext" ] -} +} \ No newline at end of file diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index eced3a79..1214a36c 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -18,7 +18,7 @@ "U_MODULES", ] -# all possible Types needed for the stubs - exxess types should be removed later , and otherwise won't do much harm +# all possible Types needed for the stubs - excess types should be removed later , and otherwise won't do much harm TYPING_IMPORT: List[str] = [ "from __future__ import annotations", "from typing import IO, Any, Callable, Coroutine, Dict, Generator, Iterator, List, NoReturn, Optional, Tuple, Union, NamedTuple, TypeVar", @@ -288,7 +288,7 @@ class Fix: # pyb.hid((buttons, x, y, z)) Fix( "(buttons, x, y, z)", - "hidtuple:Tuple", + "hid_tuple:Tuple", ), # esp v1.15.2 .. function:: getaddrinfo((hostname, port, lambda)) Fix( @@ -502,16 +502,16 @@ class Fix: "Switch": "Pin", "Signal": "Pin", # uio # unclear regarding deprecation in python 3.12 - # "IOBase": "IO", # DOCME not in documentation + # "IOBase": "IO", # DOC_ME not in documentation "TextIOWrapper": "IO", # "TextIOBase, TextIO", # based on Stdlib "FileIO": "IO", # "RawIOBase, BinaryIO", # based on Stdlib "StringIO": "IO", # "BufferedIOBase, BinaryIO", # based on Stdlib "BytesIO": "IO", # "BufferedIOBase, BinaryIO", # based on Stdlib - "BufferedWriter": "IOBase", # DOCME: not in documentation # "BufferedWriter": "BufferedIOBase", # based on Stdlib + "BufferedWriter": "IOBase", # DOC_ME: not in documentation # "BufferedWriter": "BufferedIOBase", # based on Stdlib # uzlib # "DecompIO": "IO", # https://docs.python.org/3/library/typing.html#other-concrete-types # ------------------------------------------------------------------------------------- - # network - AbstractNIC is definined in docstub network.pyi , but not actually used + # network - AbstractNIC is defined in docstub network.pyi , but not actually used # "WLAN": "AbstractNIC", # "WLANWiPy": "AbstractNIC", # "CC3K": "AbstractNIC", @@ -536,9 +536,9 @@ class Fix: # TODO : implement the execution of this list during merge -# - this is a list of functions, classes methods and constantsn that are not detected at runtime, but are avaialble and documented +# - this is a list of functions, classes methods and constants that are not detected at runtime, but are available and documented # the standard merge only adds documentation to detected functions. -FORCE_NON_DETECED = [ +FORCE_NON_DETECTED = [ ("btree", "Btree", ["esp32", "esp8266"]), # Is not detected runtime ("espnow", "ESPNow.peers_table", ["esp32"]), # Is not detected runtime ] From f9dc78ba98d61766673d434194285e300abcc6ef Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 4 Aug 2024 22:23:22 +0200 Subject: [PATCH 11/57] stubber: Add --no-clean-rst option and notebook to copy stubs. Signed-off-by: Jos Verlinde --- prepare_source_stubs.ipynb | 411 +++++++++++++++++++++++ src/stubber/commands/get_docstubs_cmd.py | 4 +- src/stubber/rst/lookup.py | 13 + src/stubber/rst/reader.py | 44 +-- src/stubber/stubs_from_docs.py | 6 +- src/stubber/update_module_list.py | 4 +- 6 files changed, 451 insertions(+), 31 deletions(-) create mode 100644 prepare_source_stubs.ipynb diff --git a/prepare_source_stubs.ipynb b/prepare_source_stubs.ipynb new file mode 100644 index 00000000..387500c1 --- /dev/null +++ b/prepare_source_stubs.ipynb @@ -0,0 +1,411 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21:23:01 | ℹ️ micropython-stubber 1.23.2a0\n", + "21:23:01 | ℹ️ fetch updates\n", + "21:23:03 | ℹ️ Switching to v1.23.0\n", + "21:23:07 | ℹ️ repos\\micropython v1.23.0\n", + "21:23:07 | ℹ️ repos\\micropython-lib v1.23.0\n", + "21:23:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", + "21:23:08 | ℹ️ Get docstubs for MicroPython v1.23.0\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.py\n", + "i\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.p\n", + "yi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__\n", + ".pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.p\n", + "yi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.py\n", + "i\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", + "21:23:08 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.py\n", + "i\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.py\n", + "i\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.py\n", + "i\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__\n", + ".pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.py\n", + "i\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.py\n", + "i\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.py\n", + "i\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", + "21:23:09 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", + "21:23:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "21:23:14 | ℹ️ Running autoflake on: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n", + "21:23:16 | ℹ️ ::group:: Done\n" + ] + } + ], + "source": [ + "# create docstubs without cleaning up the .rst docstrings\n", + "!stubber docstubs --version stable --no-clean-rst\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# # merge the docstubs with boardstubs to get the non-documented methods and functions\n", + "# !stubber merge --version stable\n", + "# !stubber build --version stable" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Copying array from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying asyncio from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying binascii from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying cmath from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying collections from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying errno from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying gc from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying gzip from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying hashlib from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying heapq from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying io from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying json from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying math from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying os from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying platform from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying random from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying select from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying socket from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying ssl from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying struct from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying sys from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying time from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying zlib from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying _thread from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying bluetooth from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying btree from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying cryptolib from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying deflate from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying framebuf from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying machine from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying micropython from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying neopixel from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying network from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying openamp from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying uctypes from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying vfs from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying wm8960 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying pyb from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying stm from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying lcd160cr from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying wipy from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying esp from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying esp32 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying espnow from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying rp2 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying zephyr from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n" + ] + } + ], + "source": [ + "# copy the merged docstubs to the docs folder\n", + "from pathlib import Path\n", + "import shutil\n", + "\n", + "origins = [\n", + " # standard\n", + " (\"array\", \"\"),\n", + " (\"asyncio\", \"\"),\n", + " (\"binascii\", \"\"),\n", + " # builtins not stubbed - needs to be created manually\n", + " # (\"builtin\", \"\"),\n", + " (\"cmath\", \"\"),\n", + " (\"collections\", \"\"), # not on esp32\n", + " (\"errno\", \"\"),\n", + " (\"gc\", \"\"),\n", + " (\"gzip\", \"\"), # Not in stubs\n", + " (\"hashlib\", \"\"),\n", + " (\"heapq\", \"\"),\n", + " (\"io\", \"\"),\n", + " (\"json\", \"\"),\n", + " (\"math\", \"\"),\n", + " (\"os\", \"\"),\n", + " (\"platform\", \"\"),\n", + " (\"random\", \"\"),\n", + " # (\"re\", \"\"), # Not in stubs\n", + " (\"select\", \"\"),\n", + " (\"socket\", \"\"),\n", + " (\"ssl\", \"\"),\n", + " (\"struct\", \"\"),\n", + " (\"sys\", \"\"),\n", + " (\"time\", \"\"),\n", + " (\"zlib\", \"\"), # Not in stubs\n", + " (\"_thread\", \"\"),\n", + " # micropython specific\n", + " (\"bluetooth\", \"\"),\n", + " (\"btree\", \"\"),\n", + " (\"cryptolib\", \"\"),\n", + " (\"deflate\", \"\"),\n", + " (\"framebuf\", \"\"),\n", + " (\"machine\", \"\"),\n", + " (\"micropython\", \"\"),\n", + " (\"neopixel\", \"\"),\n", + " (\"network\", \"\"),\n", + " (\"openamp\", \"\"), # not in default stubs\n", + " (\"uctypes\", \"\"),\n", + " (\"vfs\", \"\"),\n", + " # drivers\n", + " (\"wm8960\", \"\"),\n", + " # stm32\n", + " (\"pyb\", \"publish/micropython-v1_23_0-stm32-stubs\"),\n", + " (\"stm\", \"publish/micropython-v1_23_0-stm32-stubs\"),\n", + " (\"lcd160cr\", \"publish/micropython-v1_23_0-stm32-stubs\"),\n", + " # Wipy\n", + " (\"wipy\", \"stubs/micropython-v1_23_0_preview-docstubs\"),\n", + " # (\"machine.ADCWiPy\", \"stubs/micropython-v1_23_0_preview-docstubs\"),\n", + " # (\"machine.TimerWiPy\", \"stubs/micropython-v1_23_0_preview-docstubs\"),\n", + " # esp\n", + " (\"esp\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", + " (\"esp32\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", + " (\"espnow\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", + " # rp2\n", + " (\"rp2\", \"publish/micropython-v1_23_0-rp2-stubs\"),\n", + " # Zephyr\n", + " (\"zephyr\", \"stubs/micropython-v1_23_0-docstubs\"),\n", + "]\n", + "\n", + "base_path = Path(\"D:\\\\mypython\\\\micropython-stubber\\\\repos\\\\micropython-stubs\")\n", + "target = Path(\"D:\\\\mypython\\\\autodoc201\\\\docs\\\\stubs\")\n", + "if target.exists():\n", + " shutil.rmtree(target)\n", + "target.mkdir(parents=True, exist_ok=True)\n", + "\n", + "\n", + "for module, source in origins:\n", + " if not source:\n", + " # default\n", + " source = \"stubs/micropython-v1_23_0-docstubs\" # \"publish/micropython-v1_23_0-esp32-stubs\"\n", + " source = \"stubs/micropython-v1_23_0-docstubs\" # \"publish/micropython-v1_23_0-esp32-stubs\"\n", + " source_path = base_path / source\n", + " target_path = target\n", + " try:\n", + " print(f\"Copying {module} from {source_path}.\")\n", + " if (source_path / module).is_dir():\n", + " shutil.copytree(source_path / module, target_path / module, dirs_exist_ok=True)\n", + " else:\n", + " shutil.copy(source_path / f\"{module}.pyi\", target_path)\n", + " # print(f\"Copied {source}\")\n", + "\n", + " except FileExistsError:\n", + " print(f\"FileExistsError: {source_path} \")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/stubber/commands/get_docstubs_cmd.py b/src/stubber/commands/get_docstubs_cmd.py index acbf9fd1..ff10bf01 100644 --- a/src/stubber/commands/get_docstubs_cmd.py +++ b/src/stubber/commands/get_docstubs_cmd.py @@ -47,12 +47,14 @@ "--version", "--tag", default="", type=str, help="Version number to use. [default: Git tag]" ) @click.option("--black/--no-black", "-b/-nb", default=True, help="Run black", show_default=True) +@click.option("--clean-rst/--no-clean-rst", "-b/-nb", default=True, help="remove .rST constructs from the docstrings", show_default=True) @click.pass_context def cli_docstubs( ctx: click.Context, path: Optional[str] = None, target: Optional[str] = None, black: bool = True, + clean_rst: bool = True, basename: Optional[str] = None, version: str = "", ): @@ -88,5 +90,5 @@ def cli_docstubs( dst_path = Path(target) / f"{basename}-{utils.clean_version(version, flat=True)}-docstubs" log.info(f"Get docstubs for MicroPython {utils.clean_version(version, drop_v=False)}") - generate_from_rst(rst_path, dst_path, version, release=release, suffix=".pyi", black=black) + generate_from_rst(rst_path, dst_path, version, release=release, suffix=".pyi", black=black, clean_rst=clean_rst) log.info("::group:: Done") diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 1214a36c..a13aee27 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -12,6 +12,7 @@ "NONE_VERBS", "CHILD_PARENT_CLASS", "PARAM_FIXES", + "PARAM_RE_FIXES", "MODULE_GLUE", "RST_DOC_FIXES", "DOCSTUB_SKIP", @@ -494,6 +495,18 @@ class Fix: ), ] +# and some param fixes that require a regex +PARAM_RE_FIXES = [ + Fix( + r"\[angle, time=0\]", "[angle], time=0", is_re=True + ), # fix: method:: Servo.angle([angle, time=0]) + Fix( + r"\[speed, time=0\]", "[speed], time=0", is_re=True + ), # fix: .. method:: Servo.speed([speed, time=0]) + Fix( + r"\[service_id, key=None, \*, \.\.\.\]", "[service_id], [key], *, ...", is_re=True + ), # fix: network - AbstractNIC.connect +] # List of classes and their parent classes that should be added to the class definition CHILD_PARENT_CLASS = { # machine diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index f852861c..e7b29427 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -73,6 +73,7 @@ CHILD_PARENT_CLASS, MODULE_GLUE, PARAM_FIXES, + PARAM_RE_FIXES, RST_DOC_FIXES, TYPING_IMPORT, ClassSourceDict, @@ -185,6 +186,7 @@ def __init__(self): self.current_module = "" self.current_class = "" self.current_function = "" # function & method + self.clean_rst = True super().__init__() def read_file(self, filename: Path): @@ -223,7 +225,7 @@ def at_anchor(self) -> bool: # return _l.startswith("..") and not any(_l.startswith(a) for a in self.docstring_anchors) # @property - def at_heading(self, large:bool=False) -> bool: + def at_heading(self, large: bool = False) -> bool: "stop at heading" u_line = self.rst_text[min(self.line_no + 1, self.max_line - 1)].rstrip() # Heading ---, ==, ~~~ @@ -294,16 +296,17 @@ def read_docstring(self, large: bool = False) -> List[str]: block[0] = block[0][0].upper() + block[0][1:] return block - @staticmethod - def clean_docstr(block: List[str]): + # @staticmethod + def clean_docstr(self, block: List[str]): """Clean up a docstring""" - # if a Quoted Literal Block , then remove the first character of each line - # https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#quoted-literal-blocks - if block and len(block[0]) > 0 and block[0][0] != " ": - q_char = block[0][0] - if all(l.startswith(q_char) for l in block): - # all lines start with the same character, so skip that character - block = [l[1:] for l in block] + if self.clean_rst: + # if a Quoted Literal Block , then remove the first character of each line + # https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#quoted-literal-blocks + if block and len(block[0]) > 0 and block[0][0] != " ": + q_char = block[0][0] + if all(l.startswith(q_char) for l in block): + # all lines start with the same character, so skip that character + block = [l[1:] for l in block] # rstrip all lines block = [l.rstrip() for l in block] # remove empty lines at beginning/end of block @@ -311,7 +314,6 @@ def clean_docstr(block: List[str]): block = block[1:] while len(block) and len(block[-1]) == 0: block = block[:-1] - # Clean up Synopsis if len(block) and ":synopsis:" in block[0]: block[0] = re.sub( @@ -321,9 +323,11 @@ def clean_docstr(block: List[str]): ) return block - @staticmethod - def add_link_to_docstr(block: List[str]): + def add_link_to_docstr(self, block: List[str]): """Add clickable hyperlinks to CPython docpages""" + if not self.clean_rst: + return block + for i in range(len(block)): # hyperlink to Cpython doc pages # https://regex101.com/r/5RN8rj/1 @@ -374,18 +378,6 @@ class RSTParser(RSTReader): """ target = ".py" # py/pyi - # TODO: Move to lookup.py - PARAM_RE_FIXES = [ - Fix( - r"\[angle, time=0\]", "[angle], time=0", is_re=True - ), # fix: method:: Servo.angle([angle, time=0]) - Fix( - r"\[speed, time=0\]", "[speed], time=0", is_re=True - ), # fix: .. method:: Servo.speed([speed, time=0]) - Fix( - r"\[service_id, key=None, \*, \.\.\.\]", "[service_id], [key], *, ...", is_re=True - ), # fix: network - AbstractNIC.connect - ] def __init__(self, v_tag: str) -> None: super().__init__() @@ -414,7 +406,7 @@ def fix_parameters(self, params: str, name: str = "") -> str: ## Deal with SQUARE brackets first ( Documentation meaning := [optional]) - for fix in self.PARAM_RE_FIXES: + for fix in PARAM_RE_FIXES: params = self.apply_fix(fix, params, name) # ########################################################################################################### diff --git a/src/stubber/stubs_from_docs.py b/src/stubber/stubs_from_docs.py index c63add11..dbe604d7 100644 --- a/src/stubber/stubs_from_docs.py +++ b/src/stubber/stubs_from_docs.py @@ -22,6 +22,7 @@ def generate_from_rst( pattern: str = "*.rst", suffix: str = ".pyi", black: bool = True, + clean_rst: bool = True, ) -> int: dst_path.mkdir(parents=True, exist_ok=True) if not release: @@ -36,7 +37,7 @@ def generate_from_rst( # files = [f for f in files if "machine" in f.name] clean_destination(dst_path) - make_docstubs(dst_path, v_tag, release, suffix, files) + make_docstubs(dst_path, v_tag, release, suffix, files, clean_rst=clean_rst) log.info("::group:: start post processing of retrieved stubs") # do not run stubgen @@ -72,11 +73,12 @@ def get_rst_sources(rst_path: Path, pattern: str) -> List[Path]: return files -def make_docstubs(dst_path: Path, v_tag: str, release: str, suffix: str, files: List[Path]): +def make_docstubs(dst_path: Path, v_tag: str, release: str, suffix: str, files: List[Path],clean_rst:bool): """Create the docstubs""" for file in files: reader = RSTWriter(v_tag) + reader.clean_rst = clean_rst reader.source_release = release log.debug(f"Reading: {file}") reader.read_file(file) diff --git a/src/stubber/update_module_list.py b/src/stubber/update_module_list.py index c7cef5c0..4f694fe6 100644 --- a/src/stubber/update_module_list.py +++ b/src/stubber/update_module_list.py @@ -23,7 +23,7 @@ def read_modules(path: Optional[Path] = None) -> Set[str]: read text files with modules per firmware. each contains the output of help("modules") - lines starting with # are comments. - - split the other lines at whitespace seperator, + - split the other lines at whitespace separator, - and add each module to a set """ path = Path(path or "./data") @@ -73,7 +73,7 @@ def update_module_list(): "upip_utarfile", "upysh", "uasyncio", - "builtins", + # "builtins", # may be used for type hints "re", } log.info("Update the module list in createstubs.py") From b6798b68a705421e89f69b774335dfa59362f9ea Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Tue, 20 Aug 2024 23:04:10 +0200 Subject: [PATCH 12/57] stubber: Add import submodules to docstub generation. Signed-off-by: Jos Verlinde --- prepare_source_stubs.ipynb | 234 +++++++++++++++++++------------------ src/stubber/rst/lookup.py | 3 + src/stubber/rst/reader.py | 23 ++-- 3 files changed, 139 insertions(+), 121 deletions(-) diff --git a/prepare_source_stubs.ipynb b/prepare_source_stubs.ipynb index 387500c1..1bf999fa 100644 --- a/prepare_source_stubs.ipynb +++ b/prepare_source_stubs.ipynb @@ -9,213 +9,213 @@ "name": "stdout", "output_type": "stream", "text": [ - "21:23:01 | ℹ️ micropython-stubber 1.23.2a0\n", - "21:23:01 | ℹ️ fetch updates\n", - "21:23:03 | ℹ️ Switching to v1.23.0\n", - "21:23:07 | ℹ️ repos\\micropython v1.23.0\n", - "21:23:07 | ℹ️ repos\\micropython-lib v1.23.0\n", - "21:23:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", - "21:23:08 | ℹ️ Get docstubs for MicroPython v1.23.0\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:02 | ℹ️ micropython-stubber 1.23.2a0\n", + "22:44:03 | ℹ️ fetch updates\n", + "22:44:06 | ℹ️ Switching to v1.23.0\n", + "22:44:08 | ℹ️ repos\\micropython v1.23.0\n", + "22:44:08 | ℹ️ repos\\micropython-lib v1.23.0\n", + "22:44:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", + "22:44:08 | ℹ️ Get docstubs for MicroPython v1.23.0\n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.py\n", "i\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.p\n", "yi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__\n", ".pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.p\n", "yi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.py\n", "i\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - "21:23:08 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.py\n", "i\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.py\n", "i\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.py\n", "i\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__\n", ".pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.py\n", "i\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:08 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.py\n", "i\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.py\n", "i\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", - "21:23:09 | ℹ️ - Writing to: \n", + "22:44:09 | ℹ️ - Writing to: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", - "21:23:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", - "21:23:14 | ℹ️ Running autoflake on: \n", + "22:44:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "22:44:11 | ℹ️ Running autoflake on: \n", "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n", - "21:23:16 | ℹ️ ::group:: Done\n" + "22:44:12 | ℹ️ ::group:: Done\n" ] } ], @@ -289,7 +289,8 @@ "Copying esp32 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", "Copying espnow from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", "Copying rp2 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying zephyr from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n" + "Copying zephyr from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", + "Copying machine from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n" ] } ], @@ -343,23 +344,28 @@ " # drivers\n", " (\"wm8960\", \"\"),\n", " # stm32\n", - " (\"pyb\", \"publish/micropython-v1_23_0-stm32-stubs\"),\n", - " (\"stm\", \"publish/micropython-v1_23_0-stm32-stubs\"),\n", - " (\"lcd160cr\", \"publish/micropython-v1_23_0-stm32-stubs\"),\n", + " (\"pyb\", \"\"),\n", + " (\"stm\", \"\"),\n", + " (\"lcd160cr\", \"\"),\n", " # Wipy\n", - " (\"wipy\", \"stubs/micropython-v1_23_0_preview-docstubs\"),\n", - " # (\"machine.ADCWiPy\", \"stubs/micropython-v1_23_0_preview-docstubs\"),\n", - " # (\"machine.TimerWiPy\", \"stubs/micropython-v1_23_0_preview-docstubs\"),\n", + " (\"wipy\", \"\"),\n", + " # (\"machine.ADCWiPy\", \"\"),\n", + " # (\"machine.TimerWiPy\", \"\"),\n", " # esp\n", - " (\"esp\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", - " (\"esp32\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", - " (\"espnow\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", + " (\"esp\", \"\"),\n", + " (\"esp32\", \"\"),\n", + " (\"espnow\", \"\"),\n", " # rp2\n", - " (\"rp2\", \"publish/micropython-v1_23_0-rp2-stubs\"),\n", + " (\"rp2\", \"\"),\n", " # Zephyr\n", - " (\"zephyr\", \"stubs/micropython-v1_23_0-docstubs\"),\n", + " (\"zephyr\", \"\"),\n", "]\n", "\n", + "origins.append(\n", + " (\"machine\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", + " \n", + " )\n", + "\n", "base_path = Path(\"D:\\\\mypython\\\\micropython-stubber\\\\repos\\\\micropython-stubs\")\n", "target = Path(\"D:\\\\mypython\\\\autodoc201\\\\docs\\\\stubs\")\n", "if target.exists():\n", diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index a13aee27..6833eb7e 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -174,6 +174,9 @@ class Fix: "_onewire.crc8": ("int", 0.95), # espnow "espnow.ESPNow.recv": ("Union[List, Tuple[None,None]]", 0.95), # list / ? tuple of bytestrings + # esp32 + "esp21.Partition.readblocks": ("None", 0.95), + "esp21.Partition.writeblocks": ("None", 0.95), } diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index e7b29427..d904d4da 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -479,13 +479,22 @@ def parse_toc(self): toctree = self.read_docstring() # cleanup toctree toctree = [x.strip() for x in toctree if f"{self.current_module}." in x] - # Now parse all files mentioned in the toc - # sub modules are now processed as individual files - # for file in toctree: - # # - # file_path = CONFIG.mpy_path / "docs" / "library" / file.strip() - # self.read_file(file_path) - # self.parse() + use_sub_modules = True + + if use_sub_modules: + # add sub modules imports + for file in toctree: + rel_name = file.replace(f"{self.modulename}.", ".").replace(".rst", "") + self.output_dict.add_import(f"from {rel_name} import *") + + else: + # Now parse all files mentioned in the toc + # sub modules are now processed as individual files + for file in toctree: + # + file_path = CONFIG.mpy_path / "docs" / "library" / file.strip() + self.read_file(file_path) + self.parse() # reset this file to done self.rst_text = [] self.line_no = 1 From 00475cec9fcad52ffe9afc3d9ca8c2f6bb978c17 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 21 Aug 2024 21:01:55 +0200 Subject: [PATCH 13/57] stubber: Merge @overload 1 of ... Signed-off-by: Jos Verlinde --- pyproject.toml | 2 +- src/stubber/codemod/merge_docstub.py | 26 +++++++++++-- src/stubber/cst_transformer.py | 18 +++++++-- .../func_overload_add/before.py | 6 +++ .../func_overload_add/doc_stub.py | 20 ++++++++++ .../func_overload_add/expected.py | 21 ++++++++++ tests/test_hipo.py | 38 +++++++++++++++++++ 7 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add/before.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add/expected.py create mode 100644 tests/test_hipo.py diff --git a/pyproject.toml b/pyproject.toml index 28af8319..caf0bb5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -226,7 +226,7 @@ testpaths = [ "tests", "src/stubber", "src/mpflash", - "repos/micropython-stubs/tests", + # "repos/micropython-stubs/tests", ] norecursedirs = [ ".*", diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index c1dc7b34..c4f9d298 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -72,7 +72,7 @@ def __init__(self, context: CodemodContext, docstub_file: Union[Path, str]) -> N # store the annotations self.annotations: Dict[ Tuple[str, ...], # key: tuple of canonical class/function name - Union[TypeInfo, str], # value: TypeInfo + Union[TypeInfo, str, List[TypeInfo]], # value: TypeInfo ] = {} self.comments: List[str] = [] @@ -174,6 +174,14 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c # update the comments updated_node = insert_header_comments(updated_node, self.comments) + # hack to 2nd foo annotation + # updated_node = updated_node.with_changes( children=updated_node.children.append(self.annotations[('foo',)][1])) + + # Insert the new function at the end of the module + new_function = self.annotations[("foo",)][1].def_node + modified_body = tuple(list(updated_node.body) + [new_function]) + updated_node = updated_node.with_changes(body=modified_body) + return updated_node # -------------------------------------------------------------------- @@ -216,6 +224,13 @@ def leave_ClassDef( # for now just return the updated node return updated_node + # ------------------------------------------------------------------------ + # def visit_Iterable(self, node) -> Optional[bool]: + # return True + + # def leave_Iterable(self, node) -> Optional[bool]: + # return True + # ------------------------------------------------------------------------ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: self.stack.append(node.name.value) @@ -231,12 +246,15 @@ def leave_FunctionDef( # no changes to the function return updated_node # update the firmware_stub from the doc_stub information - doc_stub = self.annotations[stack_id] - assert not isinstance(doc_stub, str) + if isinstance(self.annotations[stack_id], List) and self.annotations[stack_id]: + doc_stub = self.annotations[stack_id][0] + else: + doc_stub = self.annotations[stack_id] + assert isinstance(doc_stub, TypeInfo) # first update the docstring updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) # Sometimes the MCU stubs and the doc stubs have different types : FunctionDef / ClassDef - # we need to be carefull not to copy over all the annotations if the types are different + # we need to be careful not to copy over all the annotations if the types are different if doc_stub.def_type == "funcdef": # Same type, we can copy over the annotations # params that should not be overwritten by the doc-stub ? diff --git a/src/stubber/cst_transformer.py b/src/stubber/cst_transformer.py index 1e7d05ab..64d6ec4f 100644 --- a/src/stubber/cst_transformer.py +++ b/src/stubber/cst_transformer.py @@ -44,9 +44,12 @@ def __init__(self): # store the annotations self.annotations: Dict[ Tuple[str, ...], # key: tuple of canonical class/function name - Union[TypeInfo, str], + Union[TypeInfo, + str, + List[TypeInfo], # list of overloads + ], ] = {} - self.comments :List[str] = [] + self.comments: List[str] = [] # ------------------------------------------------------------ def visit_Module(self, node: cst.Module) -> bool: @@ -55,6 +58,7 @@ def visit_Module(self, node: cst.Module) -> bool: if docstr: self.annotations[MODULE_KEY] = docstr return True + def visit_Comment(self, node: cst.Comment) -> None: """ connect comments from the source @@ -105,7 +109,15 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: def_type="funcdef", def_node=node, ) - self.annotations[tuple(self.stack)] = ti + key = tuple(self.stack) + if key not in self.annotations: + self.annotations[key] = [] + assert isinstance(self.annotations[key], list) + self.annotations[key].append(ti) + # if node.decorators[0].decorator.value == "overload": + # # overload functions are not stored in the annotations + # return False + # self.annotations[tuple(self.stack)] = ti def update_append_first_node(self, node): """Store the function/method docstring or function/method sig""" diff --git a/tests/codemods/codemod_test_cases/func_overload_add/before.py b/tests/codemods/codemod_test_cases/func_overload_add/before.py new file mode 100644 index 00000000..125c9efc --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add/before.py @@ -0,0 +1,6 @@ +""" +Overloaded functions +""" + +# fmt: off +def foo(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py new file mode 100644 index 00000000..f67e0742 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py @@ -0,0 +1,20 @@ +""" +Overloaded functions +""" + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add/expected.py b/tests/codemods/codemod_test_cases/func_overload_add/expected.py new file mode 100644 index 00000000..0010c47d --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add/expected.py @@ -0,0 +1,21 @@ +""" +Overloaded functions +""" + +# fmt: off +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/test_hipo.py b/tests/test_hipo.py new file mode 100644 index 00000000..d7ada7b9 --- /dev/null +++ b/tests/test_hipo.py @@ -0,0 +1,38 @@ +# from cmath import isnan +# from hypothesis import assume, given, strategies as st, example, event +# import pytest + + +# def floats(): +# return st.floats(allow_nan=True, allow_infinity=True) + + +# @given(st.integers()) +# @example(42) +# def test_integers(i): +# pass + + +# @pytest.mark.parametrize("m", [3, 5, 6, 7]) +# @given(i=st.integers().filter(lambda x: x % 2 == 0)) +# def test_even_integers(i, m): +# event(f"i mod {m} = {i%m}") +# # event(f"i mod 7 = {i%7}") +# pass + + +# @given(x=floats()) +# def test_negation_is_self_inverse(x): +# assume(not isnan(x)) +# assert x == -(-x) + + +# @given( +# st.lists(st.integers(1, 2000)), +# ) +# def test_sum_is_positive(xs): +# assume(xs) +# # assume(len(xs) > 10) +# assume(all(x > 0 for x in xs)) +# # print(xs) +# assert sum(xs) > 0 From dfc211cc0b2ccdf0faabc6ac4e90fdda242a9d9e Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 21 Aug 2024 22:36:06 +0200 Subject: [PATCH 14/57] stubber: Refactor merge Annotation storage. Signed-off-by: Jos Verlinde --- src/stubber/codemod/merge_docstub.py | 36 ++++++++++--------------- src/stubber/cst_transformer.py | 40 +++++++++++++++------------- 2 files changed, 36 insertions(+), 40 deletions(-) diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index c4f9d298..0eb43000 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -19,6 +19,7 @@ MODULE_KEY, StubTypingCollector, TypeInfo, + AnnoValue, update_def_docstr, update_module_docstr, ) @@ -72,7 +73,8 @@ def __init__(self, context: CodemodContext, docstub_file: Union[Path, str]) -> N # store the annotations self.annotations: Dict[ Tuple[str, ...], # key: tuple of canonical class/function name - Union[TypeInfo, str, List[TypeInfo]], # value: TypeInfo + AnnoValue, + # Union[TypeInfo, str, List[TypeInfo]], # value: TypeInfo ] = {} self.comments: List[str] = [] @@ -150,7 +152,7 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c # update/replace module docstrings # todo: or should we add / merge the docstrings? - docstub_docstr = self.annotations[MODULE_KEY] + docstub_docstr = self.annotations[MODULE_KEY].docstring assert isinstance(docstub_docstr, str) src_docstr = original_node.get_docstring() or "" if src_docstr or docstub_docstr: @@ -176,11 +178,11 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c # hack to 2nd foo annotation # updated_node = updated_node.with_changes( children=updated_node.children.append(self.annotations[('foo',)][1])) - - # Insert the new function at the end of the module - new_function = self.annotations[("foo",)][1].def_node - modified_body = tuple(list(updated_node.body) + [new_function]) - updated_node = updated_node.with_changes(body=modified_body) + if "overload" in docstub_docstr.lower(): + # Insert the new function at the end of the module + new_function = self.annotations[("foo",)].overloads[-1].def_node + modified_body = tuple(list(updated_node.body) + [new_function]) + updated_node = updated_node.with_changes(body=modified_body) return updated_node # -------------------------------------------------------------------- @@ -200,12 +202,11 @@ def leave_ClassDef( # no changes to the class return updated_node # update the firmware_stub from the doc_stub information - doc_stub = self.annotations[stack_id] - assert not isinstance(doc_stub, str) + doc_stub = self.annotations[stack_id].type_info # first update the docstring updated_node = update_def_docstr(updated_node, doc_stub.docstr_node) # Sometimes the MCU stubs and the doc stubs have different types : FunctionDef / ClassDef - # we need to be carefull not to copy over all the annotations if the types are different + # we need to be careful not to copy over all the annotations if the types are different if doc_stub.def_type == "classdef": # Same type, we can copy over all the annotations # combine the decorators from the doc-stub and the firmware stub @@ -224,13 +225,6 @@ def leave_ClassDef( # for now just return the updated node return updated_node - # ------------------------------------------------------------------------ - # def visit_Iterable(self, node) -> Optional[bool]: - # return True - - # def leave_Iterable(self, node) -> Optional[bool]: - # return True - # ------------------------------------------------------------------------ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: self.stack.append(node.name.value) @@ -246,11 +240,9 @@ def leave_FunctionDef( # no changes to the function return updated_node # update the firmware_stub from the doc_stub information - if isinstance(self.annotations[stack_id], List) and self.annotations[stack_id]: - doc_stub = self.annotations[stack_id][0] - else: - doc_stub = self.annotations[stack_id] + doc_stub = self.annotations[stack_id].type_info assert isinstance(doc_stub, TypeInfo) + assert doc_stub # first update the docstring updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) # Sometimes the MCU stubs and the doc stubs have different types : FunctionDef / ClassDef @@ -293,7 +285,7 @@ def leave_FunctionDef( elif doc_stub.def_type == "classdef": # Different type: ClassDef != FuncDef , if doc_stub.def_node and self.replace_functiondef_with_classdef: - # replace the functiondef with the classdef from the stub file + # replace the functionDef with the classdef from the stub file return doc_stub.def_node # for now just return the updated node return updated_node diff --git a/src/stubber/cst_transformer.py b/src/stubber/cst_transformer.py index 64d6ec4f..d093c312 100644 --- a/src/stubber/cst_transformer.py +++ b/src/stubber/cst_transformer.py @@ -1,7 +1,7 @@ """helper functions for stub transformations""" # sourcery skip: snake-case-functions -from dataclasses import dataclass +from dataclasses import dataclass, field from typing import Any, Dict, List, Optional, Sequence, Tuple, Union import libcst as cst @@ -9,14 +9,22 @@ @dataclass class TypeInfo: - "contains the functiondefs and classdefs info read from the stubs source" + "contains the functionDefs and classDefs info read from the stubs source" name: str decorators: Sequence[cst.Decorator] params: Optional[cst.Parameters] = None returns: Optional[cst.Annotation] = None docstr_node: Optional[cst.SimpleStatementLine] = None def_node: Optional[Union[cst.FunctionDef, cst.ClassDef]] = None - def_type: str = "?" # funcdef or classdef or module + def_type: str = "?" # funcDef or classDef or module + + +@dataclass +class AnnoValue: + "The different values for the annotations" + docstring: Optional[str] = "" # strings + type_info: Optional[TypeInfo] = None # simple type + overloads: List[TypeInfo] = field(default_factory=list) # store function / method overloads class TransformError(Exception): @@ -27,7 +35,7 @@ class TransformError(Exception): MODULE_KEY = ("__module",) -MODDOC_KEY = ("__module_docstring",) +MOD_DOCSTR_KEY = ("__module_docstring",) # debug helper _m = cst.parse_module("") @@ -44,10 +52,7 @@ def __init__(self): # store the annotations self.annotations: Dict[ Tuple[str, ...], # key: tuple of canonical class/function name - Union[TypeInfo, - str, - List[TypeInfo], # list of overloads - ], + AnnoValue, # The TypeInfo or list of TypeInfo ] = {} self.comments: List[str] = [] @@ -56,7 +61,7 @@ def visit_Module(self, node: cst.Module) -> bool: """Store the module docstring""" docstr = node.get_docstring() if docstr: - self.annotations[MODULE_KEY] = docstr + self.annotations[MODULE_KEY] = AnnoValue(docstring=docstr) return True def visit_Comment(self, node: cst.Comment) -> None: @@ -86,7 +91,7 @@ def visit_ClassDef(self, node: cst.ClassDef) -> Optional[bool]: def_type="classdef", def_node=node, ) - self.annotations[tuple(self.stack)] = ti + self.annotations[tuple(self.stack)] = AnnoValue(type_info=ti) def leave_ClassDef(self, original_node: cst.ClassDef) -> None: """remove the class name from the stack""" @@ -110,14 +115,13 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: def_node=node, ) key = tuple(self.stack) - if key not in self.annotations: - self.annotations[key] = [] - assert isinstance(self.annotations[key], list) - self.annotations[key].append(ti) - # if node.decorators[0].decorator.value == "overload": - # # overload functions are not stored in the annotations - # return False - # self.annotations[tuple(self.stack)] = ti + if not key in self.annotations: + # store the first function/method signature + self.annotations[key] = AnnoValue(type_info=ti) + + if len(node.decorators) > 0 and node.decorators[0].decorator.value == "overload": # type: ignore + # and store the overloads + self.annotations[key].overloads.append(ti) def update_append_first_node(self, node): """Store the function/method docstring or function/method sig""" From 76a8c0d85507acd329d701a434d327af43a441c3 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 23 Aug 2024 00:07:47 +0200 Subject: [PATCH 15/57] stubber: Merge @overload 2 of ... Signed-off-by: Jos Verlinde --- .gitignore | 3 + .vscode/launch.json | 1 + .vscode/settings.json | 5 +- src/stubber/codemod/merge_docstub.py | 120 ++++++++++++------ src/stubber/cst_transformer.py | 4 +- .../func_overload_101/before.py | 6 + .../func_overload_101/doc_stub.py | 13 ++ .../func_overload_101/expected.py | 12 ++ .../before.py | 2 +- .../doc_stub.py | 3 + .../expected.py | 3 +- .../func_overload_add_3/before.py | 6 + .../func_overload_add_3/doc_stub.py | 32 +++++ .../func_overload_add_3/expected.py | 31 +++++ .../func_overload_add_3_impl/before.py | 9 ++ .../func_overload_add_3_impl/doc_stub.py | 40 ++++++ .../func_overload_add_3_impl/expected.py | 34 +++++ .../func_overload_add_3_ordered/before.py | 9 ++ .../func_overload_add_3_ordered/doc_stub.py | 32 +++++ .../func_overload_add_3_ordered/expected.py | 34 +++++ .../meth_overload_add_2/before.py | 7 + .../meth_overload_add_2/doc_stub.py | 24 ++++ .../meth_overload_add_2/expected.py | 22 ++++ 23 files changed, 411 insertions(+), 41 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/func_overload_101/before.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_101/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_101/expected.py rename tests/codemods/codemod_test_cases/{func_overload_add => func_overload_add_2}/before.py (100%) rename tests/codemods/codemod_test_cases/{func_overload_add => func_overload_add_2}/doc_stub.py (88%) rename tests/codemods/codemod_test_cases/{func_overload_add => func_overload_add_2}/expected.py (89%) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3/before.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3/expected.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.py create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_2/before.py create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_2/expected.py diff --git a/.gitignore b/.gitignore index 65c0527f..fbd118fc 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,6 @@ codecov.exe src/mpflash/coverag* Bugs to fix-MPFlash.md + +# no hypothesis patches +**/.hypothesis diff --git a/.vscode/launch.json b/.vscode/launch.json index a8899a5c..516360c0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -43,6 +43,7 @@ "get-docstubs", "--version", "preview", + "--no-clean-rst", // "get-mcu-stubs", // "--serial", // "/dev/ttyUSB0", diff --git a/.vscode/settings.json b/.vscode/settings.json index 946c0681..4aa7c900 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,10 @@ "peacock.color": "#9b5f28", "peacock.remoteColor": "#e2b991", "cSpell.words": [ - + "asname", + "classdef", + "functiondef", + "stubfile" ], "terminal.integrated.persistentSessionReviveProcess": "never", "workbench.colorCustomizations": { diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 0eb43000..2ae41d56 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -7,7 +7,7 @@ # import argparse from pathlib import Path -from typing import Dict, List, Optional, Tuple, Union +from typing import Dict, List, Optional, Tuple, TypeVar, Union import libcst as cst from libcst.codemod import CodemodContext, VisitorBasedCodemodCommand @@ -147,43 +147,83 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c ) # -------------------------------------------------------------------- # update the docstring. - if MODULE_KEY not in self.annotations: - return updated_node + if MODULE_KEY in self.annotations: + + # update/replace module docstrings + # todo: or should we add / merge the docstrings? + docstub_docstr = self.annotations[MODULE_KEY].docstring + assert isinstance(docstub_docstr, str) + src_docstr = original_node.get_docstring() or "" + if src_docstr or docstub_docstr: + if docstub_docstr.strip() != src_docstr.strip(): + if src_docstr: + new_docstr = f'"""\n' + docstub_docstr + "\n\n---\n" + src_docstr + '\n"""' + else: + new_docstr = f'"""\n' + docstub_docstr + '\n"""' - # update/replace module docstrings - # todo: or should we add / merge the docstrings? - docstub_docstr = self.annotations[MODULE_KEY].docstring - assert isinstance(docstub_docstr, str) - src_docstr = original_node.get_docstring() or "" - if src_docstr or docstub_docstr: - if docstub_docstr.strip() != src_docstr.strip(): - if src_docstr: - new_docstr = f'"""\n' + docstub_docstr + "\n\n---\n" + src_docstr + '\n"""' - else: - new_docstr = f'"""\n' + docstub_docstr + '\n"""' - - docstr_node = cst.SimpleStatementLine( - body=[ - cst.Expr( - value=cst.SimpleString( - value=new_docstr, + docstr_node = cst.SimpleStatementLine( + body=[ + cst.Expr( + value=cst.SimpleString( + value=new_docstr, + ) ) - ) - ] - ) - updated_node = update_module_docstr(updated_node, docstr_node) + ] + ) + updated_node = update_module_docstr(updated_node, docstr_node) # -------------------------------------------------------------------- # update the comments updated_node = insert_header_comments(updated_node, self.comments) + # -------------------------------------------------------------------- + # make sure that any @overloads that are in the docstub are also in the firmware stub # hack to 2nd foo annotation # updated_node = updated_node.with_changes( children=updated_node.children.append(self.annotations[('foo',)][1])) - if "overload" in docstub_docstr.lower(): - # Insert the new function at the end of the module - new_function = self.annotations[("foo",)].overloads[-1].def_node - modified_body = tuple(list(updated_node.body) + [new_function]) - updated_node = updated_node.with_changes(body=modified_body) + updated_node = self.add_missed_overloads(updated_node, stack_id=()) + + return updated_node + + Mod_Class_T = TypeVar("Mod_Class_T", cst.Module, cst.ClassDef) + + def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mod_Class_T: + """ + Add any missing overloads to the updated_node + + """ + missing_overloads = [] + scope_keys = [k for k in self.annotations.keys() if k[: (len(stack_id))] == stack_id] + + for key in scope_keys: + for overload in self.annotations[key].overloads: + missing_overloads.append(overload.def_node) + self.annotations[key].overloads = [] # remove for list, assume works + + if missing_overloads: + if isinstance(updated_node, cst.Module): + updated_body = list(updated_node.body) # type: ignore + elif isinstance(updated_node, cst.ClassDef): + updated_body = list(updated_node.body.body) # type: ignore + else: + raise ValueError(f"Unsupported node type: {updated_node}") + # insert each overload just after a function with the same name + # reversed to keep insertions in same order as in the docstub + for overload in reversed(missing_overloads): + for i, node in enumerate(updated_body): + if ( + isinstance(node, cst.FunctionDef) + and node.name.value == overload.name.value + ): + break + updated_body.insert(i + 1, overload) + + if isinstance(updated_node, cst.Module): + updated_node = updated_node.with_changes(body=tuple(updated_body)) + elif isinstance(updated_node, cst.ClassDef): + b1 = updated_node.body.with_changes(body=tuple(updated_body)) + updated_node = updated_node.with_changes( body = b1) + + # cst.IndentedBlock(body=tuple(updated_body))) # type: ignore return updated_node # -------------------------------------------------------------------- @@ -216,14 +256,16 @@ def leave_ClassDef( if updated_node.decorators: new_decorators.extend(updated_node.decorators) - return updated_node.with_changes( + updated_node = updated_node.with_changes( decorators=new_decorators, bases=doc_stub.def_node.bases, # type: ignore ) - else: - # Different type: ClassDef != FuncDef , - # for now just return the updated node - return updated_node + # else: + # Different type: ClassDef != FuncDef , + # for now just return the updated node + # Add any missing methods overloads + updated_node = self.add_missed_overloads(updated_node, stack_id) + return updated_node # ------------------------------------------------------------------------ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: @@ -241,8 +283,13 @@ def leave_FunctionDef( return updated_node # update the firmware_stub from the doc_stub information doc_stub = self.annotations[stack_id].type_info - assert isinstance(doc_stub, TypeInfo) - assert doc_stub + # Check if it is an @overload decorator + if any(dec.decorator.value == "overload" for dec in doc_stub.decorators) and self.annotations[stack_id].overloads: # type: ignore + # If there are overloads in the documentation , lets use the first one + doc_stub = self.annotations[stack_id].overloads.pop(0) + + # assert isinstance(doc_stub, TypeInfo) + # assert doc_stub # first update the docstring updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) # Sometimes the MCU stubs and the doc stubs have different types : FunctionDef / ClassDef @@ -273,6 +320,7 @@ def leave_FunctionDef( new_decorators = [] if doc_stub.decorators: new_decorators.extend(doc_stub.decorators) + if updated_node.decorators: new_decorators.extend(updated_node.decorators) diff --git a/src/stubber/cst_transformer.py b/src/stubber/cst_transformer.py index d093c312..1d0f28b5 100644 --- a/src/stubber/cst_transformer.py +++ b/src/stubber/cst_transformer.py @@ -118,8 +118,8 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: if not key in self.annotations: # store the first function/method signature self.annotations[key] = AnnoValue(type_info=ti) - - if len(node.decorators) > 0 and node.decorators[0].decorator.value == "overload": # type: ignore + + if any(dec.decorator.value == "overload" for dec in node.decorators): # type: ignore # and store the overloads self.annotations[key].overloads.append(ti) diff --git a/tests/codemods/codemod_test_cases/func_overload_101/before.py b/tests/codemods/codemod_test_cases/func_overload_101/before.py new file mode 100644 index 00000000..555d0f1f --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_101/before.py @@ -0,0 +1,6 @@ +# fmt: off +""" +Overloaded functions from python docs +""" + +def process(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_101/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_101/doc_stub.py new file mode 100644 index 00000000..a57fbd05 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_101/doc_stub.py @@ -0,0 +1,13 @@ +""" +Overloaded functions from python docs +""" + +from typing import overload + + +@overload +def process(response: None) -> None: ... +@overload +def process(response: int) -> tuple[int, str]: ... +@overload +def process(response: bytes) -> str: ... diff --git a/tests/codemods/codemod_test_cases/func_overload_101/expected.py b/tests/codemods/codemod_test_cases/func_overload_101/expected.py new file mode 100644 index 00000000..4bc9e1e5 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_101/expected.py @@ -0,0 +1,12 @@ +# fmt: off +""" +Overloaded functions from python docs +""" +from typing import overload + +@overload +def process(response: None) -> None: ... +@overload +def process(response: int) -> tuple[int, str]: ... +@overload +def process(response: bytes) -> str: ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add/before.py b/tests/codemods/codemod_test_cases/func_overload_add_2/before.py similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add/before.py rename to tests/codemods/codemod_test_cases/func_overload_add_2/before.py index 125c9efc..d7c6f5ef 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add/before.py +++ b/tests/codemods/codemod_test_cases/func_overload_add_2/before.py @@ -1,6 +1,6 @@ +# fmt: off """ Overloaded functions """ -# fmt: off def foo(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.py similarity index 88% rename from tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py rename to tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.py index f67e0742..6bf8088b 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add/doc_stub.py +++ b/tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.py @@ -2,6 +2,9 @@ Overloaded functions """ +from typing import overload + + @overload def foo(value: int) -> None: """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_2/expected.py similarity index 89% rename from tests/codemods/codemod_test_cases/func_overload_add/expected.py rename to tests/codemods/codemod_test_cases/func_overload_add_2/expected.py index 0010c47d..7fd44af8 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add/expected.py +++ b/tests/codemods/codemod_test_cases/func_overload_add_2/expected.py @@ -1,8 +1,9 @@ +# fmt: off """ Overloaded functions """ +from typing import overload -# fmt: off @overload def foo(value: int) -> None: """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/before.py b/tests/codemods/codemod_test_cases/func_overload_add_3/before.py new file mode 100644 index 00000000..d7c6f5ef --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3/before.py @@ -0,0 +1,6 @@ +# fmt: off +""" +Overloaded functions +""" + +def foo(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.py new file mode 100644 index 00000000..2a782de0 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.py @@ -0,0 +1,32 @@ +""" +Overloaded functions +""" + +from typing import overload + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_3/expected.py new file mode 100644 index 00000000..a34088a1 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3/expected.py @@ -0,0 +1,31 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.py b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.py new file mode 100644 index 00000000..f1692f55 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.py @@ -0,0 +1,9 @@ +# fmt: off +""" +Overloaded functions +""" + +def foo(): ... + + +def process(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.py new file mode 100644 index 00000000..e9e3229c --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.py @@ -0,0 +1,40 @@ +""" +Overloaded functions +""" + +from typing import overload + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... + + +def foo(value: int | str | None) -> None | str: + """ + implementation of overloaded function - + MUST BE DROPPED + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.py new file mode 100644 index 00000000..42cae34d --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.py @@ -0,0 +1,34 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... + + +def process(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.py b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.py new file mode 100644 index 00000000..d829f7c7 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.py @@ -0,0 +1,9 @@ +# fmt: off +""" +Overloaded functions +""" + +def foo(): ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.py new file mode 100644 index 00000000..2a782de0 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.py @@ -0,0 +1,32 @@ +""" +Overloaded functions +""" + +from typing import overload + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.py new file mode 100644 index 00000000..55c85039 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.py @@ -0,0 +1,34 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/before.py b/tests/codemods/codemod_test_cases/meth_overload_add_2/before.py new file mode 100644 index 00000000..108967c2 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_2/before.py @@ -0,0 +1,7 @@ +# fmt: off +""" +Overloaded methods +""" + +class Parrot: + def speak(): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.py b/tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.py new file mode 100644 index 00000000..e918ce2b --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.py @@ -0,0 +1,24 @@ +""" +Overloaded methods +""" + +from typing import overload + + +class Parrot: + + @overload + def speak(number: int): + """ + Speak a number + First overload + """ + ... + + @overload + def speak(words: str): + """ + Speak a word + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/expected.py b/tests/codemods/codemod_test_cases/meth_overload_add_2/expected.py new file mode 100644 index 00000000..ec4ec5c0 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_2/expected.py @@ -0,0 +1,22 @@ +# fmt: off +""" +Overloaded methods +""" +from typing import overload + +class Parrot: + @overload + def speak(number: int): + """ + Speak a number + First overload + """ + ... + + @overload + def speak(words: str): + """ + Speak a word + Second overload + """ + ... From 62b206f676d3aa751e057d497b7ef4ae49cac0a3 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 23 Aug 2024 21:49:28 +0200 Subject: [PATCH 16/57] stubber: Merge overloads, fix adding unused overloads. Signed-off-by: Jos Verlinde --- src/stubber/codemod/merge_docstub.py | 7 ++-- .../{before.py => before.pyi} | 0 .../{doc_stub.py => doc_stub.pyi} | 0 .../{expected.py => expected.pyi} | 0 .../func_overload_101/output.pyi | 12 +++++++ .../{before.py => before.pyi} | 0 .../{doc_stub.py => doc_stub.pyi} | 0 .../{expected.py => expected.pyi} | 0 .../func_overload_add_2/output.pyi | 22 ++++++++++++ .../{before.py => before.pyi} | 0 .../{doc_stub.py => doc_stub.pyi} | 0 .../{expected.py => expected.pyi} | 0 .../func_overload_add_3/output.pyi | 31 +++++++++++++++++ .../{before.py => before.pyi} | 0 .../{doc_stub.py => doc_stub.pyi} | 0 .../{expected.py => expected.pyi} | 0 .../func_overload_add_3_impl/output.pyi | 34 +++++++++++++++++++ .../{before.py => before.pyi} | 0 .../{doc_stub.py => doc_stub.pyi} | 0 .../{expected.py => expected.pyi} | 0 .../func_overload_add_3_ordered/output.pyi | 34 +++++++++++++++++++ .../func_overload_add_no_match/before.pyi | 6 ++++ .../func_overload_add_no_match/doc_stub.pyi | 23 +++++++++++++ .../func_overload_add_no_match/expected.pyi | 7 ++++ .../func_overload_add_no_match/output.pyi | 7 ++++ .../{before.py => before.pyi} | 0 .../{doc_stub.py => doc_stub.pyi} | 0 .../{expected.py => expected.pyi} | 0 .../meth_overload_add_2/output.pyi | 22 ++++++++++++ .../meth_overload_add_no_match/before.pyi | 11 ++++++ .../meth_overload_add_no_match/doc_stub.pyi | 24 +++++++++++++ .../meth_overload_add_no_match/expected.pyi | 12 +++++++ .../meth_overload_add_no_match/output.pyi | 12 +++++++ 33 files changed, 262 insertions(+), 2 deletions(-) rename tests/codemods/codemod_test_cases/func_overload_101/{before.py => before.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_101/{doc_stub.py => doc_stub.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_101/{expected.py => expected.pyi} (100%) create mode 100644 tests/codemods/codemod_test_cases/func_overload_101/output.pyi rename tests/codemods/codemod_test_cases/func_overload_add_2/{before.py => before.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_2/{doc_stub.py => doc_stub.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_2/{expected.py => expected.pyi} (100%) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi rename tests/codemods/codemod_test_cases/func_overload_add_3/{before.py => before.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_3/{doc_stub.py => doc_stub.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_3/{expected.py => expected.pyi} (100%) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi rename tests/codemods/codemod_test_cases/func_overload_add_3_impl/{before.py => before.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_3_impl/{doc_stub.py => doc_stub.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_3_impl/{expected.py => expected.pyi} (100%) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi rename tests/codemods/codemod_test_cases/func_overload_add_3_ordered/{before.py => before.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_3_ordered/{doc_stub.py => doc_stub.pyi} (100%) rename tests/codemods/codemod_test_cases/func_overload_add_3_ordered/{expected.py => expected.pyi} (100%) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_match/before.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_match/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi rename tests/codemods/codemod_test_cases/meth_overload_add_2/{before.py => before.pyi} (100%) rename tests/codemods/codemod_test_cases/meth_overload_add_2/{doc_stub.py => doc_stub.pyi} (100%) rename tests/codemods/codemod_test_cases/meth_overload_add_2/{expected.py => expected.pyi} (100%) create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_no_match/before.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_no_match/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 2ae41d56..330a4727 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -209,19 +209,22 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo # insert each overload just after a function with the same name # reversed to keep insertions in same order as in the docstub for overload in reversed(missing_overloads): + matched = False for i, node in enumerate(updated_body): if ( isinstance(node, cst.FunctionDef) and node.name.value == overload.name.value ): + matched = True break - updated_body.insert(i + 1, overload) + if matched: + updated_body.insert(i + 1, overload) if isinstance(updated_node, cst.Module): updated_node = updated_node.with_changes(body=tuple(updated_body)) elif isinstance(updated_node, cst.ClassDef): b1 = updated_node.body.with_changes(body=tuple(updated_body)) - updated_node = updated_node.with_changes( body = b1) + updated_node = updated_node.with_changes(body=b1) # cst.IndentedBlock(body=tuple(updated_body))) # type: ignore return updated_node diff --git a/tests/codemods/codemod_test_cases/func_overload_101/before.py b/tests/codemods/codemod_test_cases/func_overload_101/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_101/before.py rename to tests/codemods/codemod_test_cases/func_overload_101/before.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_101/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_101/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_101/doc_stub.py rename to tests/codemods/codemod_test_cases/func_overload_101/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_101/expected.py b/tests/codemods/codemod_test_cases/func_overload_101/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_101/expected.py rename to tests/codemods/codemod_test_cases/func_overload_101/expected.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_101/output.pyi b/tests/codemods/codemod_test_cases/func_overload_101/output.pyi new file mode 100644 index 00000000..4bc9e1e5 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_101/output.pyi @@ -0,0 +1,12 @@ +# fmt: off +""" +Overloaded functions from python docs +""" +from typing import overload + +@overload +def process(response: None) -> None: ... +@overload +def process(response: int) -> tuple[int, str]: ... +@overload +def process(response: bytes) -> str: ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2/before.py b/tests/codemods/codemod_test_cases/func_overload_add_2/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_2/before.py rename to tests/codemods/codemod_test_cases/func_overload_add_2/before.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.py rename to tests/codemods/codemod_test_cases/func_overload_add_2/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_2/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_2/expected.py rename to tests/codemods/codemod_test_cases/func_overload_add_2/expected.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi new file mode 100644 index 00000000..7fd44af8 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi @@ -0,0 +1,22 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/before.py b/tests/codemods/codemod_test_cases/func_overload_add_3/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3/before.py rename to tests/codemods/codemod_test_cases/func_overload_add_3/before.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.py rename to tests/codemods/codemod_test_cases/func_overload_add_3/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_3/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3/expected.py rename to tests/codemods/codemod_test_cases/func_overload_add_3/expected.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi new file mode 100644 index 00000000..a34088a1 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi @@ -0,0 +1,31 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.py b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.py rename to tests/codemods/codemod_test_cases/func_overload_add_3_impl/before.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.py rename to tests/codemods/codemod_test_cases/func_overload_add_3_impl/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.py rename to tests/codemods/codemod_test_cases/func_overload_add_3_impl/expected.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi new file mode 100644 index 00000000..42cae34d --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi @@ -0,0 +1,34 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... + + +def process(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.py b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.py rename to tests/codemods/codemod_test_cases/func_overload_add_3_ordered/before.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.py b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.py rename to tests/codemods/codemod_test_cases/func_overload_add_3_ordered/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.py b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.py rename to tests/codemods/codemod_test_cases/func_overload_add_3_ordered/expected.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi new file mode 100644 index 00000000..55c85039 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi @@ -0,0 +1,34 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + + +@overload +def foo(value: str) -> None: + """ + Get foo string + Third overload + """ + ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_match/before.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_match/before.pyi new file mode 100644 index 00000000..4a1a9b62 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_match/before.pyi @@ -0,0 +1,6 @@ +# fmt: off +""" +Overloaded functions +""" + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_match/doc_stub.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_match/doc_stub.pyi new file mode 100644 index 00000000..6bf8088b --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_match/doc_stub.pyi @@ -0,0 +1,23 @@ +""" +Overloaded functions +""" + +from typing import overload + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi new file mode 100644 index 00000000..a6c03676 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi @@ -0,0 +1,7 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi new file mode 100644 index 00000000..a6c03676 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi @@ -0,0 +1,7 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/before.py b/tests/codemods/codemod_test_cases/meth_overload_add_2/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/meth_overload_add_2/before.py rename to tests/codemods/codemod_test_cases/meth_overload_add_2/before.pyi diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.py b/tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.py rename to tests/codemods/codemod_test_cases/meth_overload_add_2/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/expected.py b/tests/codemods/codemod_test_cases/meth_overload_add_2/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/meth_overload_add_2/expected.py rename to tests/codemods/codemod_test_cases/meth_overload_add_2/expected.pyi diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi new file mode 100644 index 00000000..ec4ec5c0 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi @@ -0,0 +1,22 @@ +# fmt: off +""" +Overloaded methods +""" +from typing import overload + +class Parrot: + @overload + def speak(number: int): + """ + Speak a number + First overload + """ + ... + + @overload + def speak(words: str): + """ + Speak a word + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/before.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/before.pyi new file mode 100644 index 00000000..2e3de7b2 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/before.pyi @@ -0,0 +1,11 @@ +# fmt: off +""" +Overloaded methods +""" + +class Parrot: + def talk(): ... + + +class Dog: + def speak(): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/doc_stub.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/doc_stub.pyi new file mode 100644 index 00000000..e918ce2b --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/doc_stub.pyi @@ -0,0 +1,24 @@ +""" +Overloaded methods +""" + +from typing import overload + + +class Parrot: + + @overload + def speak(number: int): + """ + Speak a number + First overload + """ + ... + + @overload + def speak(words: str): + """ + Speak a word + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi new file mode 100644 index 00000000..1b54dec7 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi @@ -0,0 +1,12 @@ +# fmt: off +""" +Overloaded methods +""" +from typing import overload + +class Parrot: + def talk(): ... + + +class Dog: + def speak(): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi new file mode 100644 index 00000000..1b54dec7 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi @@ -0,0 +1,12 @@ +# fmt: off +""" +Overloaded methods +""" +from typing import overload + +class Parrot: + def talk(): ... + + +class Dog: + def speak(): ... From 21accc519b65ddece22fe084b34197ed6a51a61c Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 23 Aug 2024 23:15:59 +0200 Subject: [PATCH 17/57] stubber: Docstubs tweak no-clean-rst actions. Signed-off-by: Jos Verlinde --- src/stubber/rst/lookup.py | 2 -- src/stubber/rst/reader.py | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 6833eb7e..b3cefc08 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -74,8 +74,6 @@ class Fix: # also applies correction for some classes are documented as functions RST_DOC_FIXES: List[Tuple[str, str]] = [ - # remove rst highlights from docstrings - (":class: attention\n", ""), # ------------------------------------------------------------------------------------------------ # re.rst - function and class with the same name # done: issue https://github.com/micropython/micropython/issues/8273 diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index d904d4da..5ee926bd 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -324,7 +324,8 @@ def clean_docstr(self, block: List[str]): return block def add_link_to_docstr(self, block: List[str]): - """Add clickable hyperlinks to CPython docpages""" + """Add clickable hyperlinks to CPython docpages, + and clean the docstring from rst constructs""" if not self.clean_rst: return block @@ -348,6 +349,9 @@ def add_link_to_docstr(self, block: List[str]): _l = _l.replace(".. note:: ", "``Note:`` ") _l = _l.replace(".. data:: ", "") _l = _l.replace(".. admonition:: ", "Admonition:") + # remove rst highlights from docstrings + _l = _l.replace(":class: attention\n", "") + # Sphinx directive to link to CPython documentation _l = _l.replace("|see_cpython_module|", "CPython module:") # clean up unsupported escape sequences in rst _l = _l.replace(r"\ ", " ") From 6dd28264dd15888e51a0937b263c4af33ab088c4 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 25 Aug 2024 12:35:34 +0200 Subject: [PATCH 18/57] stubber: Merge @overloads 3 of ... Signed-off-by: Jos Verlinde --- .gitignore | 2 +- src/stubber/codemod/merge_docstub.py | 37 +++++++++++------ .../func_overload_add_existing/before.pyi | 22 ++++++++++ .../func_overload_add_existing/doc_stub.pyi | 23 +++++++++++ .../func_overload_add_existing/expected.pyi | 40 +++++++++++++++++++ tests/codemods/codemodcollector.py | 3 +- 6 files changed, 112 insertions(+), 15 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_existing/before.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_existing/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_existing/expected.pyi diff --git a/.gitignore b/.gitignore index fbd118fc..2e06eb4d 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,7 @@ scripts/bulk_stubber.json dist/ # code modding output saved for tests / comparison -tests/codemods/codemod_test_cases/**/output.py +tests/codemods/codemod_test_cases/**/output.* # ignore the typings folders used in testing. snippets/*/typings diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 330a4727..85a2b38c 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -24,10 +24,12 @@ update_module_docstr, ) +Mod_Class_T = TypeVar("Mod_Class_T", cst.Module, cst.ClassDef) +"""TypeVar for Module or ClassDef that both support overloads""" ########################################################################################## # # log = logging.getLogger(__name__) ######################################################################################### -empty_module = cst.parse_module("") +empty_module = cst.parse_module("") # Debugging aid : empty_module.code_for_node(node) class MergeCommand(VisitorBasedCodemodCommand): @@ -184,8 +186,6 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c return updated_node - Mod_Class_T = TypeVar("Mod_Class_T", cst.Module, cst.ClassDef) - def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mod_Class_T: """ Add any missing overloads to the updated_node @@ -207,16 +207,10 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo else: raise ValueError(f"Unsupported node type: {updated_node}") # insert each overload just after a function with the same name - # reversed to keep insertions in same order as in the docstub - for overload in reversed(missing_overloads): + + for overload in missing_overloads: matched = False - for i, node in enumerate(updated_body): - if ( - isinstance(node, cst.FunctionDef) - and node.name.value == overload.name.value - ): - matched = True - break + matched, i = self.locate_function_by_name(overload, updated_body) if matched: updated_body.insert(i + 1, overload) @@ -228,6 +222,15 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo # cst.IndentedBlock(body=tuple(updated_body))) # type: ignore return updated_node + + def locate_function_by_name(self, overload, updated_body): + """locate the (last) function by name""" + matched = False + for i, node in reversed(list(enumerate(updated_body))): + if isinstance(node, cst.FunctionDef) and node.name.value == overload.name.value: + matched = True + break + return matched, i # -------------------------------------------------------------------- # ------------------------------------------------------------ @@ -282,8 +285,16 @@ def leave_FunctionDef( stack_id = tuple(self.stack) self.stack.pop() if stack_id not in self.annotations: - # no changes to the function + # no changes to the function in docstub return updated_node + if updated_node.decorators and any( + dec.decorator.value == "overload" for dec in updated_node.decorators + ): + # do not overwrite existing @overload functions + # ASSUME: they are OK as they are + # A + return updated_node + # update the firmware_stub from the doc_stub information doc_stub = self.annotations[stack_id].type_info # Check if it is an @overload decorator diff --git a/tests/codemods/codemod_test_cases/func_overload_add_existing/before.pyi b/tests/codemods/codemod_test_cases/func_overload_add_existing/before.pyi new file mode 100644 index 00000000..9b34b12e --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_existing/before.pyi @@ -0,0 +1,22 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + + +@overload +def foo(value: bytes) -> str: + """ + Bytes to str + Existing overload A + """ + ... + +@overload +def foo(value: list) -> str: + """ + list to str + Existing overload B + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_existing/doc_stub.pyi b/tests/codemods/codemod_test_cases/func_overload_add_existing/doc_stub.pyi new file mode 100644 index 00000000..6bf8088b --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_existing/doc_stub.pyi @@ -0,0 +1,23 @@ +""" +Overloaded functions +""" + +from typing import overload + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_existing/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_existing/expected.pyi new file mode 100644 index 00000000..e129d3ac --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_existing/expected.pyi @@ -0,0 +1,40 @@ +# fmt: off +""" +Overloaded functions +""" +from typing import overload + + +@overload +def foo(value: bytes) -> str: + """ + Bytes to str + Existing overload A + """ + ... + +@overload +def foo(value: list) -> str: + """ + list to str + Existing overload B + """ + ... + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemodcollector.py b/tests/codemods/codemodcollector.py index 324761e1..b962707c 100644 --- a/tests/codemods/codemodcollector.py +++ b/tests/codemods/codemodcollector.py @@ -7,6 +7,7 @@ pytestmark = [pytest.mark.stubber, pytest.mark.codemod] + class TestCase(NamedTuple): before: str # The source code before the transformation. expected: str # The source code after the transformation. @@ -48,7 +49,7 @@ def collect_test_cases() -> List[Tuple[Any, ...]]: with open(doc_stubs[0], encoding="utf-8") as file: doc_stub = file.read() - output = test_case_directory.joinpath("output.py") + output = test_case_directory.joinpath("output.xxx").with_suffix(before_files[0].suffix) test_cases.append( pytest.param( From 9b1dc373d4026b4480127707e5bdd9e1ea06705b Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 25 Aug 2024 15:18:46 +0200 Subject: [PATCH 19/57] stubber: Docstubs - Fix/undo removal of positional only `/)` from parameters Signed-off-by: Jos Verlinde --- src/stubber/rst/lookup.py | 11 ++++++++--- tests/rst/test_rst.py | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index b3cefc08..8a14265e 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -257,7 +257,7 @@ class Fix: "machine.ADC": ["ATTN_0DB:int = ..."], # uses Pin "machine.RTC": ["from machine import IDLE"], # uses Pin "machine.UART": ["from machine import IDLE"], # uses Pin - "network": ["from abc import ABC"], # for AbstractNIC + "network": ["from typing import Protocol"], # for AbstractNIC "rp2": ["from .PIO import PIO"], # "pyb": ["from .UART import UART"], # uses Pin "pyb.Switch": ["from .Pin import Pin"], # uses Pin @@ -269,7 +269,12 @@ class Fix: Fix(r"\**", "*"), # change weirdly written wildcards \* --> * Fix(r"/*", "*"), # change weirdly written wildcards /* --> * Fix(r"**", "*"), # change weirdly written wildcards ** --> * - Fix(r"/)", ")"), # strange terminator in machine.USBDevice `USBDevice.active(self, [value] /)` + # do not remove / , this indicates positional only notation before the ,/ + # RE to insert missing , before / + Fix(from_=r"(\w+.*?[^,])\s*/", to=r"\1 ,/", is_re=True), + Fix(", ,/", ", /"), # remove double commas ( cause by the above fix) its a kludge + # Fix("]=None /)", "]=None, /)") + # ref: https://regex101.com/r/crVQfA/1 Fix("'param'", "param"), # loose notation in documentation # illegal keywords Fix( @@ -545,7 +550,7 @@ class Fix: # array "array": "List", # network - "AbstractNIC": "ABC", + "AbstractNIC": "Protocol", } diff --git a/tests/rst/test_rst.py b/tests/rst/test_rst.py index c687f261..bd02e142 100644 --- a/tests/rst/test_rst.py +++ b/tests/rst/test_rst.py @@ -202,8 +202,16 @@ def test_rst_parse_class_10(line: str): # ESPNow extra notation ("ESPNow.config('param') (ESP32 only)", "ESPNow.config(param)"), # machine.USBDevice - # Extranous / `USBDevice.active(self, [value] /)` - ("USBDevice.active(self, [value]/)", "USBDevice.active(self, value: Optional[Any]=None)"), + # Positional Only indicator should not be removed / `USBDevice.active(self, [value] /)` + ( + "USBDevice.active(self, [value]/)", + "USBDevice.active(self, value: Optional[Any]=None ,/)", + ), + ( + "USBDevice.active(self, [value] /)", + "USBDevice.active(self, value: Optional[Any]=None ,/)", + ), + # USBDevice.active(self, [value] /) ], ) def test_fix_param(param_in, expected): @@ -378,7 +386,7 @@ def test_doc_pyright_obscured_definitions(pyright_results, capsys): def test_doc_deepsleep_stub(rst_stubs): "Deepsleep stub is generated" content = read_stub(rst_stubs / "machine", "__init__.pyi") - # return type omitted as this is tested seperately + # return type omitted as this is tested separately found = any(line.startswith("def deepsleep(time_ms") for line in content) assert ( found @@ -425,8 +433,8 @@ def test_doc_class_not_function_def(rst_stubs: Path, modulename: str, classname: content = read_stub(rst_stubs / modulename, "__init__.pyi") if content == [] and modulename[0] == "u": # module name change to select.py in v1.17+ - filename = filename[1:] - content = read_stub(rst_stubs, filename) + modulename = modulename[1:] + content = read_stub(rst_stubs, modulename) if content == []: assert f"module {modulename} was not stubbed" found = any(line.startswith(f"def {classname}") for line in content) From 64474dd5dbde8eed4b6d15918692eab41f33cd05 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 25 Aug 2024 23:40:20 +0200 Subject: [PATCH 20/57] stubber: Merge @overloads 4 of ... Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 212 +++++++++++++++------- src/stubber/codemod/merge_docstub.py | 10 +- src/stubber/codemod/test_enrich.py | 86 ++++----- src/stubber/commands/enrich_folder_cmd.py | 8 +- src/stubber/publish/merge_docstubs.py | 2 +- 5 files changed, 204 insertions(+), 114 deletions(-) diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 14d143f9..43121b39 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -4,7 +4,7 @@ """ from pathlib import Path -from typing import Any, Dict, List, Optional +from typing import Any, Dict, Generator, List, Optional, Tuple from libcst import ParserSyntaxError from libcst.codemod import CodemodContext, diff_code, exec_transform_with_prettyprint @@ -13,6 +13,7 @@ import stubber.codemod.merge_docstub as merge_docstub from stubber.utils.post import run_black +from functools import lru_cache ########################################################################################## # # log = logging.getLogger(__name__) @@ -20,13 +21,85 @@ ######################################################################################### +@lru_cache +def package_from_path(target: Path, source: Optional[Path] = None) -> str: + """ + Given a target and source path, return the package name based on the path. + """ + # package = None + _options = [p for p in [target, source] if p is not None] + for p in _options: + if not p.exists(): + raise FileNotFoundError(f"Path {p} does not exist") + + # if either the source or target is a package, use that + for p in _options: + if p.is_dir(): + if len(list(p.glob("__init__.py*"))) > 0: + return p.stem + # check if there is a __init__.py next to the target + for p in _options: + if len(list(p.parent.glob("__init__.py*"))) > 0: + return p.parent.stem + # check One level up - just in case + for p in _options: + if len(list(p.parent.parent.glob("__init__.py*"))) > 0: + return p.parent.parent.stem + # then use the filename, unless it is a __**__.py + for p in _options: + if p.is_file() and not p.stem.startswith("__"): + return p.stem + return "" + + +def upackage_equal(p1: str, p2: str) -> bool: + """ + Compare package names, return True if they are equal, ignoring an _ or u-prefix and case + """ + if p1 and p1[0] in ["u", "_"]: + p1 = p1[1:] + if p2 and p2[0] in ["u", "_"]: + p2 = p2[1:] + + return p1.lower() == p2.lower() + + +def target_source_candidates( + target: Path, source: Path, package_name: str = "" +) -> Generator[Tuple[Path, Path, str], None, None]: + """ + Given a target and source path, return a list of tuples of `(target, source, package name)` that are candidates for merging. + Goal is to match the target and source files based on the package name, to avoid mismatched merges of docstrings and typehints + """ + # first assumption on targets + if target.is_dir(): + targets = list(target.glob("**/*.py*")) + elif target.is_file(): + targets = [target] + else: + targets = [] + + if source.is_dir(): + sources = list(source.glob("**/*.py*")) + elif source.is_file(): + sources = [source] + else: + sources = [] + # filter down using the package name + for t in targets: + for s in sources: + if upackage_equal(package_from_path(t), package_from_path(s)): + yield (t, s, package_from_path(t)) + + +######################################################################################### def enrich_file( target_path: Path, - docstub_path: Path, + source_path: Path, diff: bool = False, write_back: bool = False, package_name="", -) -> Optional[str]: +): """ Enrich a MCU stubs using the doc-stubs in another folder. Both (.py or .pyi) files are supported. @@ -42,23 +115,33 @@ def enrich_file( """ config: Dict[str, Any] = _default_config() context = CodemodContext() - if not package_name: - package_name = ( - target_path.stem if target_path.stem != "__init__" else target_path.parent.stem - ) + package_name = package_name or package_from_path(target_path, source_path) # find a matching doc-stub file in the docstub_path - candidates = merge_source_candidates(package_name, docstub_path) - - # read source file - old_code = current_code = target_path.read_text(encoding="utf-8") + # candidates = merge_source_candidates(package_name, source_path) + candidates = target_source_candidates(target_path, source_path) + # sort by target_path , to show diffs + candidates = sorted(candidates, key=lambda x: x[0]) # try to apply all candidates success = False - for docstub_file in candidates: - if docstub_file.exists(): - log.debug(f"Merge {target_path} from {docstub_file}") - codemod_instance = merge_docstub.MergeCommand(context, docstub_file=docstub_file) + current = None + for target, source, name in candidates: + if target != current: + # processing a new file + if current: + # write updated code to file + if write_back: + log.trace(f"Write back enriched file {current}") + current.write_text(current_code, encoding="utf-8") + if diff: + yield diff_code(old_code, current_code, 5, filename=current.name) + old_code = current_code = target.read_text(encoding="utf-8") + current = target + if source.exists(): + log.info(f"Merge {target} from {source}") + # read source file + codemod_instance = merge_docstub.MergeCommand(context, docstub_file=source) if new_code := exec_transform_with_prettyprint( codemod_instance, current_code, @@ -73,33 +156,32 @@ def enrich_file( if not success: raise FileNotFoundError(f"No doc-stub file found for {target_path}") - if write_back: - log.trace(f"Write back enriched file {target_path}") - # write updated code to file - target_path.write_text(current_code, encoding="utf-8") - return diff_code(old_code, current_code, 5, filename=target_path.name) if diff else new_code - - -def merge_source_candidates(package_name: str, docstub_path: Path) -> List[Path]: - """Return a list of candidate files in the docstub path that can be used to enrich the provided package_name. - - The package_name is used to find a matching file in the docstub_path. - """ - if docstub_path.is_file(): - candidates = [docstub_path] - return candidates - # selectc from .py and .pyi files - candidates: List[Path] = [] - for ext in [".py", ".pyi"]: - candidates.extend(file_package(package_name, docstub_path, ext)) - if package_name[0].lower() in ["u", "_"]: - # also look for candidates without leading u ( usys.py <- sys.py) - # also look for candidates without leading _ ( _rp2.py <- rp2.py ) - candidates.extend(file_package(package_name[1:], docstub_path, ext)) - else: - # also look for candidates with leading u ( sys.py <- usys.py) - candidates.extend(file_package("u" + package_name, docstub_path, ext)) - return candidates + if current: + # write (last) updated code to file + if write_back: + log.trace(f"Write back enriched file {current}") + current.write_text(current_code, encoding="utf-8") + if diff: + yield diff_code(old_code, current_code, 5, filename=current.name) + + +# def merge_source_candidates(package_name: str, docstub_path: Path) -> List[Path]: +# """Return a list of candidate files in the docstub path that can be used to enrich the provided package_name.""" +# if docstub_path.is_file(): +# candidates = [docstub_path] +# return candidates +# # select from .py and .pyi files +# candidates: List[Path] = [] +# for ext in [".py", ".pyi"]: +# candidates.extend(file_package(package_name, docstub_path, ext)) +# if package_name[0].lower() in ["u", "_"]: +# # also look for candidates without leading u ( usys.py <- sys.py) +# # also look for candidates without leading _ ( _rp2.py <- rp2.py ) +# candidates.extend(file_package(package_name[1:], docstub_path, ext)) +# else: +# # also look for candidates with leading u ( sys.py <- usys.py) +# candidates.extend(file_package("u" + package_name, docstub_path, ext)) +# return candidates def file_package(name: str, docstub_path: Path, ext: str) -> List[Path]: @@ -115,8 +197,8 @@ def file_package(name: str, docstub_path: Path, ext: str) -> List[Path]: def enrich_folder( + target_path: Path, source_path: Path, - docstub_path: Path, show_diff: bool = False, write_back: bool = False, require_docstub: bool = False, @@ -127,32 +209,36 @@ def enrich_folder( Returns the number of files enriched. """ + if not target_path.exists(): + raise FileNotFoundError(f"Target {target_path} does not exist") if not source_path.exists(): raise FileNotFoundError(f"Source {source_path} does not exist") - if not docstub_path.exists(): - raise FileNotFoundError(f"Docstub {docstub_path} does not exist") - log.debug(f"Enrich folder {source_path}.") + log.info(f"Enrich folder {target_path}.") count = 0 - # list all the .py and .pyi files in the source folder - if source_path.is_file(): - source_files = [source_path] + # list all the .py and .pyi files in/under the source folder + if target_path.is_file(): + target_files = [target_path] else: - source_files = sorted( - list(source_path.rglob("**/*.py")) + list(source_path.rglob("**/*.pyi")) + target_files = sorted( + list(target_path.rglob("**/*.py")) + list(target_path.rglob("**/*.pyi")) ) - for source_file in source_files: + package_name = package_name or package_from_path(target_path, source_path) + for source_file in target_files: try: - diff = enrich_file( - source_file, - docstub_path, - diff=True, - write_back=write_back, - package_name=package_name, + diffs = list( + enrich_file( + source_file, + source_path, + diff=True, + write_back=write_back, + package_name=package_name, + ) ) - if diff: - count += 1 + if diffs: + count += len(diffs) if show_diff: - print(diff) + for diff in diffs: + print(diff) except FileNotFoundError as e: # no docstub to enrich with if require_docstub: @@ -162,7 +248,7 @@ def enrich_folder( log.exception(e) continue # run black on the destination folder - run_black(source_path) - # DO NOT run Autoflake as this removes some relevant (unused) imports + run_black(target_path) + # DO NOT run Autoflake as this removes some relevant (unused) imports too early return count diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 85a2b38c..ceaaa63b 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -141,7 +141,7 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c # bit of a hack to get the full module name empty_mod = cst.parse_module("") full_module_name = empty_mod.code_for_node(imp.module) # type: ignore - log.trace(f"add: from {full_module_name} import *") + log.info(f"add: from {full_module_name} import *") AddImportsVisitor.add_needed_import( self.context, module=full_module_name, @@ -159,6 +159,7 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c if src_docstr or docstub_docstr: if docstub_docstr.strip() != src_docstr.strip(): if src_docstr: + log.trace(f"Append module docstrings. (new --- old) ") new_docstr = f'"""\n' + docstub_docstr + "\n\n---\n" + src_docstr + '\n"""' else: new_docstr = f'"""\n' + docstub_docstr + '\n"""' @@ -212,6 +213,7 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo matched = False matched, i = self.locate_function_by_name(overload, updated_body) if matched: + log.trace(f"Add @overload for {overload.name.value}") updated_body.insert(i + 1, overload) if isinstance(updated_node, cst.Module): @@ -288,18 +290,18 @@ def leave_FunctionDef( # no changes to the function in docstub return updated_node if updated_node.decorators and any( - dec.decorator.value == "overload" for dec in updated_node.decorators + dec.decorator.value == "overload" for dec in updated_node.decorators # type: ignore ): # do not overwrite existing @overload functions # ASSUME: they are OK as they are - # A return updated_node # update the firmware_stub from the doc_stub information doc_stub = self.annotations[stack_id].type_info # Check if it is an @overload decorator - if any(dec.decorator.value == "overload" for dec in doc_stub.decorators) and self.annotations[stack_id].overloads: # type: ignore + if any(dec.decorator.value == "overload" for dec in doc_stub.decorators) and len(self.annotations[stack_id].overloads) > 1: # type: ignore # If there are overloads in the documentation , lets use the first one + log.info(f"Change {updated_node.name.value} to @overload") doc_stub = self.annotations[stack_id].overloads.pop(0) # assert isinstance(doc_stub, TypeInfo) diff --git a/src/stubber/codemod/test_enrich.py b/src/stubber/codemod/test_enrich.py index 5260e80c..da9334a3 100644 --- a/src/stubber/codemod/test_enrich.py +++ b/src/stubber/codemod/test_enrich.py @@ -1,7 +1,7 @@ from typing import List import pytest from pathlib import Path -from stubber.codemod.enrich import merge_source_candidates +# from stubber.codemod.enrich import merge_source_candidates @pytest.fixture @@ -42,46 +42,46 @@ def docstub_path(tmp_path): return docstub_path -@pytest.mark.parametrize( - "package_name, expected_candidates", - [ - ( - "package", - [ - "package.py", - "package.pyi", - "upackage.py", - "upackage.pyi", - ], - ), - ("usys", ["usys.pyi", "sys.pyi"]), - ("_rp2", ["rp2.pyi", "_rp2.pyi"]), - ("rp2", ["rp2.pyi"]), - ("nonexistent", []), - ("foo", ["foo/__init__.pyi"]), - ("ufoo", ["foo/__init__.pyi"]), - ("bar", ["bar/__init__.pyi", "bar/barclass.pyi"]), - ( - "machine", - [ - "machine/__init__.pyi", - "machine/Pin.pyi", - "machine/Signal.pyi", - "machine/ADC.pyi", - ], - ), - ("machine.Pin", ["machine/Pin.pyi"]), - ], -) -def test_merge_source_candidates( - package_name: str, - expected_candidates: List[str], - docstub_path: Path, -): - # Test with package name "package" - candidates = merge_source_candidates(package_name, docstub_path) - assert len(candidates) == len(expected_candidates) - for e in expected_candidates: - assert docstub_path / e in candidates +# @pytest.mark.parametrize( +# "package_name, expected_candidates", +# [ +# ( +# "package", +# [ +# "package.py", +# "package.pyi", +# "upackage.py", +# "upackage.pyi", +# ], +# ), +# ("usys", ["usys.pyi", "sys.pyi"]), +# ("_rp2", ["rp2.pyi", "_rp2.pyi"]), +# ("rp2", ["rp2.pyi"]), +# ("nonexistent", []), +# ("foo", ["foo/__init__.pyi"]), +# ("ufoo", ["foo/__init__.pyi"]), +# ("bar", ["bar/__init__.pyi", "bar/barclass.pyi"]), +# ( +# "machine", +# [ +# "machine/__init__.pyi", +# "machine/Pin.pyi", +# "machine/Signal.pyi", +# "machine/ADC.pyi", +# ], +# ), +# ("machine.Pin", ["machine/Pin.pyi"]), +# ], +# ) +# def test_merge_source_candidates( +# package_name: str, +# expected_candidates: List[str], +# docstub_path: Path, +# ): +# # Test with package name "package" +# candidates = merge_source_candidates(package_name, docstub_path) +# assert len(candidates) == len(expected_candidates) +# for e in expected_candidates: +# assert docstub_path / e in candidates - # todo : test ordering +# # todo : test ordering diff --git a/src/stubber/commands/enrich_folder_cmd.py b/src/stubber/commands/enrich_folder_cmd.py index e012b4e6..5777de82 100644 --- a/src/stubber/commands/enrich_folder_cmd.py +++ b/src/stubber/commands/enrich_folder_cmd.py @@ -1,5 +1,5 @@ """ -enrich machinestubs with docstubs +Enrich mcu/firmware stubs with information from the docstubs """ from pathlib import Path @@ -17,20 +17,22 @@ @stubber_cli.command(name="enrich") @click.option( "--stubs", + "--dest", "-s", "stubs_folder", default=CONFIG.stub_path.as_posix(), type=click.Path(exists=True, file_okay=True, dir_okay=True), - help="File or folder containing the MCU stubs to be updated", + help="File or folder containing the MCU stubs to be updated (destination)", show_default=True, ) @click.option( "--docstubs", + "--source", "-ds", "docstubs_folder", default=CONFIG.stub_path.as_posix(), type=click.Path(exists=True, file_okay=True, dir_okay=True), - help="File or folder containing the docstubs to be applied", + help="File or folder containing the docstubs to be read from (source)", show_default=True, ) @click.option("--diff", default=False, help="Show diff", show_default=True, is_flag=True) diff --git a/src/stubber/publish/merge_docstubs.py b/src/stubber/publish/merge_docstubs.py index a1416dfe..8d59002c 100644 --- a/src/stubber/publish/merge_docstubs.py +++ b/src/stubber/publish/merge_docstubs.py @@ -128,7 +128,7 @@ def copy_and_merge_docstubs(fw_path: Path, dest_path: Path, docstub_path: Path): (dest_path / name).with_suffix(suffix).unlink() # type: ignore # 2 - Enrich the MCU stubs with the document stubs - result = enrich_folder(dest_path, docstub_path=docstub_path, write_back=True) + result = enrich_folder(dest_path, source_path=docstub_path, write_back=True) # copy the docstubs manifest.json file to the package folder if (docstub_path / "modules.json").exists(): From 95ceb6a7ca1cda68bb6e0ed36d401fca7b7e124f Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 28 Aug 2024 08:27:43 +0200 Subject: [PATCH 21/57] stubber: Fix enrich tests Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 2 +- tests/codemods/enrich_test.py | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 43121b39..6ef36332 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -99,7 +99,7 @@ def enrich_file( diff: bool = False, write_back: bool = False, package_name="", -): +) -> Generator[str, None, None]: """ Enrich a MCU stubs using the doc-stubs in another folder. Both (.py or .pyi) files are supported. diff --git a/tests/codemods/enrich_test.py b/tests/codemods/enrich_test.py index 90d630e8..35202d8a 100644 --- a/tests/codemods/enrich_test.py +++ b/tests/codemods/enrich_test.py @@ -19,17 +19,18 @@ ) def test_enrich_file_with_stub(source_file: Path, expected: bool): # source_file = Path("./tests/data/stub_merge/micropython-v1_18-esp32/esp32.py") - diff = None + diffs = [] docstub_path = Path("./tests/data/stub_merge/micropython-v1_18-docstubs") try: - diff = enrich_file(source_file, docstub_path, diff=True, write_back=False) + diff_gen = enrich_file(source_file, docstub_path, diff=True, write_back=False) + diffs = list(diff_gen) except FileNotFoundError: assert not expected, "docstub File not found but expected" if expected == False: - assert diff is None, "no change to the stub was expected but found: \n{}".format(diff) + assert len(diffs) == 0, "no change to the stub was expected but found: \n{}".format(diffs) else: - assert len(diff) > 0, "change to the stub was expected but not found" + assert diffs, "change to the stub was expected but not found" @pytest.mark.parametrize( @@ -78,4 +79,4 @@ def test_enrich_folder( ), f"Expected at least {expected_count} files to be enriched but found {count}" m_run_black.assert_called_once() m_enrich_file.assert_called() - assert m_enrich_file.call_count >= count + assert m_enrich_file.call_count >= expected_count From 1514eca306a3c3a4e9e15e6894333409e7771536 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 28 Aug 2024 21:33:27 +0200 Subject: [PATCH 22/57] Stubber: Avoid merge conflicts between static and class methods. Signed-off-by: Jos Verlinde --- src/stubber/codemod/merge_docstub.py | 1 + .../meth_overload_change_static/before.pyi | 8 ++++++++ .../meth_overload_change_static/doc_stub.pyi | 8 ++++++++ .../meth_overload_change_static/expected.pyi | 8 ++++++++ 4 files changed, 25 insertions(+) create mode 100644 tests/codemods/codemod_test_cases/meth_overload_change_static/before.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_change_static/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_change_static/expected.pyi diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index ceaaa63b..8dc11d55 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -340,6 +340,7 @@ def leave_FunctionDef( if updated_node.decorators: new_decorators.extend(updated_node.decorators) + ): return updated_node.with_changes( decorators=new_decorators, params=doc_stub.params if overwrite_params else updated_node.params, diff --git a/tests/codemods/codemod_test_cases/meth_overload_change_static/before.pyi b/tests/codemods/codemod_test_cases/meth_overload_change_static/before.pyi new file mode 100644 index 00000000..74eeeab3 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_change_static/before.pyi @@ -0,0 +1,8 @@ +# fmt: off +""" +Overloaded methods +""" + +class Parrot: + @classmethod + def foo(cls): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_change_static/doc_stub.pyi b/tests/codemods/codemod_test_cases/meth_overload_change_static/doc_stub.pyi new file mode 100644 index 00000000..ff529576 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_change_static/doc_stub.pyi @@ -0,0 +1,8 @@ +# fmt: off +""" +Overloaded methods +""" + +class Parrot: + @staticmethod + def foo(a:int, b:str): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_change_static/expected.pyi b/tests/codemods/codemod_test_cases/meth_overload_change_static/expected.pyi new file mode 100644 index 00000000..ff529576 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_change_static/expected.pyi @@ -0,0 +1,8 @@ +# fmt: off +""" +Overloaded methods +""" + +class Parrot: + @staticmethod + def foo(a:int, b:str): ... From be1c4de263628dd108f23e7e0914b8e5a72043cf Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 30 Aug 2024 22:45:52 +0200 Subject: [PATCH 23/57] stubber: Merge @overloads 5 of ... Signed-off-by: Jos Verlinde --- .vscode/launch.json | 20 +- .vscode/micropython-dict.txt | 135 +- .vscode/settings.json | 11 +- cspell.json | 145 +- enrich_tester.ipynb | 4956 +++++++++++++++++ missing_docs/_thread.pyi | 10 +- prepare_source_stubs.ipynb | 1626 +++++- src/stubber/codemod/enrich.py | 7 +- src/stubber/codemod/merge_docstub.py | 84 +- src/stubber/commands/enrich_folder_cmd.py | 11 + src/stubber/cst_transformer.py | 41 +- .../func_overload_101/output.pyi | 1 + .../func_overload_add_2/output.pyi | 1 + .../before.pyi | 16 + .../doc_stub.pyi | 42 + .../expected.pyi | 42 + .../func_overload_add_3/output.pyi | 1 + .../func_overload_add_3_impl/output.pyi | 1 + .../func_overload_add_3_ordered/output.pyi | 1 + .../meth_overload_add_2/output.pyi | 1 + .../meth_overload_add_dup/before.pyi | 8 + .../meth_overload_add_dup/doc_stub.pyi | 24 + .../meth_overload_add_dup/expected.pyi | 24 + tests/codemods/test_merge.py | 5 +- 24 files changed, 6746 insertions(+), 467 deletions(-) create mode 100644 enrich_tester.ipynb create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/before.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/expected.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_dup/before.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_dup/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/meth_overload_add_dup/expected.pyi diff --git a/.vscode/launch.json b/.vscode/launch.json index 516360c0..e3bef3f2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -40,10 +40,15 @@ "cwd": "${workspaceFolder}", "args": [ "-VV", - "get-docstubs", - "--version", - "preview", - "--no-clean-rst", + "enrich", + "--stubs", + "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network", + "--docstubs", + "repos\\intellij-micropython\\typehints\\micropython", + // "get-docstubs", + // "--version", + // "preview", + // "--no-clean-rst", // "get-mcu-stubs", // "--serial", // "/dev/ttyUSB0", @@ -180,13 +185,6 @@ // but may cause issue with pytest-cov coverage reporting "subProcess": false, }, - { - "name": "PowerShell Launch Current File", - "type": "PowerShell", - "request": "launch", - "script": "${file}", - "cwd": "${file}" - }, ], "inputs": [ { diff --git a/.vscode/micropython-dict.txt b/.vscode/micropython-dict.txt index 70e14b64..20ae501f 100644 --- a/.vscode/micropython-dict.txt +++ b/.vscode/micropython-dict.txt @@ -1,25 +1,145 @@ +adcs +adcx +adcy +aioble +AIOESP +aiter +aivar +annamaa +asend +atten +Autoflake +basicgit +baudrate +behaviour +boardname +boardstubs +braden +bssid btree +bufs +bufx +bufy +bursty +capsys +chdir +codemod +configtuple +cpython +createstubs +cryptolib +currentmodule +dastultz +deadtime +Decomp +deepsleep +Deinitialises +dequeu +descr +docpages +docstr +docstream +docstrings +docstub +docstubs ECONNRESET EEXIST EHOSTUNREACH EISDIR ENOENT +espnow +extframe +firstbit +fname +framebuf +framebuffer +fsobj +fwid +gattc +GATTS gmtime GPIO gzdict +hclk hexlify +imphook +initialises +IPPROTO +isconnected +josverl +jsondb +keepends +libcst +linecounter loboris +loguru +markdownlint +MCLK +microcontroller +microcontrollers micropython +milli +mitm +mklink +modulelist MOSI +mpflash +mpls +mpremote +mystubs neopixel +noindex +NONCONN +NRPA +oneliner +onewire +openamp +optimisation osdebug +pathnames +pclk +pfalcon +prescaler +pybd pyboard pybricks pycom pycopy +pylintrc pymak +pyright +pytest +pytestmark +pytests +readbit +readblock +readblocks +readbyte +recvinto +reqs +ringbuffer +rssi +serialport +setfiler +setfilter +sourcecode +sourcery +stopwords +strerror +Stubber +stubfiles +stubfolder +stubgen +stuborder +sysclk sysname +testrepo +textblock +thonny tinypico +toctree +typeshed +UART uasync uasyncio ubinascii @@ -32,10 +152,13 @@ uhashlib ujson ulab umqtt +unstubbables +updent upip +uplatform upysh urequests -urequests +uselect usocket ussl ustruct @@ -43,4 +166,12 @@ usys utarfile uzlib webrepl -WLAN \ No newline at end of file +wipy +WIZNET +WLAN +worklist +writebit +writeblocks +writebyte +writeln +xfer diff --git a/.vscode/settings.json b/.vscode/settings.json index 4aa7c900..493dcdcc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,7 +11,16 @@ "asname", "classdef", "functiondef", - "stubfile" + "intellij", + "noblack", + "outputjson", + "pyrightconfig", + "pytestconfig", + "rootpath", + "stubfile", + "typehints", + "ufoo", + "upackage" ], "terminal.integrated.persistentSessionReviveProcess": "never", "workbench.colorCustomizations": { diff --git a/cspell.json b/cspell.json index 52870dfc..a395c5fd 100644 --- a/cspell.json +++ b/cspell.json @@ -16,150 +16,7 @@ } ], "words": [ - "adcs", - "adcx", - "adcy", - "AIOESP", - "aiter", - "aivar", - "asend", - "atten", - "Autoflake", - "basicgit", - "baudrate", - "boardname", - "boardstubs", - "braden", - "bufs", - "bufx", - "bufy", - "capsys", - "chdir", - "codemod", - "configtuple", - "cpython", - "createstubs", - "currentmodule", - "dastultz", - "deadtime", - "Decomp", - "deepsleep", - "dequeu", - "descr", - "docpages", - "docstr", - "docstream", - "docstrings", - "docstub", - "docstubs", - "espnow", - "extframe", - "firstbit", - "fname", - "framebuffer", - "fsobj", - "fwid", - "hclk", - "imphook", - "IPPROTO", - "josverl", - "jsondb", - "keepends", - "libcst", - "linecounter", - "loboris", - "loguru", - "markdownlint", - "microcontroller", - "microcontrollers", - "micropython", - "mklink", - "modulelist", - "mpflash", - "mpls", - "mpremote", - "mystubs", - "noindex", - "oneliner", - "onewire", - "pathnames", - "pclk", - "pfalcon", - "prescaler", - "pybricks", - "pylintrc", - "pyright", - "pytest", - "pytestmark", - "pytests", - "readbit", - "readblock", - "readbyte", - "reqs", - "serialport", - "setfiler", - "setfilter", - "sourcecode", - "sourcery", - "strerror", - "stubfiles", - "stubfolder", - "stubgen", - "stuborder", - "sysclk", - "testrepo", - "textblock", - "thonny", - "tinypico", - "toctree", - "typeshed", - "UART", - "updent", - "uselect", - "Verlinde", - "WIZNET", - "worklist", - "writebit", - "writeblocks", - "writebyte", - "writeln", - "aivar", - "annamaa", - "braden", - "chdir", - "cpython", - "createstubs", - "dastultz", - "fname", - "fwid", - "josverl", - "loboris", - "markdownlint", - "mklink", - "mpls", - "mystubs", - "pfalcon", - "pybd", - "pyboard", - "pybricks", - "pylintrc", - "pyright", - "pytest", - "pytests", - "stopwords", - "Stubber", - "stubfiles", - "stubgen", - "stuborder", - "sysname", - "testrepo", - "thonny", - "tinypico", - "typeshed", - "ulab", - "unstubbables", - "upysh", - "webrepl" + "micropython" ], "enableFiletypes": [ "!plaintext" diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb new file mode 100644 index 00000000..d03feb54 --- /dev/null +++ b/enrich_tester.ipynb @@ -0,0 +1,4956 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try to merge in overloads from other maintainers \n", + "----\n", + "\n", + "- clone to repos \n", + "- new docstubs \n", + "- merge in overloads" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
09:06:30 | ℹ️ micropython-stubber 1.23.2a0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:30\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:30 | ℹ️ fetch updates\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:30\u001b[0m | ℹ️ \u001b[1mfetch updates\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:32 | ℹ️ Switching to v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:32\u001b[0m | ℹ️ \u001b[1mSwitching to v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️ repos\\micropython                        v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mrepos\\micropython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️ repos\\micropython-lib                    v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mrepos\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️ repos\\micropython\\lib\\micropython-lib    v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mrepos\\micropython\\lib\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️ Get docstubs for MicroPython v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mGet docstubs for MicroPython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:35 | ℹ️ ::group:: start post processing of retrieved stubs\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m::group:: start post processing of retrieved stubs\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:38 | ℹ️ Running autoflake on: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:38\u001b[0m | ℹ️ \u001b[1mRunning autoflake on: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:39 | ℹ️ ::group:: Done\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:39\u001b[0m | ℹ️ \u001b[1m::group:: Done\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "All done! ✨ 🍰 ✨\n", + "103 files left unchanged.\n" + ] + } + ], + "source": [ + "# create docstubs without cleaning up the .rst docstrings\n", + "%run -m stubber.stubber docstubs --version stable \n", + "# --no-clean-rst\n", + "\n", + "! black repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ micropython-stubber 1.23.2a0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Enriching repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs with \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mEnriching repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs with \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Enrich folder repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mEnrich folder repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\_thread.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\_thread.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\array.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\array.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Change __getitem__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange __getitem__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Change __setitem__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange __setitem__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uasyncio.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uasyncio.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\bluetooth.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\bluetooth.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Change active to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Change config to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ubluetooth.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ubluetooth.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\btree.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\btree.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\cmath.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\cmath.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\collections.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\collections.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ucollections.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ucollections.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\cryptolib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\cryptolib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change encrypt to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange encrypt to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change decrypt to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange decrypt to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ucryptolib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ucryptolib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\errno.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\errno.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uerrno.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uerrno.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\esp.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\esp.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change sleep_type to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange sleep_type to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change flash_read to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange flash_read to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Change set_native_code_location to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange set_native_code_location to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\esp32.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\esp32.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change write_pulses to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange write_pulses to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\framebuf.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\framebuf.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change pixel to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange pixel to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\gc.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\gc.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change threshold to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange threshold to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\hashlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\hashlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uhashlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uhashlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\heapq.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\heapq.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uheapq.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uheapq.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\io.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\io.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Change open to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange open to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\json.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\json.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\lcd160cr.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\lcd160cr.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Change freq to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Change lightsleep to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange lightsleep to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Change deepsleep to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange deepsleep to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:44 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:45 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:45 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:45 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:45 | ℹ️ Change init to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:45 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change value to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change __call__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange __call__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change mode to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change pull to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange pull to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change freq to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change duty_u16 to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange duty_u16 to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Change duty_ns to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange duty_ns to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:46 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:47 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:47 | ℹ️ Change init to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:47 | ℹ️ Change alarm to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mChange alarm to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:47 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:47 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:47 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Change value to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Change init to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:48 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Change init to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Change read to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Change readinto to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:49 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\math.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\math.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\micropython.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\micropython.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change opt_level to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange opt_level to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change mem_info to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange mem_info to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change qstr_info to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange qstr_info to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\neopixel.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\neopixel.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change active to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change connect to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange connect to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change status to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change ifconfig to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Change config to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change ifconfig to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change active to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change status to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change ifconfig to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change config to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change ifconfig to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change mode to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change ssid to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ssid to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change auth to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange auth to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change channel to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change antenna to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange antenna to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change mac to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange mac to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\os.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\os.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change ilistdir to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ilistdir to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Change listdir to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange listdir to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Change freq to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Change hid to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange hid to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Change info to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Change mount to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange mount to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Change repl_uart to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange repl_uart to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Change usb_mode to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange usb_mode to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:52 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:53 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:53\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:53 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:53\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:54 | ℹ️ Change info to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:54 | ℹ️ Change setfilter to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mChange setfilter to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:54 | ℹ️ Change recv to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:54 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:55 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:55\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:55 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:55\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:56 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:56 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:56 | ℹ️ Change mem_read to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mChange mem_read to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:56 | ℹ️ Change recv to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:56 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:57 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:57\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Change intensity to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange intensity to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Change debug to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange debug to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Change dict to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange dict to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Change mapper to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange mapper to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Change value to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:58 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:59 | ℹ️ Change calibration to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:59 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:59 | ℹ️ Change angle to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange angle to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:59 | ℹ️ Change speed to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange speed to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:59 | ℹ️ Change calibration to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:06:59 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:00 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:00\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:00 | ℹ️ Change init to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:00\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:00 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:00\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change init to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change channel to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change counter to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange counter to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change freq to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change period to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange period to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Change prescaler to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange prescaler to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:01 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:02 | ℹ️ Change __init__ to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:02 | ℹ️ Change read to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:02 | ℹ️ Change readinto to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:02 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:02 | ℹ️ Change recv to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Change read to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Change readinto to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Change recv to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\random.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\random.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Change randrange to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange randrange to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\select.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\select.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\stm.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\stm.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\sys.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\sys.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\usys.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\usys.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\time.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\time.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\array.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\array.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uctypes.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uctypes.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\io.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\io.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\json.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\json.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\os.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\os.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\select.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\select.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\time.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\time.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\wipy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\wipy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Change heartbeat to @overload\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mChange heartbeat to @overload\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
+       "repos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# assume root of workspace is the current directory\n", + "# # Merge typehints from IntelliJ plugin with docstubs\n", + "# %run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --docstubs repos\\intellij-micropython\\typehints\n", + "\n", + "# Merge from Howard Lovatt (MIT) \n", + "# %run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\PyBoardTypeshed\\micropython_typesheds\n", + "\n", + "# gobot1234\n", + "%run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\gobotTypeshed\\micropython_typesheds\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], + "source": [ + "\n", + "! ruff check repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: there is a new pyright version available (v1.1.370 -> v1.1.378).\n", + "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", + "\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi:\u001b[33m12\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"Self\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi:\u001b[33m14\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m63\u001b[39m - \u001b[31merror\u001b[39m: \"_AnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m73\u001b[39m - \u001b[31merror\u001b[39m: \"_FdOrAnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m87\u001b[39m - \u001b[31merror\u001b[39m: \"_StrOrBytesT\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi:\u001b[33m6\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi:\u001b[33m6\u001b[39m:\u001b[33m17\u001b[39m - \u001b[31merror\u001b[39m: \"StrOrBytesPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi:\u001b[33m7\u001b[39m:\u001b[33m21\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m42\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m72\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m84\u001b[39m:\u001b[33m47\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m84\u001b[39m:\u001b[33m47\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m96\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m107\u001b[39m:\u001b[33m47\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m107\u001b[39m:\u001b[33m47\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m117\u001b[39m:\u001b[33m46\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m128\u001b[39m:\u001b[33m52\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m128\u001b[39m:\u001b[33m52\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m139\u001b[39m:\u001b[33m46\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m150\u001b[39m:\u001b[33m52\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m150\u001b[39m:\u001b[33m52\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m168\u001b[39m:\u001b[33m39\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m168\u001b[39m:\u001b[33m39\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m40\u001b[39m:\u001b[33m35\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m41\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m22\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m36\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m49\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m49\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m342\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi:\u001b[33m25\u001b[39m:\u001b[33m27\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m39\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m52\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m24\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m43\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m43\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m48\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m48\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m185\u001b[39m:\u001b[33m34\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m211\u001b[39m:\u001b[33m37\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m211\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m211\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m263\u001b[39m:\u001b[33m34\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m289\u001b[39m:\u001b[33m37\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m289\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m289\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m19\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m40\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m40\u001b[39m:\u001b[33m60\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m82\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m82\u001b[39m:\u001b[33m60\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m103\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m112\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m112\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m121\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m130\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m130\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m139\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m145\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m145\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m151\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m157\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m157\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi:\u001b[33m104\u001b[39m:\u001b[33m52\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi:\u001b[33m14\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi:\u001b[33m14\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi:\u001b[33m461\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi:\u001b[33m14\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m31\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m34\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"Literal['_Hash']\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m12\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"Literal['_Hash']\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m98\u001b[39m:\u001b[33m11\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"Literal['_Hash']\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi:\u001b[33m27\u001b[39m:\u001b[33m22\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m85\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"Self\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m87\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m197\u001b[39m:\u001b[33m40\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['']\" cannot be assigned to parameter of type \"bytes\"\n", + "   \"Literal['']\" is incompatible with \"bytes\"\u001b[90m (reportArgumentType)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m311\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m311\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m319\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m319\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m319\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m327\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m327\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m327\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m335\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m335\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m343\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m343\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m343\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m351\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m351\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m351\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m92\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m93\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m94\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m118\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m118\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m118\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m140\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m141\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m142\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m175\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m175\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m175\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m53\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"Callable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m47\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m57\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m58\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m79\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m79\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m36\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m110\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m111\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m179\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m179\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m36\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi:\u001b[33m17\u001b[39m:\u001b[33m20\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m55\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m55\u001b[39m:\u001b[33m68\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m28\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m29\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"_AnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m30\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"_FdOrAnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m31\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"_StrOrBytesT\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"uname_result\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m80\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"MSB\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m86\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"MSB\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m142\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Callable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m149\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Callable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m258\u001b[39m:\u001b[33m43\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m352\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m354\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m448\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m450\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m544\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m547\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m641\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m643\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m731\u001b[39m:\u001b[33m100\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m732\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m24\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m24\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m24\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m523\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractReadOnlyBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m565\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m682\u001b[39m:\u001b[33m45\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"int\" cannot be assigned to parameter of type \"tuple[int, int, int, int, bytes]\"\n", + "   \"int\" is incompatible with \"tuple[int, int, int, int, bytes]\"\u001b[90m (reportArgumentType)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi:\u001b[33m44\u001b[39m:\u001b[33m19\u001b[39m - \u001b[31merror\u001b[39m: \"JOIN_NONE\" is not a known attribute of module \".PIO\"\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m36\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m19\u001b[39m:\u001b[33m17\u001b[39m - \u001b[31merror\u001b[39m: \"StrOrBytesPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m21\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi:\u001b[33m148\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_TicksUs\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi:\u001b[33m154\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"_TicksCPU\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi:\u001b[33m169\u001b[39m:\u001b[33m32\u001b[39m - \u001b[36mwarning\u001b[39m: \"_Ticks\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi:\u001b[33m17\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m58\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m59\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m62\u001b[39m:\u001b[33m23\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m97\u001b[39m:\u001b[33m50\u001b[39m - \u001b[36mwarning\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m151\u001b[39m:\u001b[33m38\u001b[39m - \u001b[36mwarning\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "156 errors, 127 warnings, 0 informations \n" + ] + } + ], + "source": [ + "\n", + "! pyright repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/missing_docs/_thread.pyi b/missing_docs/_thread.pyi index 69203156..845d4ff4 100644 --- a/missing_docs/_thread.pyi +++ b/missing_docs/_thread.pyi @@ -27,7 +27,7 @@ def start_new_thread(function: Callable, args: Tuple) -> None: When the function returns, the thread silently exits. - rp2040 : only one additional thread is supported, so this function will raise an exception if called more than once unless the first thread has already exited. - + """ ... @@ -54,10 +54,11 @@ def allocate_lock() -> lock: # Lock object class lock: def __init__(self) -> None: """ - Locks should be allocaded via `allocate_lock()`. + Locks should be allocated via `allocate_lock()`. Initially, it is unlocked. """ ... + def acquire(self, blocking: bool = True, timeout: int = -1) -> bool: """ Without any optional argument, this method acquires the lock unconditionally, if necessary waiting until it is released by another thread (only one thread at a time can acquire a lock — that’s their reason for existence). @@ -65,10 +66,13 @@ class lock: The return value is True if the lock is acquired successfully, False if not. """ ... + def release(self) -> None: """Releases the lock. The lock must have been acquired earlier, but not necessarily by the same thread.""" ... + def locked(self) -> bool: """ - Return the status of the lock: True if it has been acquired by some thread, False if not.""" + Return the status of the lock: True if it has been acquired by some thread, False if not. + """ ... diff --git a/prepare_source_stubs.ipynb b/prepare_source_stubs.ipynb index 1bf999fa..4974bf3a 100644 --- a/prepare_source_stubs.ipynb +++ b/prepare_source_stubs.ipynb @@ -2,298 +2,1370 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "22:44:02 | ℹ️ micropython-stubber 1.23.2a0\n", - "22:44:03 | ℹ️ fetch updates\n", - "22:44:06 | ℹ️ Switching to v1.23.0\n", - "22:44:08 | ℹ️ repos\\micropython v1.23.0\n", - "22:44:08 | ℹ️ repos\\micropython-lib v1.23.0\n", - "22:44:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", - "22:44:08 | ℹ️ Get docstubs for MicroPython v1.23.0\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.py\n", - "i\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.p\n", - "yi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__\n", - ".pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.p\n", - "yi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.py\n", - "i\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.py\n", - "i\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.py\n", - "i\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.py\n", - "i\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__\n", - ".pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.py\n", - "i\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "22:44:08 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.py\n", - "i\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.py\n", - "i\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", - "22:44:09 | ℹ️ - Writing to: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", - "22:44:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", - "22:44:11 | ℹ️ Running autoflake on: \n", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n", - "22:44:12 | ℹ️ ::group:: Done\n" - ] + "data": { + "text/html": [ + "
16:15:23 | ℹ️ micropython-stubber 1.23.2a0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:23\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:23 | ℹ️ fetch updates\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:23\u001b[0m | ℹ️ \u001b[1mfetch updates\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:24 | ℹ️ Switching to v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:24\u001b[0m | ℹ️ \u001b[1mSwitching to v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:26 | ℹ️ repos\\micropython                        v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:26\u001b[0m | ℹ️ \u001b[1mrepos\\micropython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:26 | ℹ️ repos\\micropython-lib                    v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:26\u001b[0m | ℹ️ \u001b[1mrepos\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:26 | ℹ️ repos\\micropython\\lib\\micropython-lib    v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:26\u001b[0m | ℹ️ \u001b[1mrepos\\micropython\\lib\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️ Get docstubs for MicroPython v1.23.0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1mGet docstubs for MicroPython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:27 | ℹ️ ::group:: start post processing of retrieved stubs\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:27\u001b[0m | ℹ️ \u001b[1m::group:: start post processing of retrieved stubs\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:30 | ℹ️ Running autoflake on: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:30\u001b[0m | ℹ️ \u001b[1mRunning autoflake on: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
16:15:31 | ℹ️ ::group:: Done\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m16:15:31\u001b[0m | ℹ️ \u001b[1m::group:: Done\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "# create docstubs without cleaning up the .rst docstrings\n", - "!stubber docstubs --version stable --no-clean-rst\n" + "%run -m stubber.stubber docstubs --version stable --no-clean-rst\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Test to merge in the manual annotations from the pycharm-micropython plugin\n", + "\n", + "%run -m stubber.stubber enrich --stubs repos/micropython-stubs/stubs/micropython-v1_23_0-docstubs --docstubs repos/intellij-micropython/typehints/micropython \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# # merge the docstubs with boardstubs to get the non-documented methods and functions\n", - "# !stubber merge --version stable\n", - "# !stubber build --version stable" + "# %run -m stubber.stubber get-frozen --version stable\n", + "# %run -m stubber.stubber merge --version stable\n", + "%run -m stubber.stubber build --version stable" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Copying array from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying asyncio from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying binascii from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying cmath from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying collections from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying errno from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying gc from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying gzip from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying hashlib from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying heapq from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying io from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying json from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying math from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying os from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying platform from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying random from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying select from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying socket from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying ssl from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying struct from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying sys from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying time from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying zlib from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying _thread from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying bluetooth from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying btree from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying cryptolib from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying deflate from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying framebuf from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying machine from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying micropython from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying neopixel from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying network from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying openamp from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying uctypes from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying vfs from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying wm8960 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying pyb from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying stm from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying lcd160cr from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying wipy from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying esp from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying esp32 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying espnow from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying rp2 from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying zephyr from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n", - "Copying machine from D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n" - ] - } - ], + "outputs": [], "source": [ "# copy the merged docstubs to the docs folder\n", "from pathlib import Path\n", @@ -363,8 +1435,7 @@ "\n", "origins.append(\n", " (\"machine\", \"publish/micropython-v1_23_0-esp32-stubs\"),\n", - " \n", - " )\n", + ")\n", "\n", "base_path = Path(\"D:\\\\mypython\\\\micropython-stubber\\\\repos\\\\micropython-stubs\")\n", "target = Path(\"D:\\\\mypython\\\\autodoc201\\\\docs\\\\stubs\")\n", @@ -391,6 +1462,13 @@ " except FileExistsError:\n", " print(f\"FileExistsError: {source_path} \")" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 6ef36332..5b32bd54 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -99,6 +99,7 @@ def enrich_file( diff: bool = False, write_back: bool = False, package_name="", + use_docstrings: bool = True, ) -> Generator[str, None, None]: """ Enrich a MCU stubs using the doc-stubs in another folder. @@ -141,7 +142,9 @@ def enrich_file( if source.exists(): log.info(f"Merge {target} from {source}") # read source file - codemod_instance = merge_docstub.MergeCommand(context, docstub_file=source) + codemod_instance = merge_docstub.MergeCommand( + context, docstub_file=source, update_docstrings=use_docstrings + ) if new_code := exec_transform_with_prettyprint( codemod_instance, current_code, @@ -202,6 +205,7 @@ def enrich_folder( show_diff: bool = False, write_back: bool = False, require_docstub: bool = False, + use_docstrings: bool = True, package_name: str = "", ) -> int: """\ @@ -232,6 +236,7 @@ def enrich_folder( diff=True, write_back=write_back, package_name=package_name, + use_docstrings=use_docstrings, ) ) if diffs: diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 8dc11d55..cd52635f 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -7,7 +7,7 @@ # import argparse from pathlib import Path -from typing import Dict, List, Optional, Tuple, TypeVar, Union +from typing import Dict, List, Optional, Tuple, TypeVar, Union, cast import libcst as cst from libcst.codemod import CodemodContext, VisitorBasedCodemodCommand @@ -53,7 +53,6 @@ def add_args(arg_parser: argparse.ArgumentParser) -> None: """Add command-line args that a user can specify for running this codemod.""" arg_parser.add_argument( - # "-sf", "--stubfile", dest="docstub_file", metavar="PATH", @@ -62,7 +61,19 @@ def add_args(arg_parser: argparse.ArgumentParser) -> None: required=True, ) - def __init__(self, context: CodemodContext, docstub_file: Union[Path, str]) -> None: + arg_parser.add_argument( + "--use-docstrings", + "--ds", + dest="use_docstrings", + default=True, + ) + + def __init__( + self, + context: CodemodContext, + docstub_file: Union[Path, str], + update_docstrings: bool = True, + ) -> None: """initialize the base class with context, and save our args.""" super().__init__(context) self.replace_functiondef_with_classdef = True @@ -80,6 +91,8 @@ def __init__(self, context: CodemodContext, docstub_file: Union[Path, str]) -> N ] = {} self.comments: List[str] = [] + self.update_docstrings = update_docstrings + self.stub_imports: Dict[str, ImportItem] = {} self.all_imports: List[Union[cst.Import, cst.ImportFrom]] = [] # parse the doc-stub file @@ -157,12 +170,12 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c assert isinstance(docstub_docstr, str) src_docstr = original_node.get_docstring() or "" if src_docstr or docstub_docstr: - if docstub_docstr.strip() != src_docstr.strip(): + if self.update_docstrings and (docstub_docstr.strip() != src_docstr.strip()): if src_docstr: log.trace(f"Append module docstrings. (new --- old) ") - new_docstr = f'"""\n' + docstub_docstr + "\n\n---\n" + src_docstr + '\n"""' + new_docstr = '"""\n' + docstub_docstr + "\n\n---\n" + src_docstr + '\n"""' else: - new_docstr = f'"""\n' + docstub_docstr + '\n"""' + new_docstr = '"""\n' + docstub_docstr + '\n"""' docstr_node = cst.SimpleStatementLine( body=[ @@ -179,10 +192,7 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c updated_node = insert_header_comments(updated_node, self.comments) # -------------------------------------------------------------------- - # make sure that any @overloads that are in the docstub are also in the firmware stub - # hack to 2nd foo annotation - # updated_node = updated_node.with_changes( children=updated_node.children.append(self.annotations[('foo',)][1])) - + # make sure that any @overloads that not yet applied are also added to the firmware stub updated_node = self.add_missed_overloads(updated_node, stack_id=()) return updated_node @@ -197,7 +207,7 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo for key in scope_keys: for overload in self.annotations[key].overloads: - missing_overloads.append(overload.def_node) + missing_overloads.append((overload.def_node, key)) self.annotations[key].overloads = [] # remove for list, assume works if missing_overloads: @@ -209,11 +219,15 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo raise ValueError(f"Unsupported node type: {updated_node}") # insert each overload just after a function with the same name - for overload in missing_overloads: + for overload, key in missing_overloads: matched = False matched, i = self.locate_function_by_name(overload, updated_body) if matched: log.trace(f"Add @overload for {overload.name.value}") + if not self.update_docstrings: + docstring_node = self.annotations[key].docstring_node or "" + # Use the new overload - but with the existing docstring + overload = update_def_docstr(overload, docstring_node) updated_body.insert(i + 1, overload) if isinstance(updated_node, cst.Module): @@ -290,7 +304,7 @@ def leave_FunctionDef( # no changes to the function in docstub return updated_node if updated_node.decorators and any( - dec.decorator.value == "overload" for dec in updated_node.decorators # type: ignore + dec.decorator.value == "overload" for dec in updated_node.decorators # type: ignore ): # do not overwrite existing @overload functions # ASSUME: they are OK as they are @@ -299,15 +313,39 @@ def leave_FunctionDef( # update the firmware_stub from the doc_stub information doc_stub = self.annotations[stack_id].type_info # Check if it is an @overload decorator - if any(dec.decorator.value == "overload" for dec in doc_stub.decorators) and len(self.annotations[stack_id].overloads) > 1: # type: ignore - # If there are overloads in the documentation , lets use the first one + add_overload = any(dec.decorator.value == "overload" for dec in doc_stub.decorators) and len(self.annotations[stack_id].overloads) > 1 # type: ignore + + # If there are overloads in the documentation , lets use the first one + if add_overload: log.info(f"Change {updated_node.name.value} to @overload") + # Use the new overload - but with the existing docstring doc_stub = self.annotations[stack_id].overloads.pop(0) + assert doc_stub.def_node + + if self.update_docstrings: + # we have copied over the entire function definition, no further processing should be done on this node + doc_stub.def_node = cast(cst.FunctionDef, doc_stub.def_node) + updated_node = doc_stub.def_node + + else: + # Save (first) existing docstring if any + existing_ds = None + if updated_node.get_docstring(): + # if there is one , then get it including the layout + existing_ds = original_node.body.body[0] + assert isinstance(existing_ds, cst.SimpleStatementLine) + + self.annotations[stack_id].docstring_node = existing_ds + updated_node = update_def_docstr(doc_stub.def_node, existing_ds) + return updated_node # assert isinstance(doc_stub, TypeInfo) # assert doc_stub # first update the docstring - updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) + # TODO: DO Not overwrite existing docstring + if self.update_docstrings: + updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) + # Sometimes the MCU stubs and the doc stubs have different types : FunctionDef / ClassDef # we need to be careful not to copy over all the annotations if the types are different if doc_stub.def_type == "funcdef": @@ -320,6 +358,8 @@ def leave_FunctionDef( "*args, **kwargs", "self", "self, *args, **kwargs", + "cls", + "cls, *args, **kwargs", ] # return that should not be overwritten by the doc-stub ? overwrite_return = True @@ -337,10 +377,18 @@ def leave_FunctionDef( if doc_stub.decorators: new_decorators.extend(doc_stub.decorators) - if updated_node.decorators: - new_decorators.extend(updated_node.decorators) + for decorator in updated_node.decorators: + if not decorator.decorator.value in [n.decorator.value for n in new_decorators]: # type: ignore + new_decorators.append(decorator) + # if there is both a static and a class method, we remove the class decorator to avoid inconsistencies + if any(dec.decorator.value == "staticmethod" for dec in doc_stub.decorators) and any( # type: ignore + dec.decorator.value == "staticmethod" for dec in doc_stub.decorators # type: ignore ): + new_decorators = [ + dec for dec in new_decorators if dec.decorator.value != "classmethod" + ] + return updated_node.with_changes( decorators=new_decorators, params=doc_stub.params if overwrite_params else updated_node.params, diff --git a/src/stubber/commands/enrich_folder_cmd.py b/src/stubber/commands/enrich_folder_cmd.py index 5777de82..08ede1fb 100644 --- a/src/stubber/commands/enrich_folder_cmd.py +++ b/src/stubber/commands/enrich_folder_cmd.py @@ -43,6 +43,15 @@ show_default=True, is_flag=True, ) +@click.option( + "--docstrings/--no-docstrings", + "--ds/--no-ds", + "use_docstrings", + default=True, + help="Use docstrings from the (docstub) source.", + show_default=True, + is_flag=True, +) @click.option( "--package-name", "-p", @@ -56,6 +65,7 @@ def cli_enrich_folder( docstubs_folder: Union[str, Path], diff: bool = False, dry_run: bool = False, + use_docstrings: bool = True, package_name: str = "", ): """ @@ -70,4 +80,5 @@ def cli_enrich_folder( write_back=write_back, require_docstub=False, package_name=package_name, + use_docstrings=use_docstrings, ) diff --git a/src/stubber/cst_transformer.py b/src/stubber/cst_transformer.py index 1d0f28b5..746e6575 100644 --- a/src/stubber/cst_transformer.py +++ b/src/stubber/cst_transformer.py @@ -23,8 +23,13 @@ class TypeInfo: class AnnoValue: "The different values for the annotations" docstring: Optional[str] = "" # strings + "Module docstring or function/method docstring" + docstring_node: Optional[cst.SimpleStatementLine] = None + "the docstring node for a function method to reuse with overloads" type_info: Optional[TypeInfo] = None # simple type - overloads: List[TypeInfo] = field(default_factory=list) # store function / method overloads + "function/method or class definition read from the docstub source" + overloads: List[TypeInfo] = field(default_factory=list) + "function / method overloads read from the docstub source" class TransformError(Exception): @@ -118,8 +123,8 @@ def visit_FunctionDef(self, node: cst.FunctionDef) -> Optional[bool]: if not key in self.annotations: # store the first function/method signature self.annotations[key] = AnnoValue(type_info=ti) - - if any(dec.decorator.value == "overload" for dec in node.decorators): # type: ignore + + if any(dec.decorator.value == "overload" for dec in node.decorators): # type: ignore # and store the overloads self.annotations[key].overloads.append(ti) @@ -139,17 +144,31 @@ def leave_FunctionDef(self, original_node: cst.FunctionDef) -> None: def update_def_docstr( dest_node: Union[cst.FunctionDef, cst.ClassDef], - src_comment: Optional[cst.SimpleStatementLine], + src_docstr: Optional[Union[cst.SimpleStatementLine, str]] = None, src_node=None, ) -> Any: """ Update the docstring of a function/method or class + The supplied `src_docstr` can be a string or a SimpleStatementLine - for functiondefs ending in an ellipsis, the entire body needs to be replaced. - in this case the src_body is mandatory. + for function defs ending in an ellipsis, the entire body needs to be replaced. + in this case `src_node` is required. """ - if not src_comment: + if not src_docstr: return dest_node + if isinstance(src_docstr, str): + if not src_docstr[0] in ('"', "'"): + src_docstr = f'"""{src_docstr}"""' + # convert the string to a SimpleStatementLine + src_docstr = cst.SimpleStatementLine( + body=[ + cst.Expr( + value=cst.SimpleString( + value=src_docstr, + ), + ), + ] + ) # function def on a single line ending with an ellipsis (...) if isinstance(dest_node.body, cst.SimpleStatementSuite): @@ -160,13 +179,13 @@ def update_def_docstr( raise TransformError("Expected Def with Indented body") # classdef of functiondef with an indented body - # need some funcky casting to avoid issues with changing the body - # note : indented body is nested : body.body + # need some funky casting to avoid issues with changing the body + # note : indented body is nested : IndentedBlock.body.body if dest_node.get_docstring() is None: # append the new docstring and append the function body - body = tuple([src_comment] + list(dest_node.body.body)) + body = tuple([src_docstr] + list(dest_node.body.body)) else: - body = tuple([src_comment] + list(dest_node.body.body[1:])) + body = tuple([src_docstr] + list(dest_node.body.body[1:])) body_2 = dest_node.body.with_changes(body=body) return dest_node.with_changes(body=body_2) diff --git a/tests/codemods/codemod_test_cases/func_overload_101/output.pyi b/tests/codemods/codemod_test_cases/func_overload_101/output.pyi index 4bc9e1e5..41413464 100644 --- a/tests/codemods/codemod_test_cases/func_overload_101/output.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_101/output.pyi @@ -4,6 +4,7 @@ Overloaded functions from python docs """ from typing import overload + @overload def process(response: None) -> None: ... @overload diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi index 7fd44af8..3151d0cf 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_2/output.pyi @@ -4,6 +4,7 @@ Overloaded functions """ from typing import overload + @overload def foo(value: int) -> None: """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/before.pyi b/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/before.pyi new file mode 100644 index 00000000..8274af5b --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/before.pyi @@ -0,0 +1,16 @@ +# fmt: off +""" +Overloaded functions, retain existing docstrings +""" + +def foo(): + """ + Existing Docstring + with multiple lines + """ + ... + + +def bar(): ... + +def baz(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/doc_stub.pyi b/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/doc_stub.pyi new file mode 100644 index 00000000..50409afd --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/doc_stub.pyi @@ -0,0 +1,42 @@ +""" +Overloaded functions +""" + +from typing import Literal, overload + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... + +@overload +def baz(value: int) -> None: + """ + Set baz value + First overload + """ + ... + +@overload +def baz(value: None) -> str: + """ + Get baz value + Second overload + """ + ... + +@overload +def bar(value: Literal["s"]) -> str: ... +@overload +def bar(value: Literal["d"]) -> int: ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/expected.pyi new file mode 100644 index 00000000..771fb82c --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/expected.pyi @@ -0,0 +1,42 @@ +# fmt: off +""" +Overloaded functions, retain existing docstrings +""" +from typing import Literal, overload + +@overload +def foo(value: int) -> None: + """ + Existing Docstring + with multiple lines + """ + ... + +@overload +def foo(value: None) -> str: + """ + Existing Docstring + with multiple lines + """ + ... + +@overload +def bar(value: Literal["s"]) -> str: ... +@overload +def bar(value: Literal["d"]) -> int: ... + +@overload +def baz(value: int) -> None: + """ + Set baz value + First overload + """ + ... + +@overload +def baz(value: None) -> str: + """ + Get baz value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi index a34088a1..185a540f 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_3/output.pyi @@ -4,6 +4,7 @@ Overloaded functions """ from typing import overload + @overload def foo(value: int) -> None: """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi index 42cae34d..09c4b19d 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_impl/output.pyi @@ -4,6 +4,7 @@ Overloaded functions """ from typing import overload + @overload def foo(value: int) -> None: """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi index 55c85039..a2660a31 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_3_ordered/output.pyi @@ -4,6 +4,7 @@ Overloaded functions """ from typing import overload + @overload def foo(value: int) -> None: """ diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi index ec4ec5c0..549f0507 100644 --- a/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi +++ b/tests/codemods/codemod_test_cases/meth_overload_add_2/output.pyi @@ -5,6 +5,7 @@ Overloaded methods from typing import overload class Parrot: + @overload def speak(number: int): """ diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_dup/before.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_dup/before.pyi new file mode 100644 index 00000000..7d62596b --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_dup/before.pyi @@ -0,0 +1,8 @@ +# fmt: off +""" +Overloaded methods +""" + +class Parrot: + @classmethod + def speak(cls): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_dup/doc_stub.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_dup/doc_stub.pyi new file mode 100644 index 00000000..f88cbcb8 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_dup/doc_stub.pyi @@ -0,0 +1,24 @@ +""" +Overloaded methods +""" + +from typing import overload + +class Parrot: + @overload + @classmethod + def speak(cls, number: int): + """ + Speak a number + First overload + """ + ... + + @overload + @classmethod + def speak(cls, words: str): + """ + Speak a word + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_dup/expected.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_dup/expected.pyi new file mode 100644 index 00000000..3693f431 --- /dev/null +++ b/tests/codemods/codemod_test_cases/meth_overload_add_dup/expected.pyi @@ -0,0 +1,24 @@ +# fmt: off +""" +Overloaded methods +""" +from typing import overload + +class Parrot: + @overload + @classmethod + def speak(cls, number: int): + """ + Speak a number + First overload + """ + ... + + @overload + @classmethod + def speak(cls, words: str): + """ + Speak a word + Second overload + """ + ... diff --git a/tests/codemods/test_merge.py b/tests/codemods/test_merge.py index b4a31a33..cca2a1fa 100644 --- a/tests/codemods/test_merge.py +++ b/tests/codemods/test_merge.py @@ -19,7 +19,7 @@ from .codemodcollector import collect_test_cases # mark all tests -pytestmark = [pytest.mark.stubber,pytest.mark.codemod] +pytestmark = [pytest.mark.stubber, pytest.mark.codemod] def print_diff(before: str, after: str): @@ -124,10 +124,11 @@ def test_merge_from_docstub(self, test_case: MyTestCase) -> None: pytest.skip("Skipping test because of _skip") if "_xfail" in str(test_case.path): pytest.xfail("xfail") - + no_docstrings = str(test_case.path).endswith("no-docstring") self.assertCodemod( test_case.before, test_case.expected, docstub_file=test_case.stub_file, save_output=test_case.output, + update_docstrings=not no_docstrings, ) From 27ddfec0aef8f0b4a3ece7149d39a536304976e8 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 25 Sep 2024 22:32:19 +0200 Subject: [PATCH 24/57] stubber:Add --params-only to Merge command. Signed-off-by: Jos Verlinde --- enrich_tester.ipynb | 2515 ++++++++--------- src/stubber/codemod/enrich.py | 2 +- src/stubber/codemod/merge_docstub.py | 48 +- tests/codemods/codemodcollector.py | 4 +- .../func_docstring_add/before.py | 11 + .../func_docstring_add/doc_stub.py | 10 + .../func_docstring_add/expected.py | 15 + .../func_docstring_add/output.py | 15 + .../func_docstring_no_overwrite/before.py | 15 + .../func_docstring_no_overwrite/doc_stub.py | 10 + .../func_docstring_no_overwrite/expected.py | 15 + .../func_docstring_no_overwrite/output.py | 15 + .../func_overload_add_2}/before.pyi | 0 .../func_overload_add_2}/doc_stub.pyi | 0 .../func_overload_add_2}/expected.pyi | 0 .../func_overload_add_2/output.pyi | 42 + .../func_param_update_overwrite/before.py | 14 + .../func_param_update_overwrite/doc_stub.py | 12 + .../func_param_update_overwrite/expected.py | 15 + .../func_param_update_overwrite/output.py | 15 + tests/codemods/test_merge.py | 27 +- 21 files changed, 1507 insertions(+), 1293 deletions(-) create mode 100644 tests/codemods/params_test_cases/func_docstring_add/before.py create mode 100644 tests/codemods/params_test_cases/func_docstring_add/doc_stub.py create mode 100644 tests/codemods/params_test_cases/func_docstring_add/expected.py create mode 100644 tests/codemods/params_test_cases/func_docstring_add/output.py create mode 100644 tests/codemods/params_test_cases/func_docstring_no_overwrite/before.py create mode 100644 tests/codemods/params_test_cases/func_docstring_no_overwrite/doc_stub.py create mode 100644 tests/codemods/params_test_cases/func_docstring_no_overwrite/expected.py create mode 100644 tests/codemods/params_test_cases/func_docstring_no_overwrite/output.py rename tests/codemods/{codemod_test_cases/func_overload_add_2_no-docstring => params_test_cases/func_overload_add_2}/before.pyi (100%) rename tests/codemods/{codemod_test_cases/func_overload_add_2_no-docstring => params_test_cases/func_overload_add_2}/doc_stub.pyi (100%) rename tests/codemods/{codemod_test_cases/func_overload_add_2_no-docstring => params_test_cases/func_overload_add_2}/expected.pyi (100%) create mode 100644 tests/codemods/params_test_cases/func_overload_add_2/output.pyi create mode 100644 tests/codemods/params_test_cases/func_param_update_overwrite/before.py create mode 100644 tests/codemods/params_test_cases/func_param_update_overwrite/doc_stub.py create mode 100644 tests/codemods/params_test_cases/func_param_update_overwrite/expected.py create mode 100644 tests/codemods/params_test_cases/func_param_update_overwrite/output.py diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb index d03feb54..b7140754 100644 --- a/enrich_tester.ipynb +++ b/enrich_tester.ipynb @@ -20,11 +20,11 @@ { "data": { "text/html": [ - "
09:06:30 | ℹ️ micropython-stubber 1.23.2a0\n",
+       "
22:26:16 | ℹ️ micropython-stubber 1.23.2a0\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:30\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" + "\u001b[32m22:26:16\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" ] }, "metadata": {}, @@ -33,11 +33,11 @@ { "data": { "text/html": [ - "
09:06:30 | ℹ️ fetch updates\n",
+       "
22:26:16 | ℹ️ fetch updates\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:30\u001b[0m | ℹ️ \u001b[1mfetch updates\u001b[0m\n" + "\u001b[32m22:26:16\u001b[0m | ℹ️ \u001b[1mfetch updates\u001b[0m\n" ] }, "metadata": {}, @@ -46,11 +46,15 @@ { "data": { "text/html": [ - "
09:06:32 | ℹ️ Switching to v1.23.0\n",
+       "
22:26:16 | ❌ Command '['git', 'fetch', '--all', '--tags', '--quiet']' returned non-zero exit status 128. : fatal: \n",
+       "unable to access 'https://github.com/micropython/micropython.git/': Could not resolve host: github.com\n",
+       "\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:32\u001b[0m | ℹ️ \u001b[1mSwitching to v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + "\u001b[32m22:26:16\u001b[0m | ❌ \u001b[1;31mCommand \u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31mgit', \u001b[0m\u001b[1;31m'fetch'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--all'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--tags'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--quiet'\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;31m' returned non-zero exit status 128. : fatal: \u001b[0m\n", + "\u001b[1;31munable to access '\u001b[0m\u001b[1;4;31mhttps://github.com/micropython/micropython.git/\u001b[0m\u001b[1;31m': Could not resolve host: github.com\u001b[0m\n", + "\n" ] }, "metadata": {}, @@ -59,11 +63,15 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️ repos\\micropython                        v1.23.0\n",
+       "
22:26:17 | ❌ Command '['git', 'fetch', '--all', '--tags', '--quiet']' returned non-zero exit status 128. : fatal: \n",
+       "unable to access 'https://github.com/micropython/micropython-lib.git/': Could not resolve host: github.com\n",
+       "\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mrepos\\micropython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + "\u001b[32m22:26:17\u001b[0m | ❌ \u001b[1;31mCommand \u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31mgit', \u001b[0m\u001b[1;31m'fetch'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--all'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--tags'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--quiet'\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;31m' returned non-zero exit status 128. : fatal: \u001b[0m\n", + "\u001b[1;31munable to access '\u001b[0m\u001b[1;4;31mhttps://github.com/micropython/micropython-lib.git/\u001b[0m\u001b[1;31m': Could not resolve host: github.com\u001b[0m\n", + "\n" ] }, "metadata": {}, @@ -72,11 +80,15 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️ repos\\micropython-lib                    v1.23.0\n",
+       "
22:26:17 | ❌ Command '['git', 'fetch', '--all', '--tags', '--quiet']' returned non-zero exit status 128. : fatal: \n",
+       "unable to access 'https://github.com/josverl/micropython-stubs.git/': Could not resolve host: github.com\n",
+       "\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mrepos\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + "\u001b[32m22:26:17\u001b[0m | ❌ \u001b[1;31mCommand \u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31mgit', \u001b[0m\u001b[1;31m'fetch'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--all'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--tags'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--quiet'\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;31m' returned non-zero exit status 128. : fatal: \u001b[0m\n", + "\u001b[1;31munable to access '\u001b[0m\u001b[1;4;31mhttps://github.com/josverl/micropython-stubs.git/\u001b[0m\u001b[1;31m': Could not resolve host: github.com\u001b[0m\n", + "\n" ] }, "metadata": {}, @@ -85,11 +97,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️ repos\\micropython\\lib\\micropython-lib    v1.23.0\n",
+       "
22:26:17 | ℹ️ Switching to v1.23.0\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mrepos\\micropython\\lib\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + "\u001b[32m22:26:17\u001b[0m | ℹ️ \u001b[1mSwitching to v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" ] }, "metadata": {}, @@ -98,11 +110,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️ Get docstubs for MicroPython v1.23.0\n",
+       "
22:26:25 | ℹ️ repos\\micropython                        v1.23.0\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1mGet docstubs for MicroPython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" + "\u001b[32m22:26:25\u001b[0m | ℹ️ \u001b[1mrepos\\micropython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" ] }, "metadata": {}, @@ -111,11 +123,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n",
+       "
22:26:25 | ℹ️ repos\\micropython-lib                    v1.23.0\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:25\u001b[0m | ℹ️ \u001b[1mrepos\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" ] }, "metadata": {}, @@ -124,11 +136,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n",
+       "
22:26:26 | ℹ️ repos\\micropython\\lib\\micropython-lib    v1.23.0\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1mrepos\\micropython\\lib\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" ] }, "metadata": {}, @@ -137,11 +149,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n",
+       "
22:26:26 | ℹ️ Get docstubs for MicroPython v1.23.0\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1mGet docstubs for MicroPython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" ] }, "metadata": {}, @@ -150,11 +162,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -163,11 +175,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -176,11 +188,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -189,11 +201,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -202,11 +214,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -215,11 +227,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -228,11 +240,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -241,11 +253,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -254,11 +266,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -267,11 +279,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -280,11 +292,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -293,11 +305,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -306,11 +318,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -319,11 +331,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -332,11 +344,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -345,11 +357,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -358,11 +370,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -371,11 +383,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -384,11 +396,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -397,11 +409,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n",
+       "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\u001b[0m\n" + "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -410,11 +422,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -423,11 +435,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -436,11 +448,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -449,11 +461,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -462,11 +474,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -475,11 +487,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -488,11 +500,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -501,11 +513,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -514,11 +526,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -527,11 +539,11 @@ { "data": { "text/html": [ - "
09:06:34 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:34\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -540,11 +552,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -553,11 +565,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -566,11 +578,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -579,11 +591,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -592,11 +604,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -605,11 +617,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -618,11 +630,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -631,11 +643,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -644,11 +656,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -657,11 +669,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -670,11 +682,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -683,11 +695,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -696,11 +708,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -709,11 +721,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -722,11 +734,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -735,11 +747,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -748,11 +760,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -761,11 +773,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -774,11 +786,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -787,11 +799,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -800,11 +812,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -813,11 +825,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -826,11 +838,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -839,11 +851,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -852,11 +864,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -865,11 +877,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -878,11 +890,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -891,11 +903,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -904,11 +916,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -917,11 +929,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -930,11 +942,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -943,11 +955,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -956,11 +968,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -969,11 +981,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -982,11 +994,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -995,11 +1007,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1008,11 +1020,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1021,11 +1033,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1034,11 +1046,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1047,11 +1059,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1060,11 +1072,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1073,11 +1085,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1086,11 +1098,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1099,11 +1111,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1112,11 +1124,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1125,11 +1137,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n",
+       "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1138,11 +1150,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1151,11 +1163,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1164,11 +1176,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1177,11 +1189,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1190,11 +1202,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1203,11 +1215,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1216,11 +1228,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1229,11 +1241,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1242,11 +1254,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1255,11 +1267,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1268,11 +1280,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1281,11 +1293,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1294,11 +1306,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️  - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m - Writing to: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1307,11 +1319,11 @@ { "data": { "text/html": [ - "
09:06:35 | ℹ️ ::group:: start post processing of retrieved stubs\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:35\u001b[0m | ℹ️ \u001b[1m::group:: start post processing of retrieved stubs\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1320,11 +1332,11 @@ { "data": { "text/html": [ - "
09:06:38 | ℹ️ Running autoflake on: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:38\u001b[0m | ℹ️ \u001b[1mRunning autoflake on: repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1333,11 +1345,50 @@ { "data": { "text/html": [ - "
09:06:39 | ℹ️ ::group:: Done\n",
+       "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:39\u001b[0m | ℹ️ \u001b[1m::group:: Done\u001b[0m\n" + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:26:28 | ℹ️ ::group:: start post processing of retrieved stubs\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m::group:: start post processing of retrieved stubs\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:26:33 | ℹ️ Running autoflake on: scratch\\micropython-v1_23_0-docstubs\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:26:33\u001b[0m | ℹ️ \u001b[1mRunning autoflake on: scratch\\micropython-v1_23_0-docstubs\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:26:35 | ℹ️ ::group:: Done\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:26:35\u001b[0m | ℹ️ \u001b[1m::group:: Done\u001b[0m\n" ] }, "metadata": {}, @@ -1347,17 +1398,48 @@ "name": "stderr", "output_type": "stream", "text": [ + "Skipping .ipynb files as Jupyter dependencies are not installed.\n", + "You can fix this by running ``pip install \"black[jupyter]\"``\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + "\n", "All done! ✨ 🍰 ✨\n", - "103 files left unchanged.\n" + "28 files reformatted, 174 files left unchanged.\n" ] } ], "source": [ "# create docstubs without cleaning up the .rst docstrings\n", - "%run -m stubber.stubber docstubs --version stable \n", + "%run -m stubber.stubber docstubs --version 1.23.0 --stub-path scratch\n", "# --no-clean-rst\n", "\n", - "! black repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n" + "! black scratch\n" ] }, { @@ -1365,14 +1447,118 @@ "execution_count": 5, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d:\\mypython\\micropython-stubber\\scratch\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\IPython\\core\\magics\\osm.py:417: UserWarning: using dhist requires you to install the `pickleshare` library.\n", + " self.shell.db['dhist'] = compress_dhist(dhist)[-100:]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d:\\mypython\\micropython-stubber\n" + ] + } + ], + "source": [ + "# stage to see changes from next steps \n", + "%cd scratch\n", + "!git add .\n", + "%cd ..\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
22:28:13 | ℹ️ micropython-stubber 1.23.2a0\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:28:13 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mEnriching scratch with repos\\intellij-micropython\\typehints\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:28:13 | ℹ️ Enrich folder scratch.\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mEnrich folder scratch.\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:28:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:28:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\array.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { "data": { "text/html": [ - "
09:06:41 | ℹ️ micropython-stubber 1.23.2a0\n",
+       "
22:28:13 | ℹ️ Change __getitem__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mChange __getitem__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1381,13 +1567,11 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Enriching repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs with \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\n",
+       "
22:28:13 | ℹ️ Change __setitem__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mEnriching repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs with \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\u001b[0m\n" + "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mChange __setitem__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1396,11 +1580,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Enrich folder repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\n",
+       "
22:28:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mEnrich folder repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs.\u001b[0m\n" + "\u001b[32m22:28:14\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1409,13 +1595,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\_thread.pyi\n",
+       "
22:28:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\_thread.pyi\u001b[0m\n" + "\u001b[32m22:28:14\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1424,13 +1610,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\array.pyi\n",
+       "
22:28:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\array.pyi\u001b[0m\n" + "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1439,11 +1625,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Change __getitem__ to @overload\n",
+       "
22:28:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange __getitem__ to @overload\u001b[0m\n" + "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1452,11 +1640,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Change __setitem__ to @overload\n",
+       "
22:28:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange __setitem__ to @overload\u001b[0m\n" + "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1465,13 +1655,11 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\n",
+       "
22:28:15 | ℹ️ Change active to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\u001b[0m\n" + "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1480,13 +1668,11 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uasyncio.pyi\n",
+       "
22:28:15 | ℹ️ Change config to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uasyncio.pyi\u001b[0m\n" + "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1495,13 +1681,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\n",
+       "
22:28:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\u001b[0m\n" + "\u001b[32m22:28:16\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1510,13 +1696,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\n",
+       "
22:28:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\btree.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\u001b[0m\n" + "\u001b[32m22:28:16\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\btree.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1525,13 +1711,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\bluetooth.pyi\n",
+       "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\bluetooth.pyi\u001b[0m\n" + "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1540,11 +1726,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Change active to @overload\n",
+       "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" + "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1553,11 +1741,11 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Change config to @overload\n",
+       "
22:28:17 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" + "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1566,13 +1754,13 @@ { "data": { "text/html": [ - "
09:06:41 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ubluetooth.pyi\n",
+       "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:41\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ubluetooth.pyi\u001b[0m\n" + "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1581,13 +1769,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\btree.pyi\n",
+       "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\btree.pyi\u001b[0m\n" + "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1596,13 +1784,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\cmath.pyi\n",
+       "
22:28:18 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\cmath.pyi\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1611,13 +1797,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\collections.pyi\n",
+       "
22:28:18 | ℹ️ Change encrypt to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\collections.pyi\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mChange encrypt to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1626,11 +1810,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:18 | ℹ️ Change decrypt to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mChange decrypt to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1639,13 +1823,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ucollections.pyi\n",
+       "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ucollections.pyi\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1654,13 +1838,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\cryptolib.pyi\n",
+       "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\cryptolib.pyi\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1669,11 +1853,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1682,11 +1868,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change encrypt to @overload\n",
+       "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\esp.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange encrypt to @overload\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\esp.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1695,11 +1883,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change decrypt to @overload\n",
+       "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange decrypt to @overload\u001b[0m\n" + "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1708,13 +1898,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ucryptolib.pyi\n",
+       "
22:28:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ucryptolib.pyi\u001b[0m\n" + "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1723,13 +1913,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\errno.pyi\n",
+       "
22:28:19 | ℹ️ Change readblocks to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\errno.pyi\u001b[0m\n" + "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mChange readblocks to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1738,13 +1926,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uerrno.pyi\n",
+       "
22:28:19 | ℹ️ Change writeblocks to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uerrno.pyi\u001b[0m\n" + "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mChange writeblocks to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1753,13 +1939,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\esp.pyi\n",
+       "
22:28:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\esp.pyi\u001b[0m\n" + "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1768,11 +1954,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change sleep_type to @overload\n",
+       "
22:28:19 | ℹ️ Change pixel to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange sleep_type to @overload\u001b[0m\n" + "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mChange pixel to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1781,11 +1967,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change flash_read to @overload\n",
+       "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange flash_read to @overload\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1794,11 +1982,11 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Change set_native_code_location to @overload\n",
+       "
22:28:20 | ℹ️ Change threshold to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mChange set_native_code_location to @overload\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mChange threshold to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1807,13 +1995,13 @@ { "data": { "text/html": [ - "
09:06:42 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\esp32.pyi\n",
+       "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:42\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\esp32.pyi\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1822,11 +2010,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change write_pulses to @overload\n",
+       "
22:28:20 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange write_pulses to @overload\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1835,13 +2023,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\framebuf.pyi\n",
+       "
22:28:20 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\framebuf.pyi\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1850,11 +2036,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change pixel to @overload\n",
+       "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange pixel to @overload\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1863,13 +2051,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\gc.pyi\n",
+       "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\gc.pyi\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1878,11 +2066,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change threshold to @overload\n",
+       "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange threshold to @overload\u001b[0m\n" + "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1891,13 +2081,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\hashlib.pyi\n",
+       "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\hashlib.pyi\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\io.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1906,11 +2096,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:21 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1919,11 +2109,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:21 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1932,13 +2122,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uhashlib.pyi\n",
+       "
22:28:21 | ℹ️ Change open to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uhashlib.pyi\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mChange open to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -1947,13 +2135,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\heapq.pyi\n",
+       "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\heapq.pyi\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1962,13 +2150,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uheapq.pyi\n",
+       "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uheapq.pyi\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\json.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1977,13 +2165,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\io.pyi\n",
+       "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\io.pyi\u001b[0m\n" + "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -1992,11 +2180,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:22\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2005,11 +2195,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:22 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:22\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2018,11 +2208,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Change open to @overload\n",
+       "
22:28:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mChange open to @overload\u001b[0m\n" + "\u001b[32m22:28:22\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2031,13 +2223,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\n",
+       "
22:28:23 | ℹ️ Change freq to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\u001b[0m\n" + "\u001b[32m22:28:23\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2046,13 +2236,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\json.pyi\n",
+       "
22:28:23 | ℹ️ Change lightsleep to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\json.pyi\u001b[0m\n" + "\u001b[32m22:28:23\u001b[0m | ℹ️ \u001b[1mChange lightsleep to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2061,13 +2249,11 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\n",
+       "
22:28:23 | ℹ️ Change deepsleep to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\u001b[0m\n" + "\u001b[32m22:28:23\u001b[0m | ℹ️ \u001b[1mChange deepsleep to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2076,13 +2262,13 @@ { "data": { "text/html": [ - "
09:06:43 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\lcd160cr.pyi\n",
+       "
22:28:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:43\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\lcd160cr.pyi\u001b[0m\n" + "\u001b[32m22:28:24\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2091,11 +2277,13 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2104,13 +2292,13 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2119,11 +2307,13 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Change freq to @overload\n",
+       "
22:28:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + "\u001b[32m22:28:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2132,11 +2322,11 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Change lightsleep to @overload\n",
+       "
22:28:28 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange lightsleep to @overload\u001b[0m\n" + "\u001b[32m22:28:28\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2145,11 +2335,11 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Change deepsleep to @overload\n",
+       "
22:28:28 | ℹ️ Change init to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mChange deepsleep to @overload\u001b[0m\n" + "\u001b[32m22:28:28\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2158,13 +2348,13 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2173,13 +2363,13 @@ { "data": { "text/html": [ - "
09:06:44 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:44\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2188,13 +2378,11 @@ { "data": { "text/html": [ - "
09:06:45 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:31 | ℹ️ Change value to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2203,13 +2391,11 @@ { "data": { "text/html": [ - "
09:06:45 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:31 | ℹ️ Change __call__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange __call__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2218,11 +2404,11 @@ { "data": { "text/html": [ - "
09:06:45 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:31 | ℹ️ Change mode to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2231,11 +2417,11 @@ { "data": { "text/html": [ - "
09:06:45 | ℹ️ Change init to @overload\n",
+       "
22:28:31 | ℹ️ Change pull to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange pull to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2244,13 +2430,11 @@ { "data": { "text/html": [ - "
09:06:45 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:31 | ℹ️ Change drive to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:45\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange drive to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2259,13 +2443,13 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2274,11 +2458,11 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change value to @overload\n",
+       "
22:28:32 | ℹ️ Change freq to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" + "\u001b[32m22:28:32\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2287,11 +2471,11 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change __call__ to @overload\n",
+       "
22:28:32 | ℹ️ Change duty_u16 to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange __call__ to @overload\u001b[0m\n" + "\u001b[32m22:28:32\u001b[0m | ℹ️ \u001b[1mChange duty_u16 to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2300,11 +2484,11 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change mode to @overload\n",
+       "
22:28:32 | ℹ️ Change duty_ns to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" + "\u001b[32m22:28:32\u001b[0m | ℹ️ \u001b[1mChange duty_ns to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2313,11 +2497,13 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change pull to @overload\n",
+       "
22:28:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange pull to @overload\u001b[0m\n" + "\u001b[32m22:28:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2326,13 +2512,11 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:34 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:34\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2341,11 +2525,11 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change freq to @overload\n",
+       "
22:28:34 | ℹ️ Change init to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + "\u001b[32m22:28:34\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2354,11 +2538,11 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change duty_u16 to @overload\n",
+       "
22:28:34 | ℹ️ Change alarm to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange duty_u16 to @overload\u001b[0m\n" + "\u001b[32m22:28:34\u001b[0m | ℹ️ \u001b[1mChange alarm to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2367,11 +2551,13 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Change duty_ns to @overload\n",
+       "
22:28:35 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mChange duty_ns to @overload\u001b[0m\n" + "\u001b[32m22:28:35\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2380,13 +2566,13 @@ { "data": { "text/html": [ - "
09:06:46 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:36 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:46\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:36\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2395,11 +2581,13 @@ { "data": { "text/html": [ - "
09:06:47 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:37 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:37\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2408,11 +2596,11 @@ { "data": { "text/html": [ - "
09:06:47 | ℹ️ Change init to @overload\n",
+       "
22:28:38 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + "\u001b[32m22:28:38\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2421,11 +2609,11 @@ { "data": { "text/html": [ - "
09:06:47 | ℹ️ Change alarm to @overload\n",
+       "
22:28:38 | ℹ️ Change value to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mChange alarm to @overload\u001b[0m\n" + "\u001b[32m22:28:38\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2434,13 +2622,13 @@ { "data": { "text/html": [ - "
09:06:47 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:38 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:38\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2449,13 +2637,11 @@ { "data": { "text/html": [ - "
09:06:47 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:39 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2464,13 +2650,11 @@ { "data": { "text/html": [ - "
09:06:47 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:39 | ℹ️ Change init to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:47\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2479,11 +2663,13 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:39 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2492,11 +2678,11 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Change value to @overload\n",
+       "
22:28:39 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" + "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2505,13 +2691,13 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:40 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:40\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2520,11 +2706,13 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:41 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:41\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2533,11 +2721,11 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Change init to @overload\n",
+       "
22:28:42 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2546,13 +2734,11 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:42 | ℹ️ Change init to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2561,11 +2747,11 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:42 | ℹ️ Change read to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2574,13 +2760,11 @@ { "data": { "text/html": [ - "
09:06:48 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:42 | ℹ️ Change readinto to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:48\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2589,13 +2773,13 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:42 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2604,11 +2788,13 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:43 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:43\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2617,11 +2803,13 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Change init to @overload\n",
+       "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\math.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\math.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2630,11 +2818,13 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Change read to @overload\n",
+       "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2643,11 +2833,11 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Change readinto to @overload\n",
+       "
22:28:44 | ℹ️ Change opt_level to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mChange opt_level to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2656,13 +2846,11 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:44 | ℹ️ Change mem_info to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mChange mem_info to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2671,13 +2859,11 @@ { "data": { "text/html": [ - "
09:06:49 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\n",
+       "
22:28:44 | ℹ️ Change qstr_info to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:49\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\machine.pyi\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mChange qstr_info to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2686,13 +2872,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\math.pyi\n",
+       "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\math.pyi\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2701,13 +2887,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\micropython.pyi\n",
+       "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\micropython.pyi\u001b[0m\n" + "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2716,11 +2902,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change opt_level to @overload\n",
+       "
22:28:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange opt_level to @overload\u001b[0m\n" + "\u001b[32m22:28:45\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2729,11 +2917,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change mem_info to @overload\n",
+       "
22:28:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange mem_info to @overload\u001b[0m\n" + "\u001b[32m22:28:45\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2742,11 +2932,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change qstr_info to @overload\n",
+       "
22:28:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange qstr_info to @overload\u001b[0m\n" + "\u001b[32m22:28:45\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2755,13 +2947,11 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\neopixel.pyi\n",
+       "
22:28:46 | ℹ️ Change active to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\neopixel.pyi\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2770,13 +2960,11 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
22:28:46 | ℹ️ Change connect to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange connect to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2785,11 +2973,11 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change active to @overload\n",
+       "
22:28:46 | ℹ️ Change status to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2798,11 +2986,11 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change connect to @overload\n",
+       "
22:28:46 | ℹ️ Change ifconfig to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange connect to @overload\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2811,11 +2999,11 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change status to @overload\n",
+       "
22:28:46 | ℹ️ Change config to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2824,11 +3012,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change ifconfig to @overload\n",
+       "
22:28:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2837,11 +3027,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Change config to @overload\n",
+       "
22:28:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2850,13 +3042,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
22:28:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2865,13 +3057,13 @@ { "data": { "text/html": [ - "
09:06:50 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
22:28:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:50\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + "\u001b[32m22:28:47\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2880,11 +3072,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change ifconfig to @overload\n",
+       "
22:28:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + "\u001b[32m22:28:47\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2893,13 +3087,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
22:28:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + "\u001b[32m22:28:47\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2908,11 +3102,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change active to @overload\n",
+       "
22:28:48 | ℹ️ Change ifconfig to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2921,11 +3115,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change status to @overload\n",
+       "
22:28:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2934,11 +3130,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change ifconfig to @overload\n",
+       "
22:28:48 | ℹ️ Change active to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2947,11 +3143,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change config to @overload\n",
+       "
22:28:48 | ℹ️ Change ifconfig to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2960,13 +3156,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\network.pyi\n",
+       "
22:28:48 | ℹ️ Change config to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\network.pyi\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -2975,11 +3169,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -2988,11 +3184,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change ifconfig to @overload\n",
+       "
22:28:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" + "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3001,11 +3199,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change mode to @overload\n",
+       "
22:28:49 | ℹ️ Change status to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" + "\u001b[32m22:28:49\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3014,11 +3212,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change ssid to @overload\n",
+       "
22:28:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ssid to @overload\u001b[0m\n" + "\u001b[32m22:28:49\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3027,11 +3227,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change auth to @overload\n",
+       "
22:28:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange auth to @overload\u001b[0m\n" + "\u001b[32m22:28:49\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3040,11 +3242,13 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change channel to @overload\n",
+       "
22:28:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3053,11 +3257,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change antenna to @overload\n",
+       "
22:28:50 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange antenna to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3066,11 +3270,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change mac to @overload\n",
+       "
22:28:50 | ℹ️ Change ifconfig to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange mac to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3079,13 +3283,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\os.pyi\n",
+       "
22:28:50 | ℹ️ Change mode to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\os.pyi\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3094,11 +3296,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change ilistdir to @overload\n",
+       "
22:28:50 | ℹ️ Change ssid to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange ilistdir to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange ssid to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3107,11 +3309,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Change listdir to @overload\n",
+       "
22:28:50 | ℹ️ Change auth to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mChange listdir to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange auth to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3120,13 +3322,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\n",
+       "
22:28:50 | ℹ️ Change channel to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3135,13 +3335,11 @@ { "data": { "text/html": [ - "
09:06:51 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:50 | ℹ️ Change antenna to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:51\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange antenna to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3150,11 +3348,11 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Change freq to @overload\n",
+       "
22:28:50 | ℹ️ Change mac to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange mac to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3163,11 +3361,13 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Change hid to @overload\n",
+       "
22:28:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange hid to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\os.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3176,11 +3376,11 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Change info to @overload\n",
+       "
22:28:50 | ℹ️ Change ilistdir to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange ilistdir to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3189,11 +3389,11 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Change mount to @overload\n",
+       "
22:28:50 | ℹ️ Change listdir to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange mount to @overload\u001b[0m\n" + "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange listdir to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3202,11 +3402,13 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Change repl_uart to @overload\n",
+       "
22:28:51 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange repl_uart to @overload\u001b[0m\n" + "\u001b[32m22:28:51\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3215,11 +3417,13 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Change usb_mode to @overload\n",
+       "
22:28:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mChange usb_mode to @overload\u001b[0m\n" + "\u001b[32m22:28:52\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3228,13 +3432,11 @@ { "data": { "text/html": [ - "
09:06:52 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:53 | ℹ️ Change freq to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:52\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3243,13 +3445,11 @@ { "data": { "text/html": [ - "
09:06:53 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:53 | ℹ️ Change hid to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:53\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange hid to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3258,13 +3458,11 @@ { "data": { "text/html": [ - "
09:06:53 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:53 | ℹ️ Change info to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:53\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3273,11 +3471,11 @@ { "data": { "text/html": [ - "
09:06:54 | ℹ️ Change info to @overload\n",
+       "
22:28:53 | ℹ️ Change mount to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" + "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange mount to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3286,11 +3484,11 @@ { "data": { "text/html": [ - "
09:06:54 | ℹ️ Change setfilter to @overload\n",
+       "
22:28:53 | ℹ️ Change repl_uart to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mChange setfilter to @overload\u001b[0m\n" + "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange repl_uart to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3299,11 +3497,11 @@ { "data": { "text/html": [ - "
09:06:54 | ℹ️ Change recv to @overload\n",
+       "
22:28:53 | ℹ️ Change usb_mode to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange usb_mode to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3312,13 +3510,13 @@ { "data": { "text/html": [ - "
09:06:54 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:54 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:54\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:54\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3327,13 +3525,13 @@ { "data": { "text/html": [ - "
09:06:55 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:55\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:55\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3342,13 +3540,13 @@ { "data": { "text/html": [ - "
09:06:55 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:56 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:55\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:56\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3357,11 +3555,11 @@ { "data": { "text/html": [ - "
09:06:56 | ℹ️ Change __init__ to @overload\n",
+       "
22:28:59 | ℹ️ Change info to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3370,13 +3568,11 @@ { "data": { "text/html": [ - "
09:06:56 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:28:59 | ℹ️ Change setfilter to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mChange setfilter to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3385,11 +3581,11 @@ { "data": { "text/html": [ - "
09:06:56 | ℹ️ Change mem_read to @overload\n",
+       "
22:28:59 | ℹ️ Change recv to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mChange mem_read to @overload\u001b[0m\n" + "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3398,11 +3594,13 @@ { "data": { "text/html": [ - "
09:06:56 | ℹ️ Change recv to @overload\n",
+       "
22:28:59 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3411,13 +3609,13 @@ { "data": { "text/html": [ - "
09:06:56 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:01 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:56\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:01\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3426,13 +3624,13 @@ { "data": { "text/html": [ - "
09:06:57 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:03 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:57\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:03\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3441,11 +3639,11 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Change intensity to @overload\n",
+       "
22:29:04 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange intensity to @overload\u001b[0m\n" + "\u001b[32m22:29:04\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3454,13 +3652,13 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:04\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3469,11 +3667,11 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Change debug to @overload\n",
+       "
22:29:06 | ℹ️ Change mem_read to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange debug to @overload\u001b[0m\n" + "\u001b[32m22:29:06\u001b[0m | ℹ️ \u001b[1mChange mem_read to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3482,11 +3680,11 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Change dict to @overload\n",
+       "
22:29:06 | ℹ️ Change recv to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange dict to @overload\u001b[0m\n" + "\u001b[32m22:29:06\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3495,11 +3693,13 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Change mapper to @overload\n",
+       "
22:29:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange mapper to @overload\u001b[0m\n" + "\u001b[32m22:29:06\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3508,11 +3708,13 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Change value to @overload\n",
+       "
22:29:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" + "\u001b[32m22:29:08\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3521,13 +3723,11 @@ { "data": { "text/html": [ - "
09:06:58 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:09 | ℹ️ Change intensity to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:58\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:09\u001b[0m | ℹ️ \u001b[1mChange intensity to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3536,11 +3736,13 @@ { "data": { "text/html": [ - "
09:06:59 | ℹ️ Change calibration to @overload\n",
+       "
22:29:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" + "\u001b[32m22:29:09\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3549,13 +3751,11 @@ { "data": { "text/html": [ - "
09:06:59 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:11 | ℹ️ Change debug to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange debug to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3564,11 +3764,11 @@ { "data": { "text/html": [ - "
09:06:59 | ℹ️ Change angle to @overload\n",
+       "
22:29:11 | ℹ️ Change dict to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange angle to @overload\u001b[0m\n" + "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange dict to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3577,11 +3777,11 @@ { "data": { "text/html": [ - "
09:06:59 | ℹ️ Change speed to @overload\n",
+       "
22:29:11 | ℹ️ Change mapper to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange speed to @overload\u001b[0m\n" + "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange mapper to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3590,11 +3790,11 @@ { "data": { "text/html": [ - "
09:06:59 | ℹ️ Change calibration to @overload\n",
+       "
22:29:11 | ℹ️ Change value to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" + "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3603,13 +3803,13 @@ { "data": { "text/html": [ - "
09:06:59 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:06:59\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3618,11 +3818,11 @@ { "data": { "text/html": [ - "
09:07:00 | ℹ️ Change __init__ to @overload\n",
+       "
22:29:12 | ℹ️ Change calibration to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:00\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:29:12\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3631,11 +3831,13 @@ { "data": { "text/html": [ - "
09:07:00 | ℹ️ Change init to @overload\n",
+       "
22:29:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:00\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + "\u001b[32m22:29:12\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3644,13 +3846,11 @@ { "data": { "text/html": [ - "
09:07:00 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:14 | ℹ️ Change angle to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:00\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mChange angle to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3659,13 +3859,11 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:14 | ℹ️ Change speed to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mChange speed to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3674,11 +3872,11 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change __init__ to @overload\n",
+       "
22:29:14 | ℹ️ Change calibration to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3687,11 +3885,13 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change init to @overload\n",
+       "
22:29:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" + "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3700,11 +3900,11 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change channel to @overload\n",
+       "
22:29:16 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" + "\u001b[32m22:29:16\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3713,11 +3913,11 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change counter to @overload\n",
+       "
22:29:16 | ℹ️ Change init to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange counter to @overload\u001b[0m\n" + "\u001b[32m22:29:16\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3726,11 +3926,13 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change freq to @overload\n",
+       "
22:29:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" + "\u001b[32m22:29:16\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3739,11 +3941,13 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change period to @overload\n",
+       "
22:29:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange period to @overload\u001b[0m\n" + "\u001b[32m22:29:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3752,11 +3956,11 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Change prescaler to @overload\n",
+       "
22:29:19 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mChange prescaler to @overload\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3765,13 +3969,11 @@ { "data": { "text/html": [ - "
09:07:01 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:19 | ℹ️ Change init to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:01\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3780,11 +3982,11 @@ { "data": { "text/html": [ - "
09:07:02 | ℹ️ Change __init__ to @overload\n",
+       "
22:29:19 | ℹ️ Change channel to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3793,11 +3995,11 @@ { "data": { "text/html": [ - "
09:07:02 | ℹ️ Change read to @overload\n",
+       "
22:29:19 | ℹ️ Change counter to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange counter to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3806,11 +4008,11 @@ { "data": { "text/html": [ - "
09:07:02 | ℹ️ Change readinto to @overload\n",
+       "
22:29:19 | ℹ️ Change freq to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3819,13 +4021,11 @@ { "data": { "text/html": [ - "
09:07:02 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:19 | ℹ️ Change period to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange period to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3834,11 +4034,11 @@ { "data": { "text/html": [ - "
09:07:02 | ℹ️ Change recv to @overload\n",
+       "
22:29:19 | ℹ️ Change prescaler to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:02\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange prescaler to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3847,13 +4047,13 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\n",
+       "
22:29:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\pyb.pyi\u001b[0m\n" + "\u001b[32m22:29:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3862,11 +4062,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Change read to @overload\n",
+       "
22:29:21 | ℹ️ Change __init__ to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" + "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3875,11 +4075,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Change readinto to @overload\n",
+       "
22:29:21 | ℹ️ Change read to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" + "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3888,11 +4088,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Change recv to @overload\n",
+       "
22:29:21 | ℹ️ Change readinto to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" + "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3901,13 +4101,13 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\random.pyi\n",
+       "
22:29:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\random\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\random.pyi\u001b[0m\n" + "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3916,11 +4116,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Change randrange to @overload\n",
+       "
22:29:23 | ℹ️ Change recv to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mChange randrange to @overload\u001b[0m\n" + "\u001b[32m22:29:23\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3929,13 +4129,13 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\select.pyi\n",
+       "
22:29:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\select.pyi\u001b[0m\n" + "\u001b[32m22:29:23\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -3944,13 +4144,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\n",
+       "
22:29:25 | ℹ️ Change read to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3959,13 +4157,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\n",
+       "
22:29:25 | ℹ️ Change readinto to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3974,13 +4170,11 @@ { "data": { "text/html": [ - "
09:07:03 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\n",
+       "
22:29:25 | ℹ️ Change recv to @overload\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:03\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" ] }, "metadata": {}, @@ -3989,13 +4183,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\n",
+       "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4004,13 +4198,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\n",
+       "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4019,13 +4213,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\stm.pyi\n",
+       "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\stm.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4034,13 +4228,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\n",
+       "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\u001b[0m\n" + "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4049,13 +4243,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\n",
+       "
22:29:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\u001b[0m\n" + "\u001b[32m22:29:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4064,13 +4258,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\sys.pyi\n",
+       "
22:29:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\sys.pyi\u001b[0m\n" + "\u001b[32m22:29:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\select.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4079,13 +4273,13 @@ { "data": { "text/html": [ - "
09:07:04 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\usys.pyi\n",
+       "
22:29:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:04\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\usys.pyi\u001b[0m\n" + "\u001b[32m22:29:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4094,13 +4288,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\time.pyi\n",
+       "
22:29:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\time.pyi\u001b[0m\n" + "\u001b[32m22:29:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4109,13 +4303,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\n",
+       "
22:29:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\u001b[0m\n" + "\u001b[32m22:29:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4124,13 +4318,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\array.pyi\n",
+       "
22:29:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\array.pyi\u001b[0m\n" + "\u001b[32m22:29:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4139,13 +4333,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\n",
+       "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uarray.pyi\u001b[0m\n" + "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4154,13 +4348,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\n",
+       "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\binascii.pyi\u001b[0m\n" + "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4169,13 +4363,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\n",
+       "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ubinascii.pyi\u001b[0m\n" + "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4184,13 +4378,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uctypes.pyi\n",
+       "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uctypes.pyi\u001b[0m\n" + "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4199,13 +4393,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\io.pyi\n",
+       "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\sys.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\io.pyi\u001b[0m\n" + "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\sys.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4214,13 +4408,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\n",
+       "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\usys.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uio.pyi\u001b[0m\n" + "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\usys.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4229,13 +4423,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\json.pyi\n",
+       "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\json.pyi\u001b[0m\n" + "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\time.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4244,13 +4438,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\n",
+       "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ujson.pyi\u001b[0m\n" + "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4259,13 +4453,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\os.pyi\n",
+       "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\os.pyi\u001b[0m\n" + "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\array.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4274,13 +4468,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\n",
+       "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uos.pyi\u001b[0m\n" + "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4289,13 +4483,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\select.pyi\n",
+       "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\select.pyi\u001b[0m\n" + "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4304,13 +4498,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\n",
+       "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uselect.pyi\u001b[0m\n" + "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4319,13 +4513,13 @@ { "data": { "text/html": [ - "
09:07:05 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\n",
+       "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:05\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\socket.pyi\u001b[0m\n" + "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4334,13 +4528,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\n",
+       "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\usocket.pyi\u001b[0m\n" + "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\io.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4349,13 +4543,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\n",
+       "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ssl.pyi\u001b[0m\n" + "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4364,13 +4558,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\n",
+       "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ussl.pyi\u001b[0m\n" + "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\json.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4379,13 +4573,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\n",
+       "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\struct.pyi\u001b[0m\n" + "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4394,13 +4588,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\n",
+       "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\ustruct.pyi\u001b[0m\n" + "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\os.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4409,13 +4603,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\time.pyi\n",
+       "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\time.pyi\u001b[0m\n" + "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4424,13 +4618,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\utime.pyi\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\select.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4439,13 +4633,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4454,13 +4648,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4469,13 +4663,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\wipy.pyi\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\wipy.pyi\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4484,11 +4678,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Change heartbeat to @overload\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mChange heartbeat to @overload\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4497,13 +4693,13 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\uzlib.pyi\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4512,13 +4708,118 @@ { "data": { "text/html": [ - "
09:07:06 | ℹ️ Merge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
-       "repos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\n",
+       "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n",
        "
\n" ], "text/plain": [ - "\u001b[32m09:07:06\u001b[0m | ℹ️ \u001b[1mMerge repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\gobotTypeshed\\micropython_typesheds\\zlib.pyi\u001b[0m\n" + "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\time.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
+       "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", + "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\u001b[0m\n" ] }, "metadata": {}, @@ -4528,400 +4829,82 @@ "source": [ "# assume root of workspace is the current directory\n", "# # Merge typehints from IntelliJ plugin with docstubs\n", - "# %run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --docstubs repos\\intellij-micropython\\typehints\n", + "%run -m stubber.stubber enrich --no-docstrings --stubs scratch --docstubs repos\\intellij-micropython\\typehints\n", + "\n", + "\n", + "# BUG:\n", + "# --no-docstring still copies over the docstring in array.array\n", + "# - function signatures are not copied, \n", "\n", "# Merge from Howard Lovatt (MIT) \n", "# %run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\PyBoardTypeshed\\micropython_typesheds\n", "\n", + "\n", + "\n", "# gobot1234\n", - "%run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\gobotTypeshed\\micropython_typesheds\n" + "# %run -m stubber.stubber enrich --no-docstrings --stubs scratch\\micropython-v1_23_0-docstubs --source repos\\gobotTypeshed\\micropython_typesheds\n" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "All checks passed!\n" - ] - } - ], + "outputs": [], "source": [ + "from pathlib import Path\n", + "\n", + "directory = Path(\"scratch/micropython-v1_23_0-docstubs\")\n", + "\n", + "NO_UMOD = [\n", + " # \"from uio import AnyReadableBuf\",\n", + " # \"from uio import AnyWritableBuf\",\n", + " # \"from uos import AbstractBlockDev\",\n", + " # \"from uio import StrOrBytesPath\",\n", + " \"from uio import\",\n", + " # \"from usocket import Socket\",\n", + " \"from usocket import\",\n", + "]\n", + "\n", + "# Iterate over all files in the directory\n", + "for file in directory.glob(\"**/*\"):\n", + " # Check if the file is a regular file\n", + " if file.is_file():\n", + " # Open the file in read mode\n", + " with file.open(mode=\"r\", encoding=\"utf-8\") as f:\n", + " # Read the contents of the file\n", + " lines = f.readlines()\n", "\n", - "! ruff check repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n" + " # Open the file in write mode\n", + " with file.open(mode=\"w\", encoding=\"utf-8\") as f:\n", + " # Iterate over each line in the file\n", + " for line in lines:\n", + " # Check if the line starts with\n", + " if any(line.startswith(l) for l in NO_UMOD):\n", + " # Modify the line to remove the `u` prefix\n", + " line = \"from \" + line[6:]\n", + "\n", + " # Write the modified line to the file\n", + " f.write(line)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING: there is a new pyright version available (v1.1.370 -> v1.1.378).\n", - "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", - "\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi:\u001b[33m12\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"Self\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uio.pyi:\u001b[33m14\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m63\u001b[39m - \u001b[31merror\u001b[39m: \"_AnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m73\u001b[39m - \u001b[31merror\u001b[39m: \"_FdOrAnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uos.pyi:\u001b[33m5\u001b[39m:\u001b[33m87\u001b[39m - \u001b[31merror\u001b[39m: \"_StrOrBytesT\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\usocket.pyi:\u001b[33m6\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi:\u001b[33m6\u001b[39m:\u001b[33m17\u001b[39m - \u001b[31merror\u001b[39m: \"StrOrBytesPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ussl.pyi:\u001b[33m7\u001b[39m:\u001b[33m21\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m42\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m72\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m84\u001b[39m:\u001b[33m47\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m84\u001b[39m:\u001b[33m47\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m96\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m107\u001b[39m:\u001b[33m47\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m107\u001b[39m:\u001b[33m47\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m117\u001b[39m:\u001b[33m46\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m128\u001b[39m:\u001b[33m52\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m128\u001b[39m:\u001b[33m52\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m139\u001b[39m:\u001b[33m46\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m150\u001b[39m:\u001b[33m52\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m150\u001b[39m:\u001b[33m52\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m168\u001b[39m:\u001b[33m39\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\array\\__init__.pyi:\u001b[33m168\u001b[39m:\u001b[33m39\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"array\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m40\u001b[39m:\u001b[33m35\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m41\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m22\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m36\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m49\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m45\u001b[39m:\u001b[33m49\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m342\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi:\u001b[33m25\u001b[39m:\u001b[33m27\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m39\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m52\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m24\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m43\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m43\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m48\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m48\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m185\u001b[39m:\u001b[33m34\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m211\u001b[39m:\u001b[33m37\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m211\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m211\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m263\u001b[39m:\u001b[33m34\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m289\u001b[39m:\u001b[33m37\u001b[39m - \u001b[36mwarning\u001b[39m: \"_KT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m289\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m289\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"_VT\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m19\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m40\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m40\u001b[39m:\u001b[33m60\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m82\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m82\u001b[39m:\u001b[33m60\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m103\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m112\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m112\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m121\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m130\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m130\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m139\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m145\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m145\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m151\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m157\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi:\u001b[33m157\u001b[39m:\u001b[33m56\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi:\u001b[33m104\u001b[39m:\u001b[33m52\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi:\u001b[33m14\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi:\u001b[33m14\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi:\u001b[33m461\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi:\u001b[33m14\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m31\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m34\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"Literal['_Hash']\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m12\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"Literal['_Hash']\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi:\u001b[33m98\u001b[39m:\u001b[33m11\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"Literal['_Hash']\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi:\u001b[33m27\u001b[39m:\u001b[33m22\u001b[39m - \u001b[36mwarning\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m85\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"Self\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m87\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m197\u001b[39m:\u001b[33m40\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['']\" cannot be assigned to parameter of type \"bytes\"\n", - "   \"Literal['']\" is incompatible with \"bytes\"\u001b[90m (reportArgumentType)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m311\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m311\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m319\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m319\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m319\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m327\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m327\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m327\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m335\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m335\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m343\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m343\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m343\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m351\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m351\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m351\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SD.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m92\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m93\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m94\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m118\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m118\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m118\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m140\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m141\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m142\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m175\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m175\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi:\u001b[33m175\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi:\u001b[33m53\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"Callable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m47\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m57\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m58\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m79\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m79\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m95\u001b[39m:\u001b[33m36\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m110\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m111\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m179\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m179\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m31\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\UART.pyi:\u001b[33m242\u001b[39m:\u001b[33m36\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi:\u001b[33m17\u001b[39m:\u001b[33m20\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m55\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m55\u001b[39m:\u001b[33m68\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m28\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m29\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"_AnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m30\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"_FdOrAnyPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m31\u001b[39m:\u001b[33m5\u001b[39m - \u001b[31merror\u001b[39m: \"_StrOrBytesT\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"uname_result\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi:\u001b[33m80\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"MSB\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi:\u001b[33m86\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"MSB\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m142\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Callable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi:\u001b[33m149\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"Callable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m5\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m5\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m5\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m258\u001b[39m:\u001b[33m43\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m352\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m354\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m448\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m450\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m544\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m547\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m641\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m643\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m731\u001b[39m:\u001b[33m100\u001b[39m - \u001b[36mwarning\u001b[39m: \"Pin\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi:\u001b[33m732\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi:\u001b[33m15\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi:\u001b[33m15\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi:\u001b[33m15\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi:\u001b[33m4\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi:\u001b[33m4\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi:\u001b[33m4\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi:\u001b[33m16\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi:\u001b[33m16\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi:\u001b[33m16\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m24\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AbstractBlockDev\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m24\u001b[39m:\u001b[33m41\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m24\u001b[39m:\u001b[33m57\u001b[39m - \u001b[31merror\u001b[39m: \"AnyWritableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m523\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractReadOnlyBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m565\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m682\u001b[39m:\u001b[33m45\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"int\" cannot be assigned to parameter of type \"tuple[int, int, int, int, bytes]\"\n", - "   \"int\" is incompatible with \"tuple[int, int, int, int, bytes]\"\u001b[90m (reportArgumentType)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi:\u001b[33m44\u001b[39m:\u001b[33m19\u001b[39m - \u001b[31merror\u001b[39m: \"JOIN_NONE\" is not a known attribute of module \".PIO\"\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m36\u001b[39m - \u001b[31merror\u001b[39m: \"TypeAlias\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m19\u001b[39m:\u001b[33m17\u001b[39m - \u001b[31merror\u001b[39m: \"StrOrBytesPath\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m21\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi:\u001b[33m148\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_TicksUs\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi:\u001b[33m154\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"_TicksCPU\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\time\\__init__.pyi:\u001b[33m169\u001b[39m:\u001b[33m32\u001b[39m - \u001b[36mwarning\u001b[39m: \"_Ticks\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi:\u001b[33m17\u001b[39m:\u001b[33m23\u001b[39m - \u001b[31merror\u001b[39m: \"AnyReadableBuf\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m58\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m59\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m62\u001b[39m:\u001b[33m23\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m97\u001b[39m:\u001b[33m50\u001b[39m - \u001b[36mwarning\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m151\u001b[39m:\u001b[33m38\u001b[39m - \u001b[36mwarning\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "156 errors, 127 warnings, 0 informations \n" - ] - } - ], + "outputs": [], + "source": [ + "\n", + "! ruff check scratch\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "\n", - "! pyright repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\n" + "! pyright scratch\\micropython-v1_23_0-docstubs\n" ] }, { diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 5b32bd54..12ec332c 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -143,7 +143,7 @@ def enrich_file( log.info(f"Merge {target} from {source}") # read source file codemod_instance = merge_docstub.MergeCommand( - context, docstub_file=source, update_docstrings=use_docstrings + context, docstub_file=source, params_only=use_docstrings ) if new_code := exec_transform_with_prettyprint( codemod_instance, diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index cd52635f..3035877e 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -62,17 +62,16 @@ def add_args(arg_parser: argparse.ArgumentParser) -> None: ) arg_parser.add_argument( - "--use-docstrings", - "--ds", - dest="use_docstrings", - default=True, + "--params-only", + dest="params_only", + default=False, ) def __init__( self, context: CodemodContext, docstub_file: Union[Path, str], - update_docstrings: bool = True, + params_only: bool = False, ) -> None: """initialize the base class with context, and save our args.""" super().__init__(context) @@ -91,7 +90,7 @@ def __init__( ] = {} self.comments: List[str] = [] - self.update_docstrings = update_docstrings + self.params_only = params_only self.stub_imports: Dict[str, ImportItem] = {} self.all_imports: List[Union[cst.Import, cst.ImportFrom]] = [] @@ -170,7 +169,7 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c assert isinstance(docstub_docstr, str) src_docstr = original_node.get_docstring() or "" if src_docstr or docstub_docstr: - if self.update_docstrings and (docstub_docstr.strip() != src_docstr.strip()): + if not self.params_only and (docstub_docstr.strip() != src_docstr.strip()): if src_docstr: log.trace(f"Append module docstrings. (new --- old) ") new_docstr = '"""\n' + docstub_docstr + "\n\n---\n" + src_docstr + '\n"""' @@ -224,7 +223,7 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo matched, i = self.locate_function_by_name(overload, updated_body) if matched: log.trace(f"Add @overload for {overload.name.value}") - if not self.update_docstrings: + if self.params_only: docstring_node = self.annotations[key].docstring_node or "" # Use the new overload - but with the existing docstring overload = update_def_docstr(overload, docstring_node) @@ -322,7 +321,7 @@ def leave_FunctionDef( doc_stub = self.annotations[stack_id].overloads.pop(0) assert doc_stub.def_node - if self.update_docstrings: + if not self.params_only: # we have copied over the entire function definition, no further processing should be done on this node doc_stub.def_node = cast(cst.FunctionDef, doc_stub.def_node) updated_node = doc_stub.def_node @@ -342,8 +341,9 @@ def leave_FunctionDef( # assert isinstance(doc_stub, TypeInfo) # assert doc_stub # first update the docstring - # TODO: DO Not overwrite existing docstring - if self.update_docstrings: + no_docstring = updated_node.get_docstring() == None + if (not self.params_only) or no_docstring: + # DO Not overwrite existing docstring updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) # Sometimes the MCU stubs and the doc stubs have different types : FunctionDef / ClassDef @@ -351,16 +351,22 @@ def leave_FunctionDef( if doc_stub.def_type == "funcdef": # Same type, we can copy over the annotations # params that should not be overwritten by the doc-stub ? - params_txt = empty_module.code_for_node(original_node.params) - overwrite_params = params_txt in [ - "", - "...", - "*args, **kwargs", - "self", - "self, *args, **kwargs", - "cls", - "cls, *args, **kwargs", - ] + if self.params_only: + # we are copying rich type definitions, just assume they are better than what is currently + # in the destination stub + overwrite_params = True + else: + params_txt = empty_module.code_for_node(original_node.params) + overwrite_params = params_txt in [ + "", + "...", + "*args, **kwargs", + "self", + "self, *args, **kwargs", + "cls", + "cls, *args, **kwargs", + ] + # return that should not be overwritten by the doc-stub ? overwrite_return = True if original_node.returns: diff --git a/tests/codemods/codemodcollector.py b/tests/codemods/codemodcollector.py index b962707c..da6e4df0 100644 --- a/tests/codemods/codemodcollector.py +++ b/tests/codemods/codemodcollector.py @@ -17,14 +17,14 @@ class TestCase(NamedTuple): path: Path = None # where are the tests -def collect_test_cases() -> List[Tuple[Any, ...]]: +def collect_test_cases(folder: str) -> List[Tuple[Any, ...]]: """ Collect tests cases for the test case folder , each containing a - before.py||.pyi - after.py||.pyi - stub.py||.pyi """ - root_test_cases_directory = Path(__file__).parent.joinpath("codemod_test_cases") + root_test_cases_directory = Path(__file__).parent.joinpath(folder) print(root_test_cases_directory) test_cases: List = [] diff --git a/tests/codemods/params_test_cases/func_docstring_add/before.py b/tests/codemods/params_test_cases/func_docstring_add/before.py new file mode 100644 index 00000000..783f1573 --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_add/before.py @@ -0,0 +1,11 @@ +""" +Add docstring if not provided +""" + + +def foo(self, iterable) -> None: + # no docstring + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_docstring_add/doc_stub.py b/tests/codemods/params_test_cases/func_docstring_add/doc_stub.py new file mode 100644 index 00000000..5cb67e92 --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_add/doc_stub.py @@ -0,0 +1,10 @@ +""" +Update docstring +""" + + +def foo(self, iterable) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ diff --git a/tests/codemods/params_test_cases/func_docstring_add/expected.py b/tests/codemods/params_test_cases/func_docstring_add/expected.py new file mode 100644 index 00000000..d519c35c --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_add/expected.py @@ -0,0 +1,15 @@ +""" +Add docstring if not provided +""" + + +def foo(self, iterable) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + # no docstring + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_docstring_add/output.py b/tests/codemods/params_test_cases/func_docstring_add/output.py new file mode 100644 index 00000000..d519c35c --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_add/output.py @@ -0,0 +1,15 @@ +""" +Add docstring if not provided +""" + + +def foo(self, iterable) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + # no docstring + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_docstring_no_overwrite/before.py b/tests/codemods/params_test_cases/func_docstring_no_overwrite/before.py new file mode 100644 index 00000000..5d52a384 --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_no_overwrite/before.py @@ -0,0 +1,15 @@ +""" +do not overwrite docstring +""" + + +def foo(self, iterable) -> None: + """ + original docstring + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_docstring_no_overwrite/doc_stub.py b/tests/codemods/params_test_cases/func_docstring_no_overwrite/doc_stub.py new file mode 100644 index 00000000..5cb67e92 --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_no_overwrite/doc_stub.py @@ -0,0 +1,10 @@ +""" +Update docstring +""" + + +def foo(self, iterable) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ diff --git a/tests/codemods/params_test_cases/func_docstring_no_overwrite/expected.py b/tests/codemods/params_test_cases/func_docstring_no_overwrite/expected.py new file mode 100644 index 00000000..5d52a384 --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_no_overwrite/expected.py @@ -0,0 +1,15 @@ +""" +do not overwrite docstring +""" + + +def foo(self, iterable) -> None: + """ + original docstring + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_docstring_no_overwrite/output.py b/tests/codemods/params_test_cases/func_docstring_no_overwrite/output.py new file mode 100644 index 00000000..5d52a384 --- /dev/null +++ b/tests/codemods/params_test_cases/func_docstring_no_overwrite/output.py @@ -0,0 +1,15 @@ +""" +do not overwrite docstring +""" + + +def foo(self, iterable) -> None: + """ + original docstring + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/before.pyi b/tests/codemods/params_test_cases/func_overload_add_2/before.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/before.pyi rename to tests/codemods/params_test_cases/func_overload_add_2/before.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/doc_stub.pyi b/tests/codemods/params_test_cases/func_overload_add_2/doc_stub.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/doc_stub.pyi rename to tests/codemods/params_test_cases/func_overload_add_2/doc_stub.pyi diff --git a/tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/expected.pyi b/tests/codemods/params_test_cases/func_overload_add_2/expected.pyi similarity index 100% rename from tests/codemods/codemod_test_cases/func_overload_add_2_no-docstring/expected.pyi rename to tests/codemods/params_test_cases/func_overload_add_2/expected.pyi diff --git a/tests/codemods/params_test_cases/func_overload_add_2/output.pyi b/tests/codemods/params_test_cases/func_overload_add_2/output.pyi new file mode 100644 index 00000000..771fb82c --- /dev/null +++ b/tests/codemods/params_test_cases/func_overload_add_2/output.pyi @@ -0,0 +1,42 @@ +# fmt: off +""" +Overloaded functions, retain existing docstrings +""" +from typing import Literal, overload + +@overload +def foo(value: int) -> None: + """ + Existing Docstring + with multiple lines + """ + ... + +@overload +def foo(value: None) -> str: + """ + Existing Docstring + with multiple lines + """ + ... + +@overload +def bar(value: Literal["s"]) -> str: ... +@overload +def bar(value: Literal["d"]) -> int: ... + +@overload +def baz(value: int) -> None: + """ + Set baz value + First overload + """ + ... + +@overload +def baz(value: None) -> str: + """ + Get baz value + Second overload + """ + ... diff --git a/tests/codemods/params_test_cases/func_param_update_overwrite/before.py b/tests/codemods/params_test_cases/func_param_update_overwrite/before.py new file mode 100644 index 00000000..7383c07f --- /dev/null +++ b/tests/codemods/params_test_cases/func_param_update_overwrite/before.py @@ -0,0 +1,14 @@ +# fmt:off +""" +partially documented function +""" + +def extend(self, iterable) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_param_update_overwrite/doc_stub.py b/tests/codemods/params_test_cases/func_param_update_overwrite/doc_stub.py new file mode 100644 index 00000000..f2c14bad --- /dev/null +++ b/tests/codemods/params_test_cases/func_param_update_overwrite/doc_stub.py @@ -0,0 +1,12 @@ +""" +simple functions +""" + +from typing import Any + + +def extend(self, iterable: Sequence[Any], /) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ diff --git a/tests/codemods/params_test_cases/func_param_update_overwrite/expected.py b/tests/codemods/params_test_cases/func_param_update_overwrite/expected.py new file mode 100644 index 00000000..b44e0ed6 --- /dev/null +++ b/tests/codemods/params_test_cases/func_param_update_overwrite/expected.py @@ -0,0 +1,15 @@ +# fmt:off +""" +partially documented function +""" +from typing import Any + +def extend(self, iterable: Sequence[Any], /) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + +def bar(): ... diff --git a/tests/codemods/params_test_cases/func_param_update_overwrite/output.py b/tests/codemods/params_test_cases/func_param_update_overwrite/output.py new file mode 100644 index 00000000..b44e0ed6 --- /dev/null +++ b/tests/codemods/params_test_cases/func_param_update_overwrite/output.py @@ -0,0 +1,15 @@ +# fmt:off +""" +partially documented function +""" +from typing import Any + +def extend(self, iterable: Sequence[Any], /) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + +def bar(): ... diff --git a/tests/codemods/test_merge.py b/tests/codemods/test_merge.py index cca2a1fa..e5909d31 100644 --- a/tests/codemods/test_merge.py +++ b/tests/codemods/test_merge.py @@ -113,7 +113,7 @@ def assertCodemod( self.assertSequenceEqual(expected_warnings, context.warnings) -@pytest.mark.parametrize("test_case", collect_test_cases()) +@pytest.mark.parametrize("test_case", collect_test_cases(folder="codemod_test_cases")) class TestMergeDocStubs(PytestCodemodTest): # The codemod that will be instantiated for us in assertCodemod. TRANSFORM = MergeCommand @@ -124,11 +124,32 @@ def test_merge_from_docstub(self, test_case: MyTestCase) -> None: pytest.skip("Skipping test because of _skip") if "_xfail" in str(test_case.path): pytest.xfail("xfail") - no_docstrings = str(test_case.path).endswith("no-docstring") + + self.assertCodemod( + test_case.before, + test_case.expected, + docstub_file=test_case.stub_file, + save_output=test_case.output, + # params_only =False, + ) + + +@pytest.mark.parametrize("test_case", collect_test_cases(folder="params_test_cases")) +class TestMergeParams(PytestCodemodTest): + # The codemod that will be instantiated for us in assertCodemod. + TRANSFORM = MergeCommand + + def test_merge_params(self, test_case: MyTestCase) -> None: + # context will allows the detection of relative imports + if "_skip" in str(test_case.path): + pytest.skip("Skipping test because of _skip") + if "_xfail" in str(test_case.path): + pytest.xfail("xfail") + self.assertCodemod( test_case.before, test_case.expected, docstub_file=test_case.stub_file, save_output=test_case.output, - update_docstrings=not no_docstrings, + params_only=True, ) From b80e06a32874c0977d5624790d545fb34ae43700 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 29 Sep 2024 02:16:18 +0200 Subject: [PATCH 25/57] Manual docstub source and and enrich tuning Signed-off-by: Jos Verlinde --- enrich_tester.ipynb | 5871 ++++-------------- pyproject.toml | 23 + src/stubber/codemod/enrich.py | 8 +- src/stubber/commands/enrich_folder_cmd.py | 13 +- src/stubber/commands/get_docstubs_cmd.py | 26 +- src/stubber/publish/missing_class_methods.py | 6 +- src/stubber/rst/lookup.py | 159 +- src/stubber/rst/reader.py | 4 +- src/stubber/stubs_from_docs.py | 7 +- 9 files changed, 1246 insertions(+), 4871 deletions(-) diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb index b7140754..cd55e34b 100644 --- a/enrich_tester.ipynb +++ b/enrich_tester.ipynb @@ -14,4858 +14,764 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 52, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "
22:26:16 | ℹ️ micropython-stubber 1.23.2a0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:16\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:16 | ℹ️ fetch updates\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:16\u001b[0m | ℹ️ \u001b[1mfetch updates\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:16 | ❌ Command '['git', 'fetch', '--all', '--tags', '--quiet']' returned non-zero exit status 128. : fatal: \n",
-       "unable to access 'https://github.com/micropython/micropython.git/': Could not resolve host: github.com\n",
-       "\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:16\u001b[0m | ❌ \u001b[1;31mCommand \u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31mgit', \u001b[0m\u001b[1;31m'fetch'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--all'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--tags'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--quiet'\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;31m' returned non-zero exit status 128. : fatal: \u001b[0m\n", - "\u001b[1;31munable to access '\u001b[0m\u001b[1;4;31mhttps://github.com/micropython/micropython.git/\u001b[0m\u001b[1;31m': Could not resolve host: github.com\u001b[0m\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:17 | ❌ Command '['git', 'fetch', '--all', '--tags', '--quiet']' returned non-zero exit status 128. : fatal: \n",
-       "unable to access 'https://github.com/micropython/micropython-lib.git/': Could not resolve host: github.com\n",
-       "\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:17\u001b[0m | ❌ \u001b[1;31mCommand \u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31mgit', \u001b[0m\u001b[1;31m'fetch'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--all'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--tags'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--quiet'\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;31m' returned non-zero exit status 128. : fatal: \u001b[0m\n", - "\u001b[1;31munable to access '\u001b[0m\u001b[1;4;31mhttps://github.com/micropython/micropython-lib.git/\u001b[0m\u001b[1;31m': Could not resolve host: github.com\u001b[0m\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:17 | ❌ Command '['git', 'fetch', '--all', '--tags', '--quiet']' returned non-zero exit status 128. : fatal: \n",
-       "unable to access 'https://github.com/josverl/micropython-stubs.git/': Could not resolve host: github.com\n",
-       "\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:17\u001b[0m | ❌ \u001b[1;31mCommand \u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m'\u001b[0m\u001b[1;31mgit', \u001b[0m\u001b[1;31m'fetch'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--all'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--tags'\u001b[0m\u001b[1;31m, \u001b[0m\u001b[1;31m'--quiet'\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;31m' returned non-zero exit status 128. : fatal: \u001b[0m\n", - "\u001b[1;31munable to access '\u001b[0m\u001b[1;4;31mhttps://github.com/josverl/micropython-stubs.git/\u001b[0m\u001b[1;31m': Could not resolve host: github.com\u001b[0m\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:17 | ℹ️ Switching to v1.23.0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:17\u001b[0m | ℹ️ \u001b[1mSwitching to v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:25 | ℹ️ repos\\micropython                        v1.23.0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:25\u001b[0m | ℹ️ \u001b[1mrepos\\micropython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:25 | ℹ️ repos\\micropython-lib                    v1.23.0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:25\u001b[0m | ℹ️ \u001b[1mrepos\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️ repos\\micropython\\lib\\micropython-lib    v1.23.0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1mrepos\\micropython\\lib\\micropython-lib v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️ Get docstubs for MicroPython v1.23.0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1mGet docstubs for MicroPython v1.\u001b[0m\u001b[1;36m23.0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:26 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:26\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:27 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:27\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️  - Writing to: scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m - Writing to: scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:28 | ℹ️ ::group:: start post processing of retrieved stubs\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:28\u001b[0m | ℹ️ \u001b[1m::group:: start post processing of retrieved stubs\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:33 | ℹ️ Running autoflake on: scratch\\micropython-v1_23_0-docstubs\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:33\u001b[0m | ℹ️ \u001b[1mRunning autoflake on: scratch\\micropython-v1_23_0-docstubs\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:26:35 | ℹ️ ::group:: Done\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:26:35\u001b[0m | ℹ️ \u001b[1m::group:: Done\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Skipping .ipynb files as Jupyter dependencies are not installed.\n", - "You can fix this by running ``pip install \"black[jupyter]\"``\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "\n", - "All done! ✨ 🍰 ✨\n", - "28 files reformatted, 174 files left unchanged.\n" - ] - } - ], - "source": [ - "# create docstubs without cleaning up the .rst docstrings\n", - "%run -m stubber.stubber docstubs --version 1.23.0 --stub-path scratch\n", - "# --no-clean-rst\n", - "\n", - "! black scratch\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "d:\\mypython\\micropython-stubber\\scratch\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\IPython\\core\\magics\\osm.py:417: UserWarning: using dhist requires you to install the `pickleshare` library.\n", - " self.shell.db['dhist'] = compress_dhist(dhist)[-100:]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "d:\\mypython\\micropython-stubber\n" - ] - } - ], - "source": [ - "# stage to see changes from next steps \n", - "%cd scratch\n", - "!git add .\n", - "%cd ..\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ micropython-stubber 1.23.2a0\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mmicropython-stubber \u001b[0m\u001b[1;36m1.23\u001b[0m\u001b[1m.2a0\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mEnriching scratch with repos\\intellij-micropython\\typehints\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ Enrich folder scratch.\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mEnrich folder scratch.\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\array.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ Change __getitem__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mChange __getitem__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:13 | ℹ️ Change __setitem__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:13\u001b[0m | ℹ️ \u001b[1mChange __setitem__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:14\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:14\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:15 | ℹ️ Change active to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:15 | ℹ️ Change config to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:15\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:16\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\btree.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:16\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\btree.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:17 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:17\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Change encrypt to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mChange encrypt to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Change decrypt to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mChange decrypt to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\esp.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\esp.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:19 | ℹ️ Change readblocks to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mChange readblocks to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:19 | ℹ️ Change writeblocks to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mChange writeblocks to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:19 | ℹ️ Change pixel to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:19\u001b[0m | ℹ️ \u001b[1mChange pixel to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Change threshold to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mChange threshold to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\io.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Change open to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mChange open to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\json.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:22\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:22 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:22\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:22\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:23 | ℹ️ Change freq to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:23\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:23 | ℹ️ Change lightsleep to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:23\u001b[0m | ℹ️ \u001b[1mChange lightsleep to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:23 | ℹ️ Change deepsleep to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:23\u001b[0m | ℹ️ \u001b[1mChange deepsleep to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:24\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:28 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:28\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:28 | ℹ️ Change init to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:28\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:31 | ℹ️ Change value to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:31 | ℹ️ Change __call__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange __call__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:31 | ℹ️ Change mode to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:31 | ℹ️ Change pull to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange pull to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:31 | ℹ️ Change drive to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mChange drive to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:32 | ℹ️ Change freq to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:32\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:32 | ℹ️ Change duty_u16 to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:32\u001b[0m | ℹ️ \u001b[1mChange duty_u16 to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:32 | ℹ️ Change duty_ns to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:32\u001b[0m | ℹ️ \u001b[1mChange duty_ns to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:34 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:34\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:34 | ℹ️ Change init to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:34\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:34 | ℹ️ Change alarm to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:34\u001b[0m | ℹ️ \u001b[1mChange alarm to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:35 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:35\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:36 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:36\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:37 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:37\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:38 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:38\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:38 | ℹ️ Change value to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:38\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:38 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:38\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:39 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:39 | ℹ️ Change init to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:39 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:39 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:39\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:40 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:40\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:41 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:41\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:42 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:42 | ℹ️ Change init to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:42 | ℹ️ Change read to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:42 | ℹ️ Change readinto to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:42 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:42\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:43 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:43\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\machine.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\math.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\math.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Change opt_level to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mChange opt_level to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Change mem_info to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mChange mem_info to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Change qstr_info to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mChange qstr_info to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:44\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:45\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:45\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:45\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Change active to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Change connect to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange connect to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Change status to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Change ifconfig to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Change config to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:46\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:47\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:47\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:47\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Change ifconfig to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Change active to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange active to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Change ifconfig to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Change config to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mChange config to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:48\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:49 | ℹ️ Change status to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:49\u001b[0m | ℹ️ \u001b[1mChange status to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:49\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp32\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:49\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\esp8266\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\network.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change ifconfig to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange ifconfig to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change mode to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange mode to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change ssid to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange ssid to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change auth to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange auth to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change channel to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change antenna to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange antenna to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change mac to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange mac to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\os.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change ilistdir to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange ilistdir to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:50 | ℹ️ Change listdir to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:50\u001b[0m | ℹ️ \u001b[1mChange listdir to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:51 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:51\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:52\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:53 | ℹ️ Change freq to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:53 | ℹ️ Change hid to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange hid to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:53 | ℹ️ Change info to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:53 | ℹ️ Change mount to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange mount to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:53 | ℹ️ Change repl_uart to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange repl_uart to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:53 | ℹ️ Change usb_mode to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:53\u001b[0m | ℹ️ \u001b[1mChange usb_mode to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:54 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:54\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:55\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:56 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:56\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:59 | ℹ️ Change info to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mChange info to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:59 | ℹ️ Change setfilter to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mChange setfilter to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:59 | ℹ️ Change recv to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:28:59 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:28:59\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:01 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:01\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:03 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:03\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:04 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:04\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:04\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:06 | ℹ️ Change mem_read to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:06\u001b[0m | ℹ️ \u001b[1mChange mem_read to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:06 | ℹ️ Change recv to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:06\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:06\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:08\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:09 | ℹ️ Change intensity to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:09\u001b[0m | ℹ️ \u001b[1mChange intensity to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:09\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:11 | ℹ️ Change debug to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange debug to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:11 | ℹ️ Change dict to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange dict to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:11 | ℹ️ Change mapper to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange mapper to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:11 | ℹ️ Change value to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mChange value to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:11\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:12 | ℹ️ Change calibration to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:12\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:12\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:14 | ℹ️ Change angle to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mChange angle to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:14 | ℹ️ Change speed to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mChange speed to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:14 | ℹ️ Change calibration to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mChange calibration to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:14\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:16 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:16\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:16 | ℹ️ Change init to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:16\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:16\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:18\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change init to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange init to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change channel to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange channel to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change counter to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange counter to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change freq to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange freq to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change period to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange period to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:19 | ℹ️ Change prescaler to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:19\u001b[0m | ℹ️ \u001b[1mChange prescaler to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:20\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:21 | ℹ️ Change __init__ to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mChange __init__ to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:21 | ℹ️ Change read to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:21 | ℹ️ Change readinto to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:21\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:23 | ℹ️ Change recv to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:23\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:23\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Change read to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mChange read to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Change readinto to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mChange readinto to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Change recv to @overload\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mChange recv to @overload\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:25\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\select.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:26\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:27\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\sys.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:28\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\sys.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\usys.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\usys.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\time.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:29\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\array.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\io.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:30\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\json.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\os.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:31 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:31\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\select.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:32\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\time.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Removing micropython-v1_23_0-docstubs/\n", + "02:11:48 | ℹ️ micropython-stubber 1.23.2a0\n", + "02:11:48 | ℹ️ fetch updates\n", + "02:11:49 | ℹ️ Switching to v1.23.0\n", + "02:11:51 | ℹ️ repos\\micropython v1.23.0\n", + "02:11:51 | ℹ️ repos\\micropython-lib v1.23.0\n", + "02:11:51 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", + "02:11:52 | ℹ️ Get docstubs for MicroPython v1.23.0\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", + "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", + "02:11:52 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", + "02:11:52 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "02:11:55 | ℹ️ ::group:: Done\n" + ] }, { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "Skipping .ipynb files as Jupyter dependencies are not installed.\n", + "You can fix this by running ``pip install \"black[jupyter]\"``\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + "\n", + "All done! ✨ 🍰 ✨\n", + "92 files reformatted, 11 files left unchanged.\n" + ] + } + ], + "source": [ + "# BLANK SLATE\n", + "! git -C scratch reset .\n", + "! git -C scratch clean . -f\n", + "\n", + "# create docstubs without cleaning up the .rst docstrings\n", + "! stubber docstubs --version 1.23.0 --stub-path scratch --no-autoflake \n", + "# --no-clean-rst\n", + "\n", + "! black scratch\n", + "! git -C scratch add ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### todo \n", + "- [ ] --no-docstring still copies over the class docstring in array.array\n", + "- [x] avoid defining AnyReadableBuf and AnyWritableBuf in multile modules ( _mpy_shed module)\n", + "- [x] for now: Include in docstub MODULE_GLUE \n", + "- [ ] check if types for module constants are copied over \n", + "- [ ] Create method to Copy TypeVars and TypeAliasses from source to target ( needed for future merges) \n", + "- [x] manual addition of some classes\n", + " - [ ] ? create a mothod to forcefully copy over a class and all methods while merging \n", + "\n", + "cmath has some incorrect type definitions for _C \n", + "\n", + "\n", + "\n", + " copy from C:\\Users\\josverl\\.vscode\\extensions\\ms-python.vscode-pylance-2024.9.1\\dist\\typeshed-fallback\\stdlib\\cmath.pyi\n" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ { - "data": { - "text/html": [ - "
22:29:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \n",
-       "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[32m22:29:33\u001b[0m | ℹ️ \u001b[1mMerge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from \u001b[0m\n", - "\u001b[1mrepos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\u001b[0m\n" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "02:12:04 | ℹ️ micropython-stubber 1.23.2a0\n", + "02:12:04 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n", + "02:12:04 | ℹ️ Enrich folder scratch.\n", + "02:12:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\n", + "02:12:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", + "02:12:04 | ℹ️ Change __getitem__ to @overload\n", + "02:12:04 | ℹ️ Change __setitem__ to @overload\n", + "02:12:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", + "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\n", + "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", + "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", + "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "from repos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\n", + "02:12:05 | ℹ️ Change active to @overload\n", + "02:12:05 | ℹ️ Change config to @overload\n", + "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "from repos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\micropython\\btree.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\n", + "02:12:06 | ℹ️ Merge \n", + "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\n", + "02:12:06 | ℹ️ Change __init__ to @overload\n", + "02:12:06 | ℹ️ Merge \n", + "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "from repos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\n", + "02:12:06 | ℹ️ Change __init__ to @overload\n", + "02:12:06 | ℹ️ Change encrypt to @overload\n", + "02:12:06 | ℹ️ Change decrypt to @overload\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "from repos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\esp.pyi\n", + "02:12:06 | ℹ️ Change sleep_type to @overload\n", + "02:12:06 | ℹ️ Change flash_read to @overload\n", + "02:12:06 | ℹ️ Change set_native_code_location to @overload\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\n", + "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\n", + "02:12:07 | ℹ️ Change readblocks to @overload\n", + "02:12:07 | ℹ️ Change writeblocks to @overload\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\n", + "02:12:07 | ℹ️ Change pixel to @overload\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\n", + "02:12:07 | ℹ️ Change threshold to @overload\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\n", + "02:12:07 | ℹ️ Change __init__ to @overload\n", + "02:12:07 | ℹ️ Change __init__ to @overload\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n", + "02:12:07 | ℹ️ Change __init__ to @overload\n", + "02:12:07 | ℹ️ Change __init__ to @overload\n", + "02:12:07 | ℹ️ Change open to @overload\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", + "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", + "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\n", + "02:12:08 | ℹ️ Change __init__ to @overload\n", + "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:08 | ℹ️ Change freq to @overload\n", + "02:12:08 | ℹ️ Change lightsleep to @overload\n", + "02:12:08 | ℹ️ Change deepsleep to @overload\n", + "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:09 | ℹ️ Change __init__ to @overload\n", + "02:12:09 | ℹ️ Change init to @overload\n", + "02:12:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:10 | ℹ️ Change value to @overload\n", + "02:12:10 | ℹ️ Change __call__ to @overload\n", + "02:12:10 | ℹ️ Change mode to @overload\n", + "02:12:10 | ℹ️ Change pull to @overload\n", + "02:12:10 | ℹ️ Change drive to @overload\n", + "02:12:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:10 | ℹ️ Change freq to @overload\n", + "02:12:10 | ℹ️ Change duty_u16 to @overload\n", + "02:12:10 | ℹ️ Change duty_ns to @overload\n", + "02:12:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:10 | ℹ️ Change __init__ to @overload\n", + "02:12:10 | ℹ️ Change init to @overload\n", + "02:12:10 | ℹ️ Change alarm to @overload\n", + "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from\n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from\n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:11 | ℹ️ Change __init__ to @overload\n", + "02:12:11 | ℹ️ Change value to @overload\n", + "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:12 | ℹ️ Change __init__ to @overload\n", + "02:12:12 | ℹ️ Change init to @overload\n", + "02:12:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from\n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:12 | ℹ️ Change __init__ to @overload\n", + "02:12:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:13 | ℹ️ Change __init__ to @overload\n", + "02:12:13 | ℹ️ Change init to @overload\n", + "02:12:13 | ℹ️ Change read to @overload\n", + "02:12:13 | ℹ️ Change readinto to @overload\n", + "02:12:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "02:12:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\math.pyi\n", + "02:12:14 | ℹ️ Merge \n", + "scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\n", + "02:12:14 | ℹ️ Change opt_level to @overload\n", + "02:12:14 | ℹ️ Change mem_info to @overload\n", + "02:12:14 | ℹ️ Change qstr_info to @overload\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "02:12:14 | ℹ️ Change active to @overload\n", + "02:12:14 | ℹ️ Change connect to @overload\n", + "02:12:14 | ℹ️ Change status to @overload\n", + "02:12:14 | ℹ️ Change ifconfig to @overload\n", + "02:12:14 | ℹ️ Change config to @overload\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", + "from repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", + "from repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "02:12:15 | ℹ️ Change ifconfig to @overload\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "02:12:15 | ℹ️ Change active to @overload\n", + "02:12:15 | ℹ️ Change ifconfig to @overload\n", + "02:12:15 | ℹ️ Change config to @overload\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "02:12:15 | ℹ️ Change status to @overload\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", + "from repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", + "from repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "02:12:16 | ℹ️ Change __init__ to @overload\n", + "02:12:16 | ℹ️ Change ifconfig to @overload\n", + "02:12:16 | ℹ️ Change mode to @overload\n", + "02:12:16 | ℹ️ Change ssid to @overload\n", + "02:12:16 | ℹ️ Change auth to @overload\n", + "02:12:16 | ℹ️ Change channel to @overload\n", + "02:12:16 | ℹ️ Change antenna to @overload\n", + "02:12:16 | ℹ️ Change mac to @overload\n", + "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n", + "02:12:16 | ℹ️ Change ilistdir to @overload\n", + "02:12:16 | ℹ️ Change listdir to @overload\n", + "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n", + "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:17 | ℹ️ Change freq to @overload\n", + "02:12:17 | ℹ️ Change hid to @overload\n", + "02:12:17 | ℹ️ Change info to @overload\n", + "02:12:17 | ℹ️ Change mount to @overload\n", + "02:12:17 | ℹ️ Change repl_uart to @overload\n", + "02:12:17 | ℹ️ Change usb_mode to @overload\n", + "02:12:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:18 | ℹ️ Change info to @overload\n", + "02:12:18 | ℹ️ Change setfilter to @overload\n", + "02:12:18 | ℹ️ Change recv to @overload\n", + "02:12:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:20 | ℹ️ Change __init__ to @overload\n", + "02:12:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:20 | ℹ️ Change mem_read to @overload\n", + "02:12:20 | ℹ️ Change recv to @overload\n", + "02:12:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:22 | ℹ️ Change intensity to @overload\n", + "02:12:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:22 | ℹ️ Change debug to @overload\n", + "02:12:22 | ℹ️ Change dict to @overload\n", + "02:12:22 | ℹ️ Change mapper to @overload\n", + "02:12:22 | ℹ️ Change value to @overload\n", + "02:12:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:23 | ℹ️ Change calibration to @overload\n", + "02:12:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:23 | ℹ️ Change angle to @overload\n", + "02:12:23 | ℹ️ Change speed to @overload\n", + "02:12:23 | ℹ️ Change calibration to @overload\n", + "02:12:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:24 | ℹ️ Change __init__ to @overload\n", + "02:12:24 | ℹ️ Change init to @overload\n", + "02:12:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:25 | ℹ️ Change __init__ to @overload\n", + "02:12:25 | ℹ️ Change init to @overload\n", + "02:12:25 | ℹ️ Change channel to @overload\n", + "02:12:25 | ℹ️ Change counter to @overload\n", + "02:12:25 | ℹ️ Change freq to @overload\n", + "02:12:25 | ℹ️ Change period to @overload\n", + "02:12:25 | ℹ️ Change prescaler to @overload\n", + "02:12:25 | ℹ️ Change capture to @overload\n", + "02:12:25 | ℹ️ Change compare to @overload\n", + "02:12:25 | ℹ️ Change pulse_width to @overload\n", + "02:12:25 | ℹ️ Change pulse_width_percent to @overload\n", + "02:12:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:25 | ℹ️ Change __init__ to @overload\n", + "02:12:25 | ℹ️ Change read to @overload\n", + "02:12:25 | ℹ️ Change readinto to @overload\n", + "02:12:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:26 | ℹ️ Change recv to @overload\n", + "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "02:12:26 | ℹ️ Change read to @overload\n", + "02:12:26 | ℹ️ Change readinto to @overload\n", + "02:12:26 | ℹ️ Change recv to @overload\n", + "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", + "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", + "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", + "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", + "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\sys.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\usys.pyi\n", + "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi \n", + "from repos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", + "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", + "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n" + ] } ], "source": [ + "! git -C scratch reset .\n", "# assume root of workspace is the current directory\n", "# # Merge typehints from IntelliJ plugin with docstubs\n", - "%run -m stubber.stubber enrich --no-docstrings --stubs scratch --docstubs repos\\intellij-micropython\\typehints\n", + "!stubber enrich --params-only --stubs scratch --docstubs repos\\intellij-micropython\\typehints\n", "\n", "\n", - "# BUG:\n", - "# --no-docstring still copies over the docstring in array.array\n", - "# - function signatures are not copied, \n", "\n", "# Merge from Howard Lovatt (MIT) \n", - "# %run -m stubber.stubber enrich --no-docstrings --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\PyBoardTypeshed\\micropython_typesheds\n", - "\n", - "\n", - "\n", - "# gobot1234\n", - "# %run -m stubber.stubber enrich --no-docstrings --stubs scratch\\micropython-v1_23_0-docstubs --source repos\\gobotTypeshed\\micropython_typesheds\n" + "# %run -m stubber.stubber enrich --params-only --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\PyBoardTypeshed\\micropython_typesheds\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Replace the `import u` with `import module`" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "\n", - "directory = Path(\"scratch/micropython-v1_23_0-docstubs\")\n", "\n", - "NO_UMOD = [\n", - " # \"from uio import AnyReadableBuf\",\n", - " # \"from uio import AnyWritableBuf\",\n", - " # \"from uos import AbstractBlockDev\",\n", - " # \"from uio import StrOrBytesPath\",\n", + "UMOD_TO_UMOD = [\n", + " \"from uarray import\",\n", " \"from uio import\",\n", - " # \"from usocket import Socket\",\n", " \"from usocket import\",\n", + " \"from uos import\",\n", + " \"from usys import\",\n", + " \"from utime import\",\n", + "]\n", + "\n", + "NO_IMPORT = [\n", + " \"from io import AnyReadableBuf\",\n", + " \"from io import AnyWritableBuf\",\n", + "]\n", + "\n", + "REPLACE = [\n", + " (\"from os import AbstractBlockDev\", \"from _mpy_shed import AbstractBlockDev\"),\n", "]\n", "\n", "# Iterate over all files in the directory\n", + "directory = Path(\"scratch/micropython-v1_23_0-docstubs\")\n", "for file in directory.glob(\"**/*\"):\n", " # Check if the file is a regular file\n", " if file.is_file():\n", @@ -4879,9 +785,16 @@ " # Iterate over each line in the file\n", " for line in lines:\n", " # Check if the line starts with\n", - " if any(line.startswith(l) for l in NO_UMOD):\n", + " if any(line.startswith(l) for l in UMOD_TO_UMOD):\n", " # Modify the line to remove the `u` prefix\n", " line = \"from \" + line[6:]\n", + " if any(line.startswith(l) for l in NO_IMPORT):\n", + " # remove the line\n", + " line = \"# \" + line\n", + " for old, new in REPLACE:\n", + " if line.startswith(old):\n", + " line = new\n", + " break\n", "\n", " # Write the modified line to the file\n", " f.write(line)" @@ -4889,22 +802,326 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ + "HASH_CLASS = '''\n", + "\n", + "class _Hash(ABC):\n", + " \"\"\"\n", + " Abstract base class for hashing algorithms that defines methods available in all algorithms.\n", + " \"\"\"\n", "\n", - "! ruff check scratch\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n" + " def update(self, data: AnyReadableBuf, /) -> None:\n", + " \"\"\"\n", + " Feed more binary data into hash.\n", + " \"\"\"\n", + "\n", + " def digest(self) -> bytes:\n", + " \"\"\"\n", + " Return hash for all data passed through hash, as a bytes object. After this\n", + " method is called, more data cannot be fed into the hash any longer.\n", + " \"\"\"\n", + "\n", + " def hexdigest(self) -> str:\n", + " \"\"\"\n", + " This method is NOT implemented. Use ``binascii.hexlify(hash.digest())``\n", + " to achieve a similar effect.\n", + " \"\"\"\n", + "\n", + "'''\n", + "# append this to scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi if it does not exist\n", + "with open(\"scratch/micropython-v1_23_0-docstubs/hashlib/__init__.pyi\", \"a\") as f:\n", + " f.write(HASH_CLASS)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ + "TIMERCHANNEL_CLASS = '''\n", "\n", - "! pyright scratch\\micropython-v1_23_0-docstubs\n" + "\n", + "class TimerChannel(ABC):\n", + " \"\"\"\n", + " Timer channels are used to generate/capture a signal using a timer.\n", + "\n", + "\n", + "\n", + " TimerChannel objects are created using the Timer.channel() method.\n", + " \"\"\"\n", + "\n", + " @abstractmethod\n", + " def callback(self, fun: Callable[[Timer], None] | None, /) -> None:\n", + " \"\"\"\n", + " Set the function to be called when the timer channel triggers.\n", + " ``fun`` is passed 1 argument, the timer object.\n", + " If ``fun`` is ``None`` then the callback will be disabled.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def capture(self) -> int:\n", + " \"\"\"\n", + " Get or set the capture value associated with a channel.\n", + " capture, compare, and pulse_width are all aliases for the same function.\n", + " capture is the logical name to use when the channel is in input capture mode.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def capture(self, value: int, /) -> None:\n", + " \"\"\"\n", + " Get or set the capture value associated with a channel.\n", + " capture, compare, and pulse_width are all aliases for the same function.\n", + " capture is the logical name to use when the channel is in input capture mode.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def compare(self) -> int:\n", + " \"\"\"\n", + " Get or set the compare value associated with a channel.\n", + " capture, compare, and pulse_width are all aliases for the same function.\n", + " compare is the logical name to use when the channel is in output compare mode.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def compare(self, value: int, /) -> None:\n", + " \"\"\"\n", + " Get or set the compare value associated with a channel.\n", + " capture, compare, and pulse_width are all aliases for the same function.\n", + " compare is the logical name to use when the channel is in output compare mode.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def pulse_width(self) -> int:\n", + " \"\"\"\n", + " Get or set the pulse width value associated with a channel.\n", + " capture, compare, and pulse_width are all aliases for the same function.\n", + " pulse_width is the logical name to use when the channel is in PWM mode.\n", + "\n", + " In edge aligned mode, a pulse_width of ``period + 1`` corresponds to a duty cycle of 100%\n", + " In center aligned mode, a pulse width of ``period`` corresponds to a duty cycle of 100%\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def pulse_width(self, value: int, /) -> None:\n", + " \"\"\"\n", + " Get or set the pulse width value associated with a channel.\n", + " capture, compare, and pulse_width are all aliases for the same function.\n", + " pulse_width is the logical name to use when the channel is in PWM mode.\n", + "\n", + " In edge aligned mode, a pulse_width of ``period + 1`` corresponds to a duty cycle of 100%\n", + " In center aligned mode, a pulse width of ``period`` corresponds to a duty cycle of 100%\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def pulse_width_percent(self) -> float:\n", + " \"\"\"\n", + " Get or set the pulse width percentage associated with a channel. The value\n", + " is a number between 0 and 100 and sets the percentage of the timer period\n", + " for which the pulse is active. The value can be an integer or\n", + " floating-point number for more accuracy. For example, a value of 25 gives\n", + " a duty cycle of 25%.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " @abstractmethod\n", + " def pulse_width_percent(self, value: int | float, /) -> None:\n", + " \"\"\"\n", + " Get or set the pulse width percentage associated with a channel. The value\n", + " is a number between 0 and 100 and sets the percentage of the timer period\n", + " for which the pulse is active. The value can be an integer or\n", + " floating-point number for more accuracy. For example, a value of 25 gives\n", + " a duty cycle of 25%.\n", + " \"\"\"\n", + "\n", + "'''\n", + "# append this to scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi if it does not exist\n", + "# with open(\"scratch/micropython-v1_23_0-docstubs/pyb/Timer.pyi\", \"a\") as f:\n", + "# f.write(TIMERCHANNEL_CLASS)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "MPY_SHED = '''\n", + "# Some base types to be used in the stubs\n", + "\n", + "from __future__ import annotations\n", + "from _typeshed import PathLike\n", + "from abc import abstractmethod\n", + "from typing import overload, Protocol, Any\n", + "from typing_extensions import TypeVar, TypeAlias\n", + "from array import array\n", + "\n", + "AnyReadableBuf : TypeAlias = bytearray | array | memoryview | bytes\n", + "AnyWritableBuf : TypeAlias = bytearray | array | memoryview\n", + "\n", + "StrOrBytesPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes]\n", + "\n", + "_StrOrBytesT = TypeVar(\"_StrOrBytesT\", str, bytes)\n", + "\n", + "class _PathLike(Protocol[_StrOrBytesT]):\n", + " @abstractmethod\n", + " def __fspath__(self) -> _StrOrBytesT:\n", + " \"\"\"Return the file system path representation of the object, preferably as a `str`.\"\"\"\n", + "\n", + "_AnyPath: TypeAlias = str | bytes | _PathLike[str] | _PathLike[bytes]\n", + "_FdOrAnyPath: TypeAlias = int | _AnyPath\n", + "\n", + "AbstractBlockDev: TypeAlias = Any\n", + "\n", + "'''\n", + "\n", + "from pathlib import Path\n", + "\n", + "target = Path(\"scratch/micropython-v1_23_0-docstubs/_mpy_shed/__init__.pyi\")\n", + "target.parent.mkdir(parents=True, exist_ok=True)\n", + "with open(target, \"w\") as f:\n", + " f.write(MPY_SHED)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 1112 errors (1112 fixed, 0 remaining).\n" + ] + } + ], + "source": [ + "\n", + "! ruff check scratch\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n", + "# TODO use ruff to sort imports and remove unused imports\n" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: there is a new pyright version available (v1.1.370 -> v1.1.382.post1).\n", + "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", + "\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m7\u001b[39m - \u001b[36mwarning\u001b[39m: Type variable \"_StrOrBytesT\" used in generic protocol \"_PathLike\" should be covariant\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m412\u001b[39m:\u001b[33m25\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_T\" appears only once in generic function signature\n", + "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi:\u001b[33m483\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m112\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m201\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m207\u001b[39m:\u001b[33m40\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['']\" cannot be assigned to parameter of type \"bytes\"\n", + "   \"Literal['']\" is incompatible with \"bytes\"\u001b[90m (reportArgumentType)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m261\u001b[39m:\u001b[33m40\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['']\" cannot be assigned to parameter of type \"bytes\"\n", + "   \"Literal['']\" is incompatible with \"bytes\"\u001b[90m (reportArgumentType)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m321\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m321\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m329\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m329\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m329\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m337\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m337\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m337\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m345\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m345\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m353\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m353\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m353\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m361\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m361\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m361\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m49\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m72\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m72\u001b[39m:\u001b[33m68\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m46\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m51\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m58\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m80\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m87\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m118\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"uname_result\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m139\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m236\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m257\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m362\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m383\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m428\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m434\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m464\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m470\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m475\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m481\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m487\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m493\u001b[39m:\u001b[33m22\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m493\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m499\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m505\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m557\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m71\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m71\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m534\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractReadOnlyBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m576\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m698\u001b[39m:\u001b[33m45\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"int\" cannot be assigned to parameter of type \"tuple[int, int, int, int, bytes]\"\n", + "   \"int\" is incompatible with \"tuple[int, int, int, int, bytes]\"\u001b[90m (reportArgumentType)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi:\u001b[33m96\u001b[39m:\u001b[33m62\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"(self: Self@PIO, callback: ((PIO) -> None) | None) -> ...\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi:\u001b[33m139\u001b[39m:\u001b[33m22\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"(self: Self@StateMachine) -> ...\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m38\u001b[39m:\u001b[33m20\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m141\u001b[39m:\u001b[33m22\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['CERT_NONE']\" cannot be assigned to parameter of type \"int\"\n", + "   \"Literal['CERT_NONE']\" is incompatible with \"int\"\u001b[90m (reportArgumentType)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi:\u001b[33m166\u001b[39m:\u001b[33m54\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"IOBase\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi:\u001b[33m166\u001b[39m:\u001b[33m61\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['stdout']\" cannot be assigned to parameter of type \"IOBase\"\n", + "   \"Literal['stdout']\" is incompatible with \"IOBase\"\u001b[90m (reportArgumentType)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m75\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m76\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m77\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m78\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m79\u001b[39m:\u001b[33m23\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m82\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m83\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m84\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m114\u001b[39m:\u001b[33m50\u001b[39m - \u001b[36mwarning\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m168\u001b[39m:\u001b[33m38\u001b[39m - \u001b[36mwarning\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "9 errors, 60 warnings, 2 informations \n" + ] + } + ], + "source": [ + "# -p defines to root to allow for sibling imports\n", + "! pyright scratch\\micropython-v1_23_0-docstubs -p scratch\\micropython-v1_23_0-docstubs \n" ] }, { diff --git a/pyproject.toml b/pyproject.toml index caf0bb5d..ebab5802 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -376,3 +376,26 @@ method_length = 50 method_cyclomatic_complexity = 99 method_cognitive_complexity = 99 method_working_memory = 99 + + +[tool.ruff] +# Exclude a variety of commonly ignored directories. +exclude = [".*", "__*", "dist"] + +# Same as Black. +line-length = 140 +indent-width = 4 + +# Assume Python 3.8 +target-version = "py38" + +[tool.ruff.lint] +# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. +# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or +# McCabe complexity (`C901`) by default. +select = ["E4", "E7", "E9", "F", "U"] +ignore = ["E402", "F821", "F403"] + +# Allow fix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 12ec332c..288ca141 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -99,7 +99,7 @@ def enrich_file( diff: bool = False, write_back: bool = False, package_name="", - use_docstrings: bool = True, + params_only: bool = False, ) -> Generator[str, None, None]: """ Enrich a MCU stubs using the doc-stubs in another folder. @@ -143,7 +143,7 @@ def enrich_file( log.info(f"Merge {target} from {source}") # read source file codemod_instance = merge_docstub.MergeCommand( - context, docstub_file=source, params_only=use_docstrings + context, docstub_file=source, params_only=params_only ) if new_code := exec_transform_with_prettyprint( codemod_instance, @@ -205,7 +205,7 @@ def enrich_folder( show_diff: bool = False, write_back: bool = False, require_docstub: bool = False, - use_docstrings: bool = True, + params_only: bool = False, package_name: str = "", ) -> int: """\ @@ -236,7 +236,7 @@ def enrich_folder( diff=True, write_back=write_back, package_name=package_name, - use_docstrings=use_docstrings, + params_only=params_only, ) ) if diffs: diff --git a/src/stubber/commands/enrich_folder_cmd.py b/src/stubber/commands/enrich_folder_cmd.py index 08ede1fb..979b2966 100644 --- a/src/stubber/commands/enrich_folder_cmd.py +++ b/src/stubber/commands/enrich_folder_cmd.py @@ -44,11 +44,10 @@ is_flag=True, ) @click.option( - "--docstrings/--no-docstrings", - "--ds/--no-ds", - "use_docstrings", - default=True, - help="Use docstrings from the (docstub) source.", + "--params-only", + "params_only", + default=False, + help="Copy only the parameters, not the docstrings (unless the docstring is missing)", show_default=True, is_flag=True, ) @@ -65,7 +64,7 @@ def cli_enrich_folder( docstubs_folder: Union[str, Path], diff: bool = False, dry_run: bool = False, - use_docstrings: bool = True, + params_only: bool = True, package_name: str = "", ): """ @@ -80,5 +79,5 @@ def cli_enrich_folder( write_back=write_back, require_docstub=False, package_name=package_name, - use_docstrings=use_docstrings, + params_only=params_only, ) diff --git a/src/stubber/commands/get_docstubs_cmd.py b/src/stubber/commands/get_docstubs_cmd.py index ff10bf01..65caaaec 100644 --- a/src/stubber/commands/get_docstubs_cmd.py +++ b/src/stubber/commands/get_docstubs_cmd.py @@ -47,13 +47,26 @@ "--version", "--tag", default="", type=str, help="Version number to use. [default: Git tag]" ) @click.option("--black/--no-black", "-b/-nb", default=True, help="Run black", show_default=True) -@click.option("--clean-rst/--no-clean-rst", "-b/-nb", default=True, help="remove .rST constructs from the docstrings", show_default=True) +@click.option( + "--autoflake/--no-autoflake", + default=True, + help="Run autoflake to clean imports", + show_default=True, +) +@click.option( + "--clean-rst/--no-clean-rst", + "-b/-nb", + default=True, + help="remove .rST constructs from the docstrings", + show_default=True, +) @click.pass_context def cli_docstubs( ctx: click.Context, path: Optional[str] = None, target: Optional[str] = None, black: bool = True, + autoflake: bool = True, clean_rst: bool = True, basename: Optional[str] = None, version: str = "", @@ -90,5 +103,14 @@ def cli_docstubs( dst_path = Path(target) / f"{basename}-{utils.clean_version(version, flat=True)}-docstubs" log.info(f"Get docstubs for MicroPython {utils.clean_version(version, drop_v=False)}") - generate_from_rst(rst_path, dst_path, version, release=release, suffix=".pyi", black=black, clean_rst=clean_rst) + generate_from_rst( + rst_path, + dst_path, + version, + release=release, + suffix=".pyi", + black=black, + autoflake=autoflake, + clean_rst=clean_rst, + ) log.info("::group:: Done") diff --git a/src/stubber/publish/missing_class_methods.py b/src/stubber/publish/missing_class_methods.py index 41bf6c2a..d11c0c92 100644 --- a/src/stubber/publish/missing_class_methods.py +++ b/src/stubber/publish/missing_class_methods.py @@ -37,7 +37,11 @@ def add_machine_pin_call(merged_path: Path, version: str): log.trace(f"Parsing {mod_path} for __call__ method") source = mod_path.read_text(encoding="utf-8") - module = cst.parse_module(source) + try: + module = cst.parse_module(source) + except Exception as e: + log.error(f"Error parsing {mod_path}: {e}") + raise e call_finder = CallFinder() module.visit(call_finder) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 8a14265e..cd524520 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -22,8 +22,10 @@ # all possible Types needed for the stubs - excess types should be removed later , and otherwise won't do much harm TYPING_IMPORT: List[str] = [ "from __future__ import annotations", - "from typing import IO, Any, Callable, Coroutine, Dict, Generator, Iterator, List, NoReturn, Optional, Tuple, Union, NamedTuple, TypeVar", "from _typeshed import Incomplete", + "from typing import IO, Any, Callable, Coroutine, Dict, Generator, Iterator, List, NoReturn, Optional, Tuple, Union, NamedTuple", + "from typing_extensions import TypeVar, TypeAlias, Awaitable", + "# TYPING_IMPORT", ] @@ -143,7 +145,7 @@ class Fix: "pyb.SPI.recv": ("bytes", 0.95), # complex in docstring "pyb.hid_keyboard": ("Tuple", 0.95), # ? "pyb.hid_mouse": ("Tuple", 0.95), # plain wrong - "ubluetooth.BLE.irq": ("Any", 0.95), # never returns + "ubluetooth.BLE.irq": ("Any", 0.95), "uctypes.bytearray_at": ("bytearray", 0.95), "uctypes.bytes_at": ("bytes", 0.95), "uio.open": ("IO", 0.95), # Open a file. @@ -173,8 +175,9 @@ class Fix: # espnow "espnow.ESPNow.recv": ("Union[List, Tuple[None,None]]", 0.95), # list / ? tuple of bytestrings # esp32 - "esp21.Partition.readblocks": ("None", 0.95), - "esp21.Partition.writeblocks": ("None", 0.95), + "esp32.Partition.readblocks": ("None", 0.95), + "esp32.Partition.writeblocks": ("None", 0.95), + "rp2.PIO.irq": ("Incomplete", 0.95), # no IRQ type defined } @@ -231,36 +234,139 @@ class Fix: # - to allow one module te refer to another, # - to import other supporting modules # - to add missing abstract classes +# - to add TypeAliases and TypeVars + +# TODO: avoid defining AnyReadableBuf and AnyWritableBuf in multile modules +ANY_BUF = ["from _mpy_shed import AnyReadableBuf, AnyWritableBuf"] MODULE_GLUE = { - "lcd160cr": ["from machine.SPI import SPI"], # module returns SPI objects defined in machine + "array": ['_T: Final = TypeVar("_T", int, float, Text)'], + "asyncio": ANY_BUF + + [ + '_T = TypeVar("_T")', + "# `Coroutine` `_T` is covariant and `Awaitable` `_T` is invariant.", + "_C :TypeAlias = Coroutine[Any, None, _T] | Awaitable[_T]", + 'StreamReader:TypeAlias = "Stream"', + 'StreamWriter:TypeAlias = "Stream"', + ], + "bluetooth": ANY_BUF + + [ + "_Flag: TypeAlias = int", + '_Descriptor: TypeAlias = tuple["UUID", _Flag]', + '_Characteristic: TypeAlias = (tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]])', + '_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]]', + ], "collections": [ "from queue import Queue", "from stdlib.collections import OrderedDict as stdlib_OrderedDict, deque as stdlib_deque, namedtuple as stdlib_namedtuple # type: ignore", - ], # dequeu is a subclass - "os": [ - # "from stdlib.os import uname_result", # uname returns uname_result - "from stdlib.os import * # type: ignore", # integrate STDLIB + '_KT: Final = TypeVar("_KT")', + '_VT: Final = TypeVar("_VT")', ], - "io": ["from stdlib.io import * # type: ignore"], # integrate STDLIB - "socket": ["from stdlib.socket import * # type: ignore"], # integrate STDLIB - "ssl": ["from stdlib.ssl import * # type: ignore"], # integrate STDLIB - # const: 3 - paired with param and return typing + "io": ANY_BUF, "micropython": ["Const_T = TypeVar('Const_T',int, float, str, bytes, Tuple) # constant"], - # - # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such + "cmath": [ + "from typing_extensions import TypeAlias", + "_C: TypeAlias = SupportsFloat | SupportsComplex | SupportsIndex | complex", + ], + "cryptolib": ANY_BUF, + "esp": ANY_BUF, "espnow": [ - "from _espnow import ESPNowBase # type: ignore" + "from _espnow import ESPNowBase # type: ignore", ], # ESPNowBase is an undocumented base class - "machine.I2C": ["from .Pin import Pin"], # uses Pin + "framebuf": ANY_BUF, + "hashlib": ANY_BUF, + "heapq": [ + '_T: Final = TypeVar("_T")', + ], + "lcd160cr": ANY_BUF + ["from machine.SPI import SPI"], # uses SPI + "os": [ + "from stdlib.os import * # type: ignore", # integrate STDLIB + ], + # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such + "machine.ADC": [ + "from .Pin import Pin", + "ATTN_0DB:int = ...", + ], + "machine.I2C": ANY_BUF + ["from .Pin import Pin"], # uses Pin + "machine.I2S": ANY_BUF + ["from .Pin import Pin"], + "machine.PWM": ANY_BUF + ["from .Pin import Pin"], + "machine.RTC": [ + "from machine import IDLE", + ], + "machine.SD": ["from .Pin import Pin"], # uses Pin + "machine.SDCard": ["from .Pin import Pin"], # uses Pin "machine.Signal": ["from .Pin import Pin"], # uses Pin - "machine.ADC": ["ATTN_0DB:int = ..."], # uses Pin - "machine.RTC": ["from machine import IDLE"], # uses Pin - "machine.UART": ["from machine import IDLE"], # uses Pin + "machine.SPI": ANY_BUF + ["from .Pin import Pin"], # uses Pin + "machine.UART": ANY_BUF + + [ + "from machine import IDLE", + "from .Pin import Pin", + ], # uses Pin + "micropython": [ + "from typing import Tuple", + '_T: Final = TypeVar("_T")', + '_F: Final = TypeVar("_F", bound=Callable[..., Any])', + 'Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) # constant', + ], "network": ["from typing import Protocol"], # for AbstractNIC - "rp2": ["from .PIO import PIO"], # - "pyb": ["from .UART import UART"], # uses Pin + "neopixel": [ + "from typing_extensions import TypeAlias", + "_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int]", + ], # for AbstractNIC + # "rp2": ["from .PIO import PIO"], # + "rp2.StateMachine": ["from .PIO import PIO"], # + "pyb": ANY_BUF + + [ + "from .UART import UART", + ], + "pyb.ADC": ANY_BUF + ["from .Pin import Pin", "from .Timer import Timer"], + "pyb.CAN": ANY_BUF, + "pyb.DAC": ANY_BUF + + [ + "from .Pin import Pin", + "from .Timer import Timer", + ], + "pyb.ExtInt": ["from .Pin import Pin"], + "pyb.I2C": ANY_BUF, + "pyb.SPI": ANY_BUF, + "pyb.UART": ANY_BUF, + "pyb.USB_HID": ANY_BUF, + "pyb.USB_VCP": ANY_BUF, "pyb.Switch": ["from .Pin import Pin"], # uses Pin + "pyb.Timer": [ + "from abc import ABC, abstractmethod", + "from .Pin import Pin", + ], # uses Pin + "socket": [ + "from stdlib.socket import * # type: ignore", + "from typing_extensions import TypeAlias", + "_Address: TypeAlias = tuple[str, int] | tuple[str, int, int, int] | str", + ], # integrate STDLIB + "ssl": [ + "from _mpy_shed import StrOrBytesPath", + "from stdlib.ssl import * # type: ignore", + ], # integrate STDLIB + "struct": ANY_BUF, + "time": [ + "from typing_extensions import TypeAlias", + "class _TicksMs: ...", + "class _TicksUs: ...", + "class _TicksCPU: ...", + "_Ticks: TypeAlias = _TicksMs | _TicksUs | _TicksCPU | int", + ], + "uctypes": ANY_BUF + + [ + "from typing_extensions import TypeAlias", + "_ScalarProperty: TypeAlias = int", + "_RecursiveProperty: TypeAlias = tuple[int, _property]", + "_ArrayProperty: TypeAlias = tuple[int, int]", + "_ArrayOfAggregateProperty: TypeAlias = tuple[int, int, _property]", + "_PointerToAPrimitiveProperty: TypeAlias = tuple[int, int]", + "_PointerToAaAggregateProperty: TypeAlias = tuple[int, _property]", + "_BitfieldProperty: TypeAlias = int", + "_property: TypeAlias = _ScalarProperty | _RecursiveProperty | _ArrayProperty | _ArrayOfAggregateProperty | _PointerToAPrimitiveProperty | _PointerToAaAggregateProperty | _BitfieldProperty", + "_descriptor: TypeAlias = tuple[str, _property]", + ], } @@ -357,10 +463,10 @@ class Fix: "pins:Optional[Tuple]", ), # ## rp2.PIO.irq - Fix( - "trigger=IRQ_SM0|IRQ_SM1|IRQ_SM2|IRQ_SM3", - "trigger=IRQ_SM0", - ), + # Fix( No longer needed with py 3.12 notation + # "trigger=IRQ_SM0|IRQ_SM1|IRQ_SM2|IRQ_SM3", + # "trigger=IRQ_SM0", + # ), # SPI.INIT - to fix error: Non-default argument follows default argument # ✅ fixed in doc v1.18+ Fix( @@ -551,6 +657,7 @@ class Fix: "array": "List", # network "AbstractNIC": "Protocol", + "NeoPixel": "Sequence", } diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index 5ee926bd..d2f8af2d 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -85,6 +85,7 @@ from stubber.utils.config import CONFIG SEPARATOR = "::" +USE_SUBMODULES = True class FileReadWriter: @@ -483,9 +484,8 @@ def parse_toc(self): toctree = self.read_docstring() # cleanup toctree toctree = [x.strip() for x in toctree if f"{self.current_module}." in x] - use_sub_modules = True - if use_sub_modules: + if USE_SUBMODULES: # add sub modules imports for file in toctree: rel_name = file.replace(f"{self.modulename}.", ".").replace(".rst", "") diff --git a/src/stubber/stubs_from_docs.py b/src/stubber/stubs_from_docs.py index dbe604d7..273cc183 100644 --- a/src/stubber/stubs_from_docs.py +++ b/src/stubber/stubs_from_docs.py @@ -22,6 +22,7 @@ def generate_from_rst( pattern: str = "*.rst", suffix: str = ".pyi", black: bool = True, + autoflake: bool = True, clean_rst: bool = True, ) -> int: dst_path.mkdir(parents=True, exist_ok=True) @@ -41,7 +42,7 @@ def generate_from_rst( log.info("::group:: start post processing of retrieved stubs") # do not run stubgen - utils.do_post_processing([dst_path], stubgen=False, black=black, autoflake=True) + utils.do_post_processing([dst_path], stubgen=False, black=black, autoflake=autoflake) # Generate a module manifest for the docstubs utils.make_manifest( @@ -73,7 +74,9 @@ def get_rst_sources(rst_path: Path, pattern: str) -> List[Path]: return files -def make_docstubs(dst_path: Path, v_tag: str, release: str, suffix: str, files: List[Path],clean_rst:bool): +def make_docstubs( + dst_path: Path, v_tag: str, release: str, suffix: str, files: List[Path], clean_rst: bool +): """Create the docstubs""" for file in files: From 07ad1bce1f2811e40b2714cc043bf1ce508aa95d Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 27 Oct 2024 20:48:46 +0100 Subject: [PATCH 26/57] stubber: Also merge TypeVars Signed-off-by: Jos Verlinde --- src/stubber/codemod/merge_docstub.py | 18 ++- src/stubber/codemod/visitors/typevars.py | 125 ++++++++++++++++++ .../codemod_test_cases/typevar_add/before.py | 10 ++ .../typevar_add/doc_stub.py | 18 +++ .../typevar_add/expected.py | 18 +++ tests/codemods/codemodcollector.py | 12 +- tests/codemods/test_merge.py | 20 +-- 7 files changed, 202 insertions(+), 19 deletions(-) create mode 100644 src/stubber/codemod/visitors/typevars.py create mode 100644 tests/codemods/codemod_test_cases/typevar_add/before.py create mode 100644 tests/codemods/codemod_test_cases/typevar_add/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/typevar_add/expected.py diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 3035877e..30c896a6 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -17,13 +17,14 @@ from stubber.cst_transformer import ( MODULE_KEY, - StubTypingCollector, - TypeInfo, AnnoValue, + StubTypingCollector, update_def_docstr, update_module_docstr, ) +from .visitors.typevars import AddTypeVarsVisitor, GatherTypeVarsVisitor + Mod_Class_T = TypeVar("Mod_Class_T", cst.Module, cst.ClassDef) """TypeVar for Module or ClassDef that both support overloads""" ########################################################################################## @@ -105,6 +106,7 @@ def __init__( # create the collectors typing_collector = StubTypingCollector() import_collector = GatherImportsVisitor(context) + typevar_collector = GatherTypeVarsVisitor(context) # visit the doc-stub file with all collectors stub_tree.visit(typing_collector) self.annotations = typing_collector.annotations @@ -113,6 +115,9 @@ def __init__( stub_tree.visit(import_collector) self.stub_imports = import_collector.symbol_mapping self.all_imports = import_collector.all_imports + # Get typevars + stub_tree.visit(typevar_collector) + self.typevars = typevar_collector.all_typevars # ------------------------------------------------------------------------ @@ -160,6 +165,15 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c obj="*", ) # -------------------------------------------------------------------- + # Add any typevars to the module + if self.typevars: + for tv in self.typevars: + AddTypeVarsVisitor.add_typevar(self.context, tv) # type: ignore + + atv = AddTypeVarsVisitor(self.context) + updated_node = atv.transform_module(updated_node) + + # -------------------------------------------------------------------- # update the docstring. if MODULE_KEY in self.annotations: diff --git a/src/stubber/codemod/visitors/typevars.py b/src/stubber/codemod/visitors/typevars.py new file mode 100644 index 00000000..dfe432b6 --- /dev/null +++ b/src/stubber/codemod/visitors/typevars.py @@ -0,0 +1,125 @@ +""" +Gather all TypeVar assignments in a module. +""" + +from typing import List, Tuple, Union + +import libcst +from libcst import SimpleStatementLine, matchers, parse_statement +from libcst.codemod._context import CodemodContext +from libcst.codemod._visitor import ContextAwareTransformer, ContextAwareVisitor +from libcst.codemod.visitors._add_imports import _skip_first + +_empty_module = libcst.parse_module("") # Debugging aid : empty_module.code_for_node(node) + + +class GatherTypeVarsVisitor(ContextAwareVisitor): + """ + A class for tracking visited TypeVars. + """ + + def __init__(self, context: CodemodContext) -> None: + super().__init__(context) + # Track all of the TypeVar assignments found in this transform + self.all_typevars: List[Union[libcst.Assign, libcst.AnnAssign]] = [] + + def visit_Assign(self, node: libcst.Assign) -> None: + + # is this a TypeVar assignment? + # needs to be more robust + + if isinstance(node.value, libcst.Call) and node.value.func.value == "TypeVar": + self.all_typevars.append(node) + + # def visit_AnnAssign(self, node: libcst.AnnAssign) -> None: + # # Track this import statement for later analysis. + # self.all_typevars.append(node) + + +class AddTypeVarsVisitor(ContextAwareTransformer): + # loosly based on AddImportsVisitor + CONTEXT_KEY = "AddTypeVarsVisitor" + + def __init__(self, context: CodemodContext) -> None: + super().__init__(context) + self.typevars: List[libcst.Assign] = context.scratch.get(self.CONTEXT_KEY, []) + + self.all_typevars: List[libcst.Assign] = [] + + @classmethod + def add_typevar(cls, context: CodemodContext, node: libcst.Assign): + typevars = context.scratch.get(cls.CONTEXT_KEY, []) + typevars.append(node) + context.scratch[cls.CONTEXT_KEY] = typevars + # add the typevar to the module + + def visit_Module(self, node: libcst.Module) -> None: + self.all_typevars = [] + ... + + def leave_Module( + self, + original_node: libcst.Module, + updated_node: libcst.Module, + ) -> libcst.Module: + + if not self.typevars: + return updated_node + + # split the module into 3 parts + # before the first import, the imports, and after the imports + ( + statements_before_imports, + statements_until_add_imports, + statements_after_imports, + ) = self._split_module(original_node, updated_node) + + typevar_statements = [SimpleStatementLine(body=[tv]) for tv in self.typevars] + body = ( + *statements_before_imports, + *statements_until_add_imports, + *typevar_statements, + *statements_after_imports, + ) + + return updated_node.with_changes(body=body) + + def _split_module( + self, + orig_module: libcst.Module, + updated_module: libcst.Module, + ) -> Tuple[ + List[Union[libcst.SimpleStatementLine, libcst.BaseCompoundStatement]], + List[Union[libcst.SimpleStatementLine, libcst.BaseCompoundStatement]], + List[Union[libcst.SimpleStatementLine, libcst.BaseCompoundStatement]], + ]: + # method copied from AddImportsVisitor + # can likely be simplified for typevars + statement_before_import_location = 0 + import_add_location = 0 + + # This works under the principle that while we might modify node contents, + # we have yet to modify the number of statements. So we can match on the + # original tree but break up the statements of the modified tree. If we + # change this assumption in this visitor, we will have to change this code. + + # Finds the location to add imports. It is the end of the first import block that occurs before any other statement (save for docstrings) + + # Never insert an import before initial __strict__ flag or docstring + if _skip_first(orig_module): + statement_before_import_location = import_add_location = 1 + + for i, statement in enumerate(orig_module.body[statement_before_import_location:]): + if matchers.matches( + statement, + matchers.SimpleStatementLine(body=[matchers.ImportFrom() | matchers.Import()]), + ): + import_add_location = i + statement_before_import_location + 1 + else: + break + + return ( + list(updated_module.body[:statement_before_import_location]), + list(updated_module.body[statement_before_import_location:import_add_location]), + list(updated_module.body[import_add_location:]), + ) diff --git a/tests/codemods/codemod_test_cases/typevar_add/before.py b/tests/codemods/codemod_test_cases/typevar_add/before.py new file mode 100644 index 00000000..42e5595e --- /dev/null +++ b/tests/codemods/codemod_test_cases/typevar_add/before.py @@ -0,0 +1,10 @@ +#fmt: off +""" +add typevar +""" + + +def const(): ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/typevar_add/doc_stub.py b/tests/codemods/codemod_test_cases/typevar_add/doc_stub.py new file mode 100644 index 00000000..a4582c2f --- /dev/null +++ b/tests/codemods/codemod_test_cases/typevar_add/doc_stub.py @@ -0,0 +1,18 @@ +# fmt: off +""" +add typevar +""" + + +from typing import Tuple, TypeVar + +Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) # constant + +x = 2 + +def const(expr: Const_T, /) -> Const_T: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... diff --git a/tests/codemods/codemod_test_cases/typevar_add/expected.py b/tests/codemods/codemod_test_cases/typevar_add/expected.py new file mode 100644 index 00000000..5f6635ac --- /dev/null +++ b/tests/codemods/codemod_test_cases/typevar_add/expected.py @@ -0,0 +1,18 @@ +# fmt: off +""" +add typevar +""" +from typing import Tuple, TypeVar + +Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) + + +def const(expr: Const_T, /) -> Const_T: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... + + +def bar(): ... diff --git a/tests/codemods/codemodcollector.py b/tests/codemods/codemodcollector.py index da6e4df0..83043d83 100644 --- a/tests/codemods/codemodcollector.py +++ b/tests/codemods/codemodcollector.py @@ -1,5 +1,3 @@ -import ast -import os from pathlib import Path from typing import Any, List, NamedTuple, Tuple @@ -12,9 +10,9 @@ class TestCase(NamedTuple): before: str # The source code before the transformation. expected: str # The source code after the transformation. doc_stub: str # The stub to apply - stub_file: str # The path to stub file to apply - output: Path = None # where to save the output for testing the tests - path: Path = None # where are the tests + stub_file: Path | str # The path to stub file to apply + output: Path | None = None # where to save the output for testing the tests + path: Path | None = None # where are the tests def collect_test_cases(folder: str) -> List[Tuple[Any, ...]]: @@ -64,7 +62,7 @@ def collect_test_cases(folder: str) -> List[Tuple[Any, ...]]: id=test_case_directory.name, ) ) - return tuple(test_cases) + return tuple(test_cases) # type: ignore # class ExceptionCase(NamedTuple): @@ -109,4 +107,4 @@ def collect_test_cases(folder: str) -> List[Tuple[Any, ...]]: # Just for debugging purposes. if __name__ == "__main__": - collect_test_cases() + collect_test_cases(".") diff --git a/tests/codemods/test_merge.py b/tests/codemods/test_merge.py index e5909d31..bf7544e7 100644 --- a/tests/codemods/test_merge.py +++ b/tests/codemods/test_merge.py @@ -1,18 +1,17 @@ # sourcery skip: snake-case-functions import difflib from pathlib import Path -from typing import Any, Dict, Optional, Sequence, Tuple +from typing import Any, Optional, Sequence import pytest +from libcst._parser.entrypoints import parse_module +from libcst._parser.types.config import PartialParserConfig +from libcst.codemod import CodemodContext +from libcst.codemod._runner import SkipFile from libcst.codemod._testing import ( - CodemodContext, CodemodTest, - PartialParserConfig, - SkipFile, - _CodemodTest, - parse_module, + _CodemodTest, # type: ignore ) - from stubber.codemod.merge_docstub import MergeCommand from .codemodcollector import TestCase as MyTestCase @@ -103,10 +102,11 @@ def assertCodemod( # pyre-ignore This mixin needs to be used with a UnitTest subclass. self.fail("Expected SkipFile but was not raised") - # pyre-ignore This mixin needs to be used with a UnitTest subclass. + # pyre-ignore This mixin needs to be used with a UnitTest subclass + # ignore spacing in # fmt: on/off self.assertEqual( - CodemodTest.make_fixture_data(after), - CodemodTest.make_fixture_data(output_tree.code), + CodemodTest.make_fixture_data(after.replace("#fmt: o", "# fmt: o")), + CodemodTest.make_fixture_data(output_tree.code.replace("#fmt: o", "# fmt: o")), ) if expected_warnings is not None: # pyre-ignore This mixin needs to be used with a UnitTest subclass. From d2bd2835517df61b1de347f38f1fb3def27996a0 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 27 Oct 2024 20:49:29 +0100 Subject: [PATCH 27/57] stubber: Add lookups for _rp2.DMA and _rp2.PIO Signed-off-by: Jos Verlinde --- src/stubber/rst/lookup.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index cd524520..0009eb9c 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -177,7 +177,18 @@ class Fix: # esp32 "esp32.Partition.readblocks": ("None", 0.95), "esp32.Partition.writeblocks": ("None", 0.95), - "rp2.PIO.irq": ("Incomplete", 0.95), # no IRQ type defined + "_rp2.bootsel_button": ("int", 0.95), + "_rp2.DMA.active": ("bool", 0.95), + "_rp2.DMA.pack_ctrl": ("int", 0.95), + "_rp2.DMA.unpack_ctrl": ("dict", 0.95), + "_rp2.DMA.close": ("None", 0.95), + "_rp2.DMA.config": ("None", 0.95), + "_rp2.DMA.irq": ("irq", 0.95), + "_rp2.PIO.state_machine": ("StateMachine", 0.95), + "_rp2.PIO.irq": ("irq", 0.95), + "_rp2.PIO.remove_program": ("None", 0.95), + "_rp2.PIO.add_program": ("None", 0.95), + "rp2.PIO.irq": ("irq", 0.95), } @@ -258,7 +269,9 @@ class Fix: ], "collections": [ "from queue import Queue", - "from stdlib.collections import OrderedDict as stdlib_OrderedDict, deque as stdlib_deque, namedtuple as stdlib_namedtuple # type: ignore", + "from stdlib.collections import OrderedDict as stdlib_OrderedDict # type: ignore", + "from stdlib.collections import deque as stdlib_deque # type: ignore", + "from stdlib.collections import namedtuple as stdlib_namedtuple # type: ignore", '_KT: Final = TypeVar("_KT")', '_VT: Final = TypeVar("_VT")', ], @@ -313,11 +326,11 @@ class Fix: "from typing_extensions import TypeAlias", "_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int]", ], # for AbstractNIC - # "rp2": ["from .PIO import PIO"], # - "rp2.StateMachine": ["from .PIO import PIO"], # "pyb": ANY_BUF + [ "from .UART import UART", + "_OldAbstractBlockDev: TypeAlias = Any", + "_OldAbstractReadOnlyBlockDev: TypeAlias = Any", ], "pyb.ADC": ANY_BUF + ["from .Pin import Pin", "from .Timer import Timer"], "pyb.CAN": ANY_BUF, @@ -337,6 +350,8 @@ class Fix: "from abc import ABC, abstractmethod", "from .Pin import Pin", ], # uses Pin + # "rp2": ["from .PIO import PIO"], # + # "rp2.PIO": ["from .irq import irq"], # "socket": [ "from stdlib.socket import * # type: ignore", "from typing_extensions import TypeAlias", From 97c76d9f3171f05a91a05b4707d24ceee8cf1788 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 27 Oct 2024 21:28:37 +0100 Subject: [PATCH 28/57] stubber: Also merge TypeAliases Signed-off-by: Jos Verlinde --- src/stubber/codemod/visitors/typevars.py | 16 +++++++++----- .../typealias_add/before.py | 10 +++++++++ .../typealias_add/doc_stub.py | 21 ++++++++++++++++++ .../typealias_add/expected.py | 22 +++++++++++++++++++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/typealias_add/before.py create mode 100644 tests/codemods/codemod_test_cases/typealias_add/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/typealias_add/expected.py diff --git a/src/stubber/codemod/visitors/typevars.py b/src/stubber/codemod/visitors/typevars.py index dfe432b6..b0374a6d 100644 --- a/src/stubber/codemod/visitors/typevars.py +++ b/src/stubber/codemod/visitors/typevars.py @@ -24,16 +24,22 @@ def __init__(self, context: CodemodContext) -> None: self.all_typevars: List[Union[libcst.Assign, libcst.AnnAssign]] = [] def visit_Assign(self, node: libcst.Assign) -> None: - + """ + Find all TypeVar assignments in the module. + format: T = TypeVar("T", int, float, str, bytes, Tuple) + """ # is this a TypeVar assignment? # needs to be more robust - if isinstance(node.value, libcst.Call) and node.value.func.value == "TypeVar": self.all_typevars.append(node) - # def visit_AnnAssign(self, node: libcst.AnnAssign) -> None: - # # Track this import statement for later analysis. - # self.all_typevars.append(node) + def visit_AnnAssign(self, node: libcst.AnnAssign) -> None: + """ " + Find all TypeAlias assignments in the module. + format: T: TypeAlias = str + """ + if isinstance(node.annotation.annotation, libcst.Name) and node.annotation.annotation.value == "TypeAlias": + self.all_typevars.append(node) class AddTypeVarsVisitor(ContextAwareTransformer): diff --git a/tests/codemods/codemod_test_cases/typealias_add/before.py b/tests/codemods/codemod_test_cases/typealias_add/before.py new file mode 100644 index 00000000..9ef19cb8 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typealias_add/before.py @@ -0,0 +1,10 @@ +#fmt: off +""" +add typealias +""" + + +def const(): ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py b/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py new file mode 100644 index 00000000..35583220 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py @@ -0,0 +1,21 @@ +# fmt: off +""" +add typealias +""" + + +from typing import TypeAlias + +UUID: TypeAlias = str +_Flag: TypeAlias = int +_Descriptor: TypeAlias = tuple["UUID", _Flag] +_Characteristic: TypeAlias = (tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]]) +_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]] +x = 2 + +def bar(f:_Flag , d:_Descriptor ) -> _Service: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... diff --git a/tests/codemods/codemod_test_cases/typealias_add/expected.py b/tests/codemods/codemod_test_cases/typealias_add/expected.py new file mode 100644 index 00000000..7f61917b --- /dev/null +++ b/tests/codemods/codemod_test_cases/typealias_add/expected.py @@ -0,0 +1,22 @@ +# fmt: off +""" +add typealias +""" +from typing import TypeAlias + +UUID: TypeAlias = str +_Flag: TypeAlias = int +_Descriptor: TypeAlias = tuple["UUID", _Flag] +_Characteristic: TypeAlias = (tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]]) +_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]] + + +def const(): ... + + +def bar(f:_Flag , d:_Descriptor ) -> _Service: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... From e28b655974f5f43bec0a8441be43005a55d6176f Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 28 Oct 2024 22:06:52 +0100 Subject: [PATCH 29/57] Refactor type lookup logic and improve signature parsing - Updated the `_type_from_context` function to handle method/function/class signatures more accurately. - Modified the lookup process to avoid repeated names in module and item names. - Improved the parsing of docstrings to extract return types. Fixes #123 Signed-off-by: Jos Verlinde --- enrich_tester.ipynb | 1618 +++++++++++++++++++++++----------- src/stubber/rst/lookup.py | 89 +- src/stubber/rst/rst_utils.py | 39 +- tests/rst/test_returns.py | 44 +- 4 files changed, 1184 insertions(+), 606 deletions(-) diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb index cd55e34b..21dfe505 100644 --- a/enrich_tester.ipynb +++ b/enrich_tester.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Try to merge in overloads from other maintainers \n", + "Try to merge in overloads from handcoded and other maintainers \n", "----\n", "\n", "- clone to repos \n", @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 123, "metadata": {}, "outputs": [ { @@ -22,179 +22,179 @@ "output_type": "stream", "text": [ "Removing micropython-v1_23_0-docstubs/\n", - "02:11:48 | ℹ️ micropython-stubber 1.23.2a0\n", - "02:11:48 | ℹ️ fetch updates\n", - "02:11:49 | ℹ️ Switching to v1.23.0\n", - "02:11:51 | ℹ️ repos\\micropython v1.23.0\n", - "02:11:51 | ℹ️ repos\\micropython-lib v1.23.0\n", - "02:11:51 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", - "02:11:52 | ℹ️ Get docstubs for MicroPython v1.23.0\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:01 | ℹ️ micropython-stubber 1.23.2a0\n", + "23:00:01 | ℹ️ fetch updates\n", + "23:00:03 | ℹ️ Switching to v1.23.0\n", + "23:00:07 | ℹ️ repos\\micropython v1.23.0\n", + "23:00:08 | ℹ️ repos\\micropython-lib v1.23.0\n", + "23:00:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", + "23:00:08 | ℹ️ Get docstubs for MicroPython v1.23.0\n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", - "02:11:52 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", + "23:00:09 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", - "02:11:52 | ℹ️ - Writing to: \n", + "23:00:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", - "02:11:52 | ℹ️ ::group:: start post processing of retrieved stubs\n", - "02:11:55 | ℹ️ ::group:: Done\n" + "23:00:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "23:00:14 | ℹ️ ::group:: Done\n" ] }, { @@ -203,98 +203,98 @@ "text": [ "Skipping .ipynb files as Jupyter dependencies are not installed.\n", "You can fix this by running ``pip install \"black[jupyter]\"``\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", "\n", "All done! ✨ 🍰 ✨\n", "92 files reformatted, 11 files left unchanged.\n" @@ -319,15 +319,25 @@ "metadata": {}, "source": [ "#### todo \n", + "enrich \n", "- [ ] --no-docstring still copies over the class docstring in array.array\n", - "- [x] avoid defining AnyReadableBuf and AnyWritableBuf in multile modules ( _mpy_shed module)\n", - "- [x] for now: Include in docstub MODULE_GLUE \n", "- [ ] check if types for module constants are copied over \n", "- [ ] Create method to Copy TypeVars and TypeAliasses from source to target ( needed for future merges) \n", - "- [x] manual addition of some classes\n", - " - [ ] ? create a mothod to forcefully copy over a class and all methods while merging \n", + " - [x] TypeVar\n", + " - [x] TypeAlias\n", + " - cmath has some incorrect type definitions for _C \n", + "- [ ] Bug: Imports are copied even if they are inside an if statement (repos\\rp2040\\rp2\\asm_pio.pyi :`from rp2 import PIOASMEmit` ) \n", + "- [ ] ? create a method to forcefully copy over a class and all methods while merging \n", + "\n", "\n", - "cmath has some incorrect type definitions for _C \n", + "- [x] avoid defining AnyReadableBuf and AnyWritableBuf in multile modules ( _mpy_shed module)\n", + "- [x] for now: Include in docstub MODULE_GLUE \n", + "- [x] manual addition of some classes\n", + "- [ ] rp2 and _rp2 modules need manual adjustments\n", + " - [ ] there are quite a few classes that are not/partly documented .rst files\n", + " - [ ] the several classes in `_rp2` are documented to be in `rp2` module\n", + " - [ ] `PIOASMEmit` class is missing in `rp2` module\n", + " - may also need a way to remove a class from a module\n", "\n", "\n", "\n", @@ -336,404 +346,529 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22:44:47 | ℹ️ micropython-stubber 1.23.2a0\n", + "22:44:47 | ℹ️ Enriching scratch with repos\\rp2040\n", + "22:44:47 | ℹ️ Enrich folder scratch.\n", + "22:44:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "22:44:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "22:44:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "22:44:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "22:44:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "22:44:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "22:44:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "22:44:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "22:44:49 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "22:44:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "22:44:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "22:44:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "22:44:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "22:44:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "22:44:51 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "22:44:51 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "22:44:51 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "22:44:51 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "22:44:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "22:44:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "22:44:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "22:44:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "22:44:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "22:44:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "22:44:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "22:44:54 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "22:44:54 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\rp2\\asm_pio.pyi\n", + "22:44:54 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\rp2\\__init__.pyi\n", + "22:44:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\_rp2\\DMA.pyi\n", + "22:44:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\_rp2\\Flash.pyi\n", + "22:44:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\_rp2\\irq.pyi\n", + "22:44:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\_rp2\\PIO.pyi\n", + "22:44:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "22:44:56 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", + "from repos\\rp2040\\_rp2\\__init__.pyi\n" + ] + } + ], + "source": [ + "! git -C scratch reset .\n", + "# assume root of workspace is the current directory\n", + "\n", + "# pull in josverl's handcoded rp2040 stubs\n", + "!stubber enrich --params-only --stubs scratch --docstubs repos\\rp2040\n" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], + "source": [ + "\n", + "! ruff check scratch\\micropython-v1_23_0-docstubs --ignore F4 --ignore UP0 --ignore F811 " + ] + }, + { + "cell_type": "code", + "execution_count": 108, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "02:12:04 | ℹ️ micropython-stubber 1.23.2a0\n", - "02:12:04 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n", - "02:12:04 | ℹ️ Enrich folder scratch.\n", - "02:12:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi \n", + "22:45:12 | ℹ️ micropython-stubber 1.23.2a0\n", + "22:45:12 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n", + "22:45:12 | ℹ️ Enrich folder scratch.\n", + "22:45:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\n", - "02:12:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from\n", + "22:45:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", - "02:12:04 | ℹ️ Change __getitem__ to @overload\n", - "02:12:04 | ℹ️ Change __setitem__ to @overload\n", - "02:12:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from\n", + "22:45:13 | ℹ️ Change __getitem__ to @overload\n", + "22:45:13 | ℹ️ Change __setitem__ to @overload\n", + "22:45:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", - "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi \n", + "22:45:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\n", - "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi \n", + "22:45:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", - "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi \n", + "22:45:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", - "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "22:45:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", "from repos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\n", - "02:12:05 | ℹ️ Change active to @overload\n", - "02:12:05 | ℹ️ Change config to @overload\n", - "02:12:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "22:45:15 | ℹ️ Change active to @overload\n", + "22:45:15 | ℹ️ Change config to @overload\n", + "22:45:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", "from repos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from\n", + "22:45:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\micropython\\btree.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from\n", + "22:45:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\n", - "02:12:06 | ℹ️ Merge \n", + "22:45:17 | ℹ️ Merge \n", "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\n", - "02:12:06 | ℹ️ Change __init__ to @overload\n", - "02:12:06 | ℹ️ Merge \n", + "22:45:18 | ℹ️ Change __init__ to @overload\n", + "22:45:18 | ℹ️ Merge \n", "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "22:45:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", "from repos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\n", - "02:12:06 | ℹ️ Change __init__ to @overload\n", - "02:12:06 | ℹ️ Change encrypt to @overload\n", - "02:12:06 | ℹ️ Change decrypt to @overload\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "22:45:18 | ℹ️ Change __init__ to @overload\n", + "22:45:18 | ℹ️ Change encrypt to @overload\n", + "22:45:18 | ℹ️ Change decrypt to @overload\n", + "22:45:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", "from repos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from\n", + "22:45:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from\n", + "22:45:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n", + "22:45:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\esp32\\esp.pyi\n", - "02:12:06 | ℹ️ Change sleep_type to @overload\n", - "02:12:06 | ℹ️ Change flash_read to @overload\n", - "02:12:06 | ℹ️ Change set_native_code_location to @overload\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n", + "22:45:19 | ℹ️ Change sleep_type to @overload\n", + "22:45:19 | ℹ️ Change flash_read to @overload\n", + "22:45:19 | ℹ️ Change set_native_code_location to @overload\n", + "22:45:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\n", - "02:12:06 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from\n", + "22:45:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\n", - "02:12:07 | ℹ️ Change readblocks to @overload\n", - "02:12:07 | ℹ️ Change writeblocks to @overload\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi \n", + "22:45:19 | ℹ️ Change readblocks to @overload\n", + "22:45:19 | ℹ️ Change writeblocks to @overload\n", + "22:45:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\n", - "02:12:07 | ℹ️ Change pixel to @overload\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n", + "22:45:19 | ℹ️ Change pixel to @overload\n", + "22:45:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\n", - "02:12:07 | ℹ️ Change threshold to @overload\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi \n", + "22:45:20 | ℹ️ Change threshold to @overload\n", + "22:45:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\n", - "02:12:07 | ℹ️ Change __init__ to @overload\n", - "02:12:07 | ℹ️ Change __init__ to @overload\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi \n", + "22:45:20 | ℹ️ Change __init__ to @overload\n", + "22:45:20 | ℹ️ Change __init__ to @overload\n", + "22:45:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from\n", + "22:45:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from\n", + "22:45:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n", - "02:12:07 | ℹ️ Change __init__ to @overload\n", - "02:12:07 | ℹ️ Change __init__ to @overload\n", - "02:12:07 | ℹ️ Change open to @overload\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from\n", + "22:45:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", - "02:12:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from\n", + "22:45:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", - "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi \n", + "22:45:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\n", - "02:12:08 | ℹ️ Change __init__ to @overload\n", - "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi \n", + "22:45:21 | ℹ️ Change __init__ to @overload\n", + "22:45:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:08 | ℹ️ Change freq to @overload\n", - "02:12:08 | ℹ️ Change lightsleep to @overload\n", - "02:12:08 | ℹ️ Change deepsleep to @overload\n", - "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n", + "22:45:23 | ℹ️ Change freq to @overload\n", + "22:45:23 | ℹ️ Change lightsleep to @overload\n", + "22:45:23 | ℹ️ Change deepsleep to @overload\n", + "22:45:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi \n", + "22:45:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi \n", + "22:45:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n", + "22:45:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:09 | ℹ️ Change __init__ to @overload\n", - "02:12:09 | ℹ️ Change init to @overload\n", - "02:12:09 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n", + "22:45:28 | ℹ️ Change __init__ to @overload\n", + "22:45:28 | ℹ️ Change init to @overload\n", + "22:45:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n", + "22:45:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:10 | ℹ️ Change value to @overload\n", - "02:12:10 | ℹ️ Change __call__ to @overload\n", - "02:12:10 | ℹ️ Change mode to @overload\n", - "02:12:10 | ℹ️ Change pull to @overload\n", - "02:12:10 | ℹ️ Change drive to @overload\n", - "02:12:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n", + "22:45:30 | ℹ️ Change value to @overload\n", + "22:45:30 | ℹ️ Change __call__ to @overload\n", + "22:45:30 | ℹ️ Change mode to @overload\n", + "22:45:30 | ℹ️ Change pull to @overload\n", + "22:45:30 | ℹ️ Change drive to @overload\n", + "22:45:30 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:10 | ℹ️ Change freq to @overload\n", - "02:12:10 | ℹ️ Change duty_u16 to @overload\n", - "02:12:10 | ℹ️ Change duty_ns to @overload\n", - "02:12:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n", + "22:45:31 | ℹ️ Change freq to @overload\n", + "22:45:31 | ℹ️ Change duty_u16 to @overload\n", + "22:45:31 | ℹ️ Change duty_ns to @overload\n", + "22:45:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:10 | ℹ️ Change __init__ to @overload\n", - "02:12:10 | ℹ️ Change init to @overload\n", - "02:12:10 | ℹ️ Change alarm to @overload\n", - "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n", + "22:45:32 | ℹ️ Change __init__ to @overload\n", + "22:45:32 | ℹ️ Change init to @overload\n", + "22:45:32 | ℹ️ Change alarm to @overload\n", + "22:45:32 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from\n", + "22:45:33 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi from\n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from\n", + "22:45:34 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi from\n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:11 | ℹ️ Change __init__ to @overload\n", - "02:12:11 | ℹ️ Change value to @overload\n", - "02:12:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n", + "22:45:36 | ℹ️ Change __init__ to @overload\n", + "22:45:36 | ℹ️ Change value to @overload\n", + "22:45:36 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:12 | ℹ️ Change __init__ to @overload\n", - "02:12:12 | ℹ️ Change init to @overload\n", - "02:12:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from\n", + "22:45:37 | ℹ️ Change __init__ to @overload\n", + "22:45:37 | ℹ️ Change init to @overload\n", + "22:45:37 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi from\n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:12 | ℹ️ Change __init__ to @overload\n", - "02:12:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi \n", + "22:45:38 | ℹ️ Change __init__ to @overload\n", + "22:45:38 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n", + "22:45:39 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:13 | ℹ️ Change __init__ to @overload\n", - "02:12:13 | ℹ️ Change init to @overload\n", - "02:12:13 | ℹ️ Change read to @overload\n", - "02:12:13 | ℹ️ Change readinto to @overload\n", - "02:12:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi \n", + "22:45:40 | ℹ️ Change __init__ to @overload\n", + "22:45:40 | ℹ️ Change init to @overload\n", + "22:45:40 | ℹ️ Change read to @overload\n", + "22:45:40 | ℹ️ Change readinto to @overload\n", + "22:45:40 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n", + "22:45:41 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "02:12:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from\n", + "22:45:42 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\math.pyi\n", - "02:12:14 | ℹ️ Merge \n", + "22:45:43 | ℹ️ Merge \n", "scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\n", - "02:12:14 | ℹ️ Change opt_level to @overload\n", - "02:12:14 | ℹ️ Change mem_info to @overload\n", - "02:12:14 | ℹ️ Change qstr_info to @overload\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi \n", + "22:45:43 | ℹ️ Change opt_level to @overload\n", + "22:45:43 | ℹ️ Change mem_info to @overload\n", + "22:45:43 | ℹ️ Change qstr_info to @overload\n", + "22:45:43 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi \n", + "22:45:43 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", + "22:45:43 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", + "22:45:43 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", + "22:45:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "02:12:14 | ℹ️ Change active to @overload\n", - "02:12:14 | ℹ️ Change connect to @overload\n", - "02:12:14 | ℹ️ Change status to @overload\n", - "02:12:14 | ℹ️ Change ifconfig to @overload\n", - "02:12:14 | ℹ️ Change config to @overload\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", + "22:45:44 | ℹ️ Change active to @overload\n", + "22:45:44 | ℹ️ Change connect to @overload\n", + "22:45:44 | ℹ️ Change status to @overload\n", + "22:45:44 | ℹ️ Change ifconfig to @overload\n", + "22:45:44 | ℹ️ Change config to @overload\n", + "22:45:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", + "22:45:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", + "22:45:44 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "02:12:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", + "22:45:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", "from repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", + "22:45:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", "from repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", + "22:45:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "02:12:15 | ℹ️ Change ifconfig to @overload\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", + "22:45:45 | ℹ️ Change ifconfig to @overload\n", + "22:45:45 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "02:12:15 | ℹ️ Change active to @overload\n", - "02:12:15 | ℹ️ Change ifconfig to @overload\n", - "02:12:15 | ℹ️ Change config to @overload\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", + "22:45:46 | ℹ️ Change active to @overload\n", + "22:45:46 | ℹ️ Change ifconfig to @overload\n", + "22:45:46 | ℹ️ Change config to @overload\n", + "22:45:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", + "22:45:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi from \n", "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "02:12:15 | ℹ️ Change status to @overload\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", + "22:45:46 | ℹ️ Change status to @overload\n", + "22:45:46 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", "from repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "02:12:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", + "22:45:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", "from repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", + "22:45:47 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "02:12:16 | ℹ️ Change __init__ to @overload\n", - "02:12:16 | ℹ️ Change ifconfig to @overload\n", - "02:12:16 | ℹ️ Change mode to @overload\n", - "02:12:16 | ℹ️ Change ssid to @overload\n", - "02:12:16 | ℹ️ Change auth to @overload\n", - "02:12:16 | ℹ️ Change channel to @overload\n", - "02:12:16 | ℹ️ Change antenna to @overload\n", - "02:12:16 | ℹ️ Change mac to @overload\n", - "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n", - "02:12:16 | ℹ️ Change ilistdir to @overload\n", - "02:12:16 | ℹ️ Change listdir to @overload\n", - "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n", - "02:12:16 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n", + "22:45:47 | ℹ️ Change __init__ to @overload\n", + "22:45:47 | ℹ️ Change ifconfig to @overload\n", + "22:45:47 | ℹ️ Change mode to @overload\n", + "22:45:47 | ℹ️ Change ssid to @overload\n", + "22:45:47 | ℹ️ Change auth to @overload\n", + "22:45:47 | ℹ️ Change channel to @overload\n", + "22:45:47 | ℹ️ Change antenna to @overload\n", + "22:45:47 | ℹ️ Change mac to @overload\n", + "22:45:48 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:17 | ℹ️ Change freq to @overload\n", - "02:12:17 | ℹ️ Change hid to @overload\n", - "02:12:17 | ℹ️ Change info to @overload\n", - "02:12:17 | ℹ️ Change mount to @overload\n", - "02:12:17 | ℹ️ Change repl_uart to @overload\n", - "02:12:17 | ℹ️ Change usb_mode to @overload\n", - "02:12:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n", + "22:45:50 | ℹ️ Change freq to @overload\n", + "22:45:50 | ℹ️ Change hid to @overload\n", + "22:45:50 | ℹ️ Change info to @overload\n", + "22:45:50 | ℹ️ Change mount to @overload\n", + "22:45:50 | ℹ️ Change repl_uart to @overload\n", + "22:45:50 | ℹ️ Change usb_mode to @overload\n", + "22:45:50 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:17 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n", + "22:45:52 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n", + "22:45:53 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:18 | ℹ️ Change info to @overload\n", - "02:12:18 | ℹ️ Change setfilter to @overload\n", - "02:12:18 | ℹ️ Change recv to @overload\n", - "02:12:18 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n", + "22:45:55 | ℹ️ Change info to @overload\n", + "22:45:55 | ℹ️ Change setfilter to @overload\n", + "22:45:55 | ℹ️ Change recv to @overload\n", + "22:45:55 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:19 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n", + "22:45:56 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n", + "22:45:57 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:20 | ℹ️ Change __init__ to @overload\n", - "02:12:20 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n", + "22:45:58 | ℹ️ Change __init__ to @overload\n", + "22:45:58 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:20 | ℹ️ Change mem_read to @overload\n", - "02:12:20 | ℹ️ Change recv to @overload\n", - "02:12:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n", + "22:46:00 | ℹ️ Change mem_read to @overload\n", + "22:46:00 | ℹ️ Change recv to @overload\n", + "22:46:00 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:21 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n", + "22:46:01 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:22 | ℹ️ Change intensity to @overload\n", - "02:12:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n", + "22:46:02 | ℹ️ Change intensity to @overload\n", + "22:46:02 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:22 | ℹ️ Change debug to @overload\n", - "02:12:22 | ℹ️ Change dict to @overload\n", - "02:12:22 | ℹ️ Change mapper to @overload\n", - "02:12:22 | ℹ️ Change value to @overload\n", - "02:12:22 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n", + "22:46:03 | ℹ️ Change debug to @overload\n", + "22:46:03 | ℹ️ Change dict to @overload\n", + "22:46:03 | ℹ️ Change mapper to @overload\n", + "22:46:03 | ℹ️ Change value to @overload\n", + "22:46:03 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:23 | ℹ️ Change calibration to @overload\n", - "02:12:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n", + "22:46:04 | ℹ️ Change calibration to @overload\n", + "22:46:04 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:23 | ℹ️ Change angle to @overload\n", - "02:12:23 | ℹ️ Change speed to @overload\n", - "02:12:23 | ℹ️ Change calibration to @overload\n", - "02:12:23 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n", + "22:46:05 | ℹ️ Change angle to @overload\n", + "22:46:05 | ℹ️ Change speed to @overload\n", + "22:46:05 | ℹ️ Change calibration to @overload\n", + "22:46:05 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:24 | ℹ️ Change __init__ to @overload\n", - "02:12:24 | ℹ️ Change init to @overload\n", - "02:12:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n", + "22:46:07 | ℹ️ Change __init__ to @overload\n", + "22:46:07 | ℹ️ Change init to @overload\n", + "22:46:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:24 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n", + "22:46:07 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:25 | ℹ️ Change __init__ to @overload\n", - "02:12:25 | ℹ️ Change init to @overload\n", - "02:12:25 | ℹ️ Change channel to @overload\n", - "02:12:25 | ℹ️ Change counter to @overload\n", - "02:12:25 | ℹ️ Change freq to @overload\n", - "02:12:25 | ℹ️ Change period to @overload\n", - "02:12:25 | ℹ️ Change prescaler to @overload\n", - "02:12:25 | ℹ️ Change capture to @overload\n", - "02:12:25 | ℹ️ Change compare to @overload\n", - "02:12:25 | ℹ️ Change pulse_width to @overload\n", - "02:12:25 | ℹ️ Change pulse_width_percent to @overload\n", - "02:12:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n", + "22:46:08 | ℹ️ Change __init__ to @overload\n", + "22:46:08 | ℹ️ Change init to @overload\n", + "22:46:08 | ℹ️ Change channel to @overload\n", + "22:46:08 | ℹ️ Change counter to @overload\n", + "22:46:08 | ℹ️ Change freq to @overload\n", + "22:46:08 | ℹ️ Change period to @overload\n", + "22:46:08 | ℹ️ Change prescaler to @overload\n", + "22:46:08 | ℹ️ Change capture to @overload\n", + "22:46:08 | ℹ️ Change compare to @overload\n", + "22:46:08 | ℹ️ Change pulse_width to @overload\n", + "22:46:08 | ℹ️ Change pulse_width_percent to @overload\n", + "22:46:08 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:25 | ℹ️ Change __init__ to @overload\n", - "02:12:25 | ℹ️ Change read to @overload\n", - "02:12:25 | ℹ️ Change readinto to @overload\n", - "02:12:25 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n", + "22:46:10 | ℹ️ Change __init__ to @overload\n", + "22:46:10 | ℹ️ Change read to @overload\n", + "22:46:10 | ℹ️ Change readinto to @overload\n", + "22:46:10 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:26 | ℹ️ Change recv to @overload\n", - "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n", + "22:46:11 | ℹ️ Change recv to @overload\n", + "22:46:11 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "02:12:26 | ℹ️ Change read to @overload\n", - "02:12:26 | ℹ️ Change readinto to @overload\n", - "02:12:26 | ℹ️ Change recv to @overload\n", - "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", - "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi from \n", - "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", - "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi from \n", - "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", - "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi from \n", - "repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", - "02:12:26 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi \n", - "from repos\\intellij-micropython\\typehints\\rpi_pico\\rp2.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi \n", + "22:46:12 | ℹ️ Change read to @overload\n", + "22:46:12 | ℹ️ Change readinto to @overload\n", + "22:46:12 | ℹ️ Change recv to @overload\n", + "22:46:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi \n", + "22:46:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi \n", + "22:46:12 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi \n", + "22:46:12 | ℹ️ Change makefile to @overload\n", + "22:46:12 | ℹ️ Change read to @overload\n", + "22:46:12 | ℹ️ Change readinto to @overload\n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi from \n", "repos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi \n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi \n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\sys.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\usys.pyi\n", - "02:12:27 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from\n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from\n", + "22:46:13 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uarray.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ubinascii.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi \n", "from repos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\io.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uio.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uio.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ujson.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\os.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uos.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uos.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uselect.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", - "02:12:28 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\usocket.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n", + "22:46:14 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ussl.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ussl.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\ustruct.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\utime.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\uzlib.pyi from \n", "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from\n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", - "02:12:29 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from\n", + "22:46:15 | ℹ️ Merge scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi from\n", "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n" ] } ], "source": [ - "! git -C scratch reset .\n", - "# assume root of workspace is the current directory\n", - "# # Merge typehints from IntelliJ plugin with docstubs\n", - "!stubber enrich --params-only --stubs scratch --docstubs repos\\intellij-micropython\\typehints\n", "\n", + "# # Merge redacted typehints from IntelliJ plugin with docstubs\n", + "!stubber enrich --params-only --stubs scratch --docstubs repos\\intellij-micropython\\typehints\n", "\n", + "# !stubber enrich --params-only --stubs D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi --docstubs repos\\intellij-micropython\\typehints\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], + "source": [ "\n", - "# Merge from Howard Lovatt (MIT) \n", - "# %run -m stubber.stubber enrich --params-only --stubs repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs --source repos\\PyBoardTypeshed\\micropython_typesheds\n" + "! ruff check scratch\\micropython-v1_23_0-docstubs --ignore F4 --ignore UP0 --ignore F811 " + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".\\repos\\rp2040\\_rp2\\DMA.pyi\n", + ".\\repos\\rp2040\\_rp2\\Flash.pyi\n", + ".\\repos\\rp2040\\_rp2\\irq.pyi\n", + ".\\repos\\rp2040\\_rp2\\PIO.pyi\n", + ".\\repos\\rp2040\\_rp2\\StateMachine.pyi\n", + ".\\repos\\rp2040\\_rp2\\__init__.pyi\n", + " 6 file(s) copied.\n" + ] + } + ], + "source": [ + "# add _rp2 module\n", + "! mkdir scratch\\micropython-v1_23_0-docstubs\\_rp2\n", + "!copy .\\repos\\rp2040\\_rp2\\*.* .\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\*.*" ] }, { @@ -745,7 +880,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 111, "metadata": {}, "outputs": [], "source": [ @@ -790,7 +925,8 @@ " line = \"from \" + line[6:]\n", " if any(line.startswith(l) for l in NO_IMPORT):\n", " # remove the line\n", - " line = \"# \" + line\n", + " # line = \"# \" + line\n", + " line = \"\"\n", " for old, new in REPLACE:\n", " if line.startswith(old):\n", " line = new\n", @@ -802,7 +938,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 112, "metadata": {}, "outputs": [], "source": [ @@ -838,7 +974,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 113, "metadata": {}, "outputs": [], "source": [ @@ -952,7 +1088,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 114, "metadata": {}, "outputs": [], "source": [ @@ -962,7 +1098,7 @@ "from __future__ import annotations\n", "from _typeshed import PathLike\n", "from abc import abstractmethod\n", - "from typing import overload, Protocol, Any\n", + "from typing import overload, Protocol, Any, runtime_checkable, Literal\n", "from typing_extensions import TypeVar, TypeAlias\n", "from array import array\n", "\n", @@ -981,7 +1117,241 @@ "_AnyPath: TypeAlias = str | bytes | _PathLike[str] | _PathLike[bytes]\n", "_FdOrAnyPath: TypeAlias = int | _AnyPath\n", "\n", - "AbstractBlockDev: TypeAlias = Any\n", + "# AbstractBlockDev: TypeAlias = Any\n", + "_OldAbstractReadOnlyBlockDev: TypeAlias = Any\n", + "_OldAbstractBlockDev: TypeAlias = Any\n", + "\n", + "# copied from _typeshed os.pyi as os.pyi cannot import from a module with the same name\n", + "@final\n", + "class uname_result(structseq[str], tuple[str, str, str, str, str]):\n", + " if sys.version_info >= (3, 8):\n", + " __match_args__: Final = (\"sysname\", \"nodename\", \"release\", \"version\", \"machine\")\n", + " @property\n", + " def sysname(self) -> str: ...\n", + " @property\n", + " def nodename(self) -> str: ...\n", + " @property\n", + " def release(self) -> str: ...\n", + " @property\n", + " def version(self) -> str: ...\n", + " @property\n", + " def machine(self) -> str: ...\n", + "\n", + "@runtime_checkable\n", + "class AbstractBlockDev(Protocol):\n", + " \"\"\"\n", + " Block devices\n", + " -------------\n", + "\n", + " A block device is an object which implements the block protocol. This enables a\n", + " device to support MicroPython filesystems. The physical hardware is represented\n", + " by a user defined class. The :class:`AbstractBlockDev` class is a template for\n", + " the design of such a class: MicroPython does not actually provide that class,\n", + " but an actual block device class must implement the methods described below.\n", + "\n", + " A concrete implementation of this class will usually allow access to the\n", + " memory-like functionality of a piece of hardware (like flash memory). A block\n", + " device can be formatted to any supported filesystem and mounted using ``os``\n", + " methods.\n", + "\n", + " See :ref:`filesystem` for example implementations of block devices using the\n", + " two variants of the block protocol described below.\n", + "\n", + " .. _block-device-interface:\n", + "\n", + " Simple and extended interface\n", + " .............................\n", + "\n", + " There are two compatible signatures for the ``readblocks`` and ``writeblocks``\n", + " methods (see below), in order to support a variety of use cases. A given block\n", + " device may implement one form or the other, or both at the same time. The second\n", + " form (with the offset parameter) is referred to as the \"extended interface\".\n", + "\n", + " Some filesystems (such as littlefs) that require more control over write\n", + " operations, for example writing to sub-block regions without erasing, may require\n", + " that the block device supports the extended interface.\n", + " \"\"\"\n", + "\n", + " def __init__(self):\n", + " \"\"\"\n", + " Construct a block device object. The parameters to the constructor are\n", + " dependent on the specific block device.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def readblocks(self, block_num: int, buf: bytearray, /) -> None:\n", + " \"\"\"\n", + " The first form reads aligned, multiples of blocks.\n", + " Starting at the block given by the index *block_num*, read blocks from\n", + " the device into *buf* (an array of bytes).\n", + " The number of blocks to read is given by the length of *buf*,\n", + " which will be a multiple of the block size.\n", + "\n", + " The second form allows reading at arbitrary locations within a block,\n", + " and arbitrary lengths.\n", + " Starting at block index *block_num*, and byte offset within that block\n", + " of *offset*, read bytes from the device into *buf* (an array of bytes).\n", + " The number of bytes to read is given by the length of *buf*.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def readblocks(self, block_num: int, buf: bytearray, offset: int, /) -> None:\n", + " \"\"\"\n", + " The first form reads aligned, multiples of blocks.\n", + " Starting at the block given by the index *block_num*, read blocks from\n", + " the device into *buf* (an array of bytes).\n", + " The number of blocks to read is given by the length of *buf*,\n", + " which will be a multiple of the block size.\n", + "\n", + " The second form allows reading at arbitrary locations within a block,\n", + " and arbitrary lengths.\n", + " Starting at block index *block_num*, and byte offset within that block\n", + " of *offset*, read bytes from the device into *buf* (an array of bytes).\n", + " The number of bytes to read is given by the length of *buf*.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def writeblocks(self, block_num: int, buf: bytes | bytearray, /) -> None:\n", + " \"\"\"\n", + " The first form writes aligned, multiples of blocks, and requires that the\n", + " blocks that are written to be first erased (if necessary) by this method.\n", + " Starting at the block given by the index *block_num*, write blocks from\n", + " *buf* (an array of bytes) to the device.\n", + " The number of blocks to write is given by the length of *buf*,\n", + " which will be a multiple of the block size.\n", + "\n", + " The second form allows writing at arbitrary locations within a block,\n", + " and arbitrary lengths. Only the bytes being written should be changed,\n", + " and the caller of this method must ensure that the relevant blocks are\n", + " erased via a prior ``ioctl`` call.\n", + " Starting at block index *block_num*, and byte offset within that block\n", + " of *offset*, write bytes from *buf* (an array of bytes) to the device.\n", + " The number of bytes to write is given by the length of *buf*.\n", + "\n", + " Note that implementations must never implicitly erase blocks if the offset\n", + " argument is specified, even if it is zero.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def writeblocks(self, block_num: int, buf: bytes | bytearray, offset: int, /) -> None:\n", + " \"\"\"\n", + " The first form writes aligned, multiples of blocks, and requires that the\n", + " blocks that are written to be first erased (if necessary) by this method.\n", + " Starting at the block given by the index *block_num*, write blocks from\n", + " *buf* (an array of bytes) to the device.\n", + " The number of blocks to write is given by the length of *buf*,\n", + " which will be a multiple of the block size.\n", + "\n", + " The second form allows writing at arbitrary locations within a block,\n", + " and arbitrary lengths. Only the bytes being written should be changed,\n", + " and the caller of this method must ensure that the relevant blocks are\n", + " erased via a prior ``ioctl`` call.\n", + " Starting at block index *block_num*, and byte offset within that block\n", + " of *offset*, write bytes from *buf* (an array of bytes) to the device.\n", + " The number of bytes to write is given by the length of *buf*.\n", + "\n", + " Note that implementations must never implicitly erase blocks if the offset\n", + " argument is specified, even if it is zero.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def ioctl(self, op: int, arg: int) -> int | None:\n", + " \"\"\"\n", + " Control the block device and query its parameters. The operation to\n", + " perform is given by *op* which is one of the following integers:\n", + "\n", + " - 1 -- initialise the device (*arg* is unused)\n", + " - 2 -- shutdown the device (*arg* is unused)\n", + " - 3 -- sync the device (*arg* is unused)\n", + " - 4 -- get a count of the number of blocks, should return an integer\n", + " (*arg* is unused)\n", + " - 5 -- get the number of bytes in a block, should return an integer,\n", + " or ``None`` in which case the default value of 512 is used\n", + " (*arg* is unused)\n", + " - 6 -- erase a block, *arg* is the block number to erase\n", + "\n", + " As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs\n", + " ``ioctl(6, ...)`` must also be intercepted. The need for others is\n", + " hardware dependent.\n", + "\n", + " Prior to any call to ``writeblocks(block, ...)`` littlefs issues\n", + " ``ioctl(6, block)``. This enables a device driver to erase the block\n", + " prior to a write if the hardware requires it. Alternatively a driver\n", + " might intercept ``ioctl(6, block)`` and return 0 (success). In this case\n", + " the driver assumes responsibility for detecting the need for erasure.\n", + "\n", + " Unless otherwise stated ``ioctl(op, arg)`` can return ``None``.\n", + " Consequently an implementation can ignore unused values of ``op``. Where\n", + " ``op`` is intercepted, the return value for operations 4 and 5 are as\n", + " detailed above. Other operations should return 0 on success and non-zero\n", + " for failure, with the value returned being an ``OSError`` errno code.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def ioctl(self, op: Literal[4, 5], arg: int) -> int:\n", + " \"\"\"\n", + " Control the block device and query its parameters. The operation to\n", + " perform is given by *op* which is one of the following integers:\n", + "\n", + " - 1 -- initialise the device (*arg* is unused)\n", + " - 2 -- shutdown the device (*arg* is unused)\n", + " - 3 -- sync the device (*arg* is unused)\n", + " - 4 -- get a count of the number of blocks, should return an integer\n", + " (*arg* is unused)\n", + " - 5 -- get the number of bytes in a block, should return an integer,\n", + " or ``None`` in which case the default value of 512 is used\n", + " (*arg* is unused)\n", + " - 6 -- erase a block, *arg* is the block number to erase\n", + "\n", + " As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs\n", + " ``ioctl(6, ...)`` must also be intercepted. The need for others is\n", + " hardware dependent.\n", + "\n", + " Prior to any call to ``writeblocks(block, ...)`` littlefs issues\n", + " ``ioctl(6, block)``. This enables a device driver to erase the block\n", + " prior to a write if the hardware requires it. Alternatively a driver\n", + " might intercept ``ioctl(6, block)`` and return 0 (success). In this case\n", + " the driver assumes responsibility for detecting the need for erasure.\n", + "\n", + " Unless otherwise stated ``ioctl(op, arg)`` can return ``None``.\n", + " Consequently an implementation can ignore unused values of ``op``. Where\n", + " ``op`` is intercepted, the return value for operations 4 and 5 are as\n", + " detailed above. Other operations should return 0 on success and non-zero\n", + " for failure, with the value returned being an ``OSError`` errno code.\n", + " \"\"\"\n", + "\n", + " @overload\n", + " def ioctl(self, op: Literal[1, 2, 3, 6], arg: int) -> int | None:\n", + " \"\"\"\n", + " Control the block device and query its parameters. The operation to\n", + " perform is given by *op* which is one of the following integers:\n", + "\n", + " - 1 -- initialise the device (*arg* is unused)\n", + " - 2 -- shutdown the device (*arg* is unused)\n", + " - 3 -- sync the device (*arg* is unused)\n", + " - 4 -- get a count of the number of blocks, should return an integer\n", + " (*arg* is unused)\n", + " - 5 -- get the number of bytes in a block, should return an integer,\n", + " or ``None`` in which case the default value of 512 is used\n", + " (*arg* is unused)\n", + " - 6 -- erase a block, *arg* is the block number to erase\n", + "\n", + " As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs\n", + " ``ioctl(6, ...)`` must also be intercepted. The need for others is\n", + " hardware dependent.\n", + "\n", + " Prior to any call to ``writeblocks(block, ...)`` littlefs issues\n", + " ``ioctl(6, block)``. This enables a device driver to erase the block\n", + " prior to a write if the hardware requires it. Alternatively a driver\n", + " might intercept ``ioctl(6, block)`` and return 0 (success). In this case\n", + " the driver assumes responsibility for detecting the need for erasure.\n", + "\n", + " Unless otherwise stated ``ioctl(op, arg)`` can return ``None``.\n", + " Consequently an implementation can ignore unused values of ``op``. Where\n", + " ``op`` is intercepted, the return value for operations 4 and 5 are as\n", + " detailed above. Other operations should return 0 on success and non-zero\n", + " for failure, with the value returned being an ``OSError`` errno code.\n", + " \"\"\"\n", "\n", "'''\n", "\n", @@ -995,141 +1365,335 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 115, + "metadata": {}, + "outputs": [], + "source": [ + "CLASS_PIOASMEMIT = '''\n", + "\n", + "class PIOASMEmit:\n", + " \"\"\"\n", + " The PIOASMEmit class provides a comprehensive interface for constructing PIO programs, \n", + " handling the intricacies of instruction encoding, label management, and program state. \n", + " This allows users to build complex PIO programs in pythone, leveraging the flexibility \n", + " and power of the PIO state machine.\n", + "\n", + " The class should not be instantiated directly, but used via the `@asm_pio` decorator.\n", + " \"\"\" \n", + " labels: Dict\n", + " prog: List\n", + " wrap_used: bool\n", + " sideset_count: int\n", + " delay_max: int\n", + " sideset_opt: bool\n", + " pass_: int\n", + " num_instr: int\n", + " num_sideset: int\n", + " def __init__(\n", + " self,\n", + " *,\n", + " out_init: int | List | None = ...,\n", + " set_init: int | List | None = ...,\n", + " sideset_init: int | List | None = ...,\n", + " in_shiftdir: int = ...,\n", + " out_shiftdir: int = ...,\n", + " autopush: bool = ...,\n", + " autopull: bool = ...,\n", + " push_thresh: int = ...,\n", + " pull_thresh: int = ...,\n", + " fifo_join: int = ...,\n", + " ) -> None: ...\n", + " def __getitem__(self, key): ...\n", + " def start_pass(self, pass_) -> None: \n", + " \"\"\"The start_pass method is used to start a pass over the instructions, \n", + " setting up the necessary state for the pass. It handles wrapping instructions \n", + " if needed and adjusts the delay maximum based on the number of side-set bits. \n", + " \"\"\"\n", + "\n", + " ...\n", + " def delay(self, delay:int): \n", + " \"\"\"\n", + " The delay method allows setting a delay for the current instruction, \n", + " ensuring it does not exceed the maximum allowed delay.\n", + " \"\"\"\n", + " def side(self, value:int): \n", + " \"\"\"\\\n", + " This is a modifier which can be applied to any instruction, and is used to control side-set pin values.\n", + " value: the value (bits) to output on the side-set pins\n", + "\n", + " When an instruction has side 0 next to it, the corresponding output is set LOW, \n", + " and when it has side 1 next to it, the corresponding output is set HIGH. \n", + " There can be up to 5 side-set pins, in which case side N is interpreted as a binary number.\n", + "\n", + " `side(0b00011)` sets the first and the second side-set pin HIGH, and the others LOW.\n", + " \"\"\"\n", + " ...\n", + " def wrap_target(self) -> None: ...\n", + " def wrap(self) -> None: \n", + " \"\"\"\n", + " The wrap method sets the wrap point for the program, ensuring the program loops correctly.\n", + " \"\"\"\n", + " ...\n", + " def label(self, label:str) -> None: ...\n", + " def word(self, instr, label: str | None = ...): ...\n", + " def nop(self): ...\n", + " def jmp(self, cond, label: str | None = ...): ...\n", + " def wait(self, polarity, src, index): ...\n", + " def in_(self, src, data): ...\n", + " def out(self, dest, data): ...\n", + " def push(self, value: int = ..., value2: int = ...): ...\n", + " def pull(self, value: int = ..., value2: int = ...): ...\n", + " def mov(self, dest, src): ...\n", + " def irq(self, mod, index: Incomplete | None = ...): ...\n", + " def set(self, dest, data): ...\n", + "\n", + "'''\n", + "\n", + "# Add missing class\n", + "rp2 = Path(\"scratch/micropython-v1_23_0-docstubs/rp2/__init__.pyi\")\n", + "with open(rp2, \"a\") as f:\n", + " f.write(CLASS_PIOASMEMIT)\n", + "\n", + "# clean / change rp2 / _rp2 \n", + "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", + "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\FLASH.pyi\n", + "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", + "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + "\n", + "# remove the relative imports from the rp2 module\n", + "with rp2.open(mode=\"r\", encoding=\"utf-8\") as f:\n", + " # Read the contents of the file\n", + " lines = f.readlines()\n", + "\n", + "# Open the file in write mode\n", + "with rp2.open(mode=\"w\", encoding=\"utf-8\") as f:\n", + " # Iterate over each line in the file\n", + " for line in lines:\n", + " # Check if the line starts with\n", + " if line.startswith(\"from .\") or line == \"from rp2 import PIOASMEmit\":\n", + " line = \"# \" + line\n", + "\n", + " # Write the modified line to the file\n", + " f.write(line) " + ] + }, + { + "cell_type": "code", + "execution_count": 116, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Found 1112 errors (1112 fixed, 0 remaining).\n" + "Found 1041 errors (1041 fixed, 0 remaining).\n" ] } ], "source": [ - "\n", + "from pathlib import Path\n", "! ruff check scratch\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n", - "# TODO use ruff to sort imports and remove unused imports\n" + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [], + "source": [ + "# run autoflake on all files - one by one to get the __init__.pyi files\n", + "for f in Path(\"scratch/micropython-v1_23_0-docstubs\").rglob(\"*.pyi\"):\n", + " ! autoflake {f} --in --imports typing_extensions,_mpy_shed,_typeshed\n" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uselect.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\usocket.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\Flash.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\PIO.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\StateMachine.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\__init__.pyi\n" + ] + } + ], + "source": [ + "# clean up the formatting\n", + "! isort scratch/micropython-v1_23_0-docstubs" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "! isort scratch/micropython-v1_23_0-docstubs" ] }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 122, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "WARNING: there is a new pyright version available (v1.1.370 -> v1.1.382.post1).\n", + "WARNING: there is a new pyright version available (v1.1.370 -> v1.1.386).\n", "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", "\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m7\u001b[39m - \u001b[36mwarning\u001b[39m: Type variable \"_StrOrBytesT\" used in generic protocol \"_PathLike\" should be covariant\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m7\u001b[39m - \u001b[36mwarning\u001b[39m: Type variable \"_StrOrBytesT\" used in generic protocol \"_PathLike\" should be covariant\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m33\u001b[39m:\u001b[33m2\u001b[39m - \u001b[36mwarning\u001b[39m: \"final\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m34\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"structseq\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m35\u001b[39m:\u001b[33m8\u001b[39m - \u001b[36mwarning\u001b[39m: \"sys\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m36\u001b[39m:\u001b[33m25\u001b[39m - \u001b[36mwarning\u001b[39m: \"Final\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m412\u001b[39m:\u001b[33m25\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_T\" appears only once in generic function signature\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m394\u001b[39m:\u001b[33m25\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_T\" appears only once in generic function signature\n", "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m21\u001b[39m:\u001b[33m6\u001b[39m - \u001b[31merror\u001b[39m: Import \"stdlib.collections\" could not be resolved\u001b[90m (reportMissingImports)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi:\u001b[33m483\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m112\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m201\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m207\u001b[39m:\u001b[33m40\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['']\" cannot be assigned to parameter of type \"bytes\"\n", - "   \"Literal['']\" is incompatible with \"bytes\"\u001b[90m (reportArgumentType)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m261\u001b[39m:\u001b[33m40\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['']\" cannot be assigned to parameter of type \"bytes\"\n", - "   \"Literal['']\" is incompatible with \"bytes\"\u001b[90m (reportArgumentType)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m321\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m321\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m329\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m329\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m329\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m337\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m337\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m337\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m345\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m345\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m353\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m353\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenTextMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m353\u001b[39m:\u001b[33m71\u001b[39m - \u001b[36mwarning\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m361\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenFile\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m361\u001b[39m:\u001b[33m33\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi:\u001b[33m361\u001b[39m:\u001b[33m73\u001b[39m - \u001b[36mwarning\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi:\u001b[33m469\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m49\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m72\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m72\u001b[39m:\u001b[33m68\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m46\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m51\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m58\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m65\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m80\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m87\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m118\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"uname_result\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m139\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m236\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m257\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m362\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m383\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m428\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m434\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m464\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m470\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m475\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m481\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m487\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m493\u001b[39m:\u001b[33m22\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m493\u001b[39m:\u001b[33m42\u001b[39m - \u001b[36mwarning\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m499\u001b[39m:\u001b[33m16\u001b[39m - \u001b[36mwarning\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m505\u001b[39m:\u001b[33m19\u001b[39m - \u001b[36mwarning\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi:\u001b[33m557\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m57\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m57\u001b[39m:\u001b[33m68\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m71\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m71\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m73\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m73\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m534\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractReadOnlyBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m576\u001b[39m:\u001b[33m13\u001b[39m - \u001b[36mwarning\u001b[39m: \"_OldAbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m698\u001b[39m:\u001b[33m45\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"int\" cannot be assigned to parameter of type \"tuple[int, int, int, int, bytes]\"\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m683\u001b[39m:\u001b[33m45\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"int\" cannot be assigned to parameter of type \"tuple[int, int, int, int, bytes]\"\n", "   \"int\" is incompatible with \"tuple[int, int, int, int, bytes]\"\u001b[90m (reportArgumentType)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi:\u001b[33m96\u001b[39m:\u001b[33m62\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"(self: Self@PIO, callback: ((PIO) -> None) | None) -> ...\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi:\u001b[33m139\u001b[39m:\u001b[33m22\u001b[39m - \u001b[31merror\u001b[39m: Expected type expression but received \"(self: Self@StateMachine) -> ...\"\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m38\u001b[39m:\u001b[33m20\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi:\u001b[33m141\u001b[39m:\u001b[33m22\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['CERT_NONE']\" cannot be assigned to parameter of type \"int\"\n", - "   \"Literal['CERT_NONE']\" is incompatible with \"int\"\u001b[90m (reportArgumentType)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi:\u001b[33m166\u001b[39m:\u001b[33m54\u001b[39m - \u001b[31merror\u001b[39m: Expected no type arguments for class \"IOBase\"\u001b[90m (reportInvalidTypeArguments)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi:\u001b[33m166\u001b[39m:\u001b[33m61\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['stdout']\" cannot be assigned to parameter of type \"IOBase\"\n", - "   \"Literal['stdout']\" is incompatible with \"IOBase\"\u001b[90m (reportArgumentType)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m19\u001b[39m - \u001b[31merror\u001b[39m: Cannot access attribute \"JOIN_NONE\" for class \"type[PIO]\"\n", + "   Attribute \"JOIN_NONE\" is unknown\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m192\u001b[39m:\u001b[33m27\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m200\u001b[39m:\u001b[33m30\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m220\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m235\u001b[39m:\u001b[33m59\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m352\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m362\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m379\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m75\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m76\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m77\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m78\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m79\u001b[39m:\u001b[33m23\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m82\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m83\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m84\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m114\u001b[39m:\u001b[33m50\u001b[39m - \u001b[36mwarning\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m168\u001b[39m:\u001b[33m38\u001b[39m - \u001b[36mwarning\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "9 errors, 60 warnings, 2 informations \n" + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m62\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m63\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m64\u001b[39m:\u001b[33m23\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m69\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m99\u001b[39m:\u001b[33m50\u001b[39m - \u001b[36mwarning\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m153\u001b[39m:\u001b[33m38\u001b[39m - \u001b[36mwarning\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "3 errors, 27 warnings, 2 informations \n" ] } ], "source": [ - "# -p defines to root to allow for sibling imports\n", - "! pyright scratch\\micropython-v1_23_0-docstubs -p scratch\\micropython-v1_23_0-docstubs \n" + "\n", + "!cd \"d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\" && pyright .\n", + "!cd \"d:\\mypython\\micropython-stubber\"\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 0009eb9c..4be86b93 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -25,7 +25,7 @@ "from _typeshed import Incomplete", "from typing import IO, Any, Callable, Coroutine, Dict, Generator, Iterator, List, NoReturn, Optional, Tuple, Union, NamedTuple", "from typing_extensions import TypeVar, TypeAlias, Awaitable", - "# TYPING_IMPORT", + # "# TYPING_IMPORT", ] @@ -122,7 +122,7 @@ class Fix: "builtins.from_bytes": ("int", 0.95), "builtins.to_bytes": ("bytes", 0.95), "bytearray_at": ("bytearray", 0.95), - "collections.namedtuple": ("stdlib_namedtuple", 0.95), + "collections.namedtuple": ("type[Tuple[Any, ...]]", 0.95), "gc.collect": ("None", 0.95), "machine.deepsleep": ("NoReturn", 0.95), "machine.reset_cause": ("int", 0.95), @@ -143,19 +143,19 @@ class Fix: "pyb.hard_reset": ("NoReturn", 0.95), # never returns "pyb.I2C.recv": ("bytes", 0.95), # complex in docstring "pyb.SPI.recv": ("bytes", 0.95), # complex in docstring - "pyb.hid_keyboard": ("Tuple", 0.95), # ? - "pyb.hid_mouse": ("Tuple", 0.95), # plain wrong + "pyb.hid_keyboard": ("HID_Tuple", 0.95), # ? + "pyb.hid_mouse": ("HID_Tuple", 0.95), # plain wrong "ubluetooth.BLE.irq": ("Any", 0.95), "uctypes.bytearray_at": ("bytearray", 0.95), "uctypes.bytes_at": ("bytes", 0.95), "uio.open": ("IO", 0.95), # Open a file. "uos.listdir": ("List[Incomplete]", 0.95), "os.uname": ("uname_result", 0.95), - "ssl.ssl.wrap_socket": ( - "IO", - 0.95, - ), # undocumented class ssl.SSLSocket #TODO: or wrapped-socket object ? - "ussl.ussl.wrap_socket": ("IO", 0.95), # undocumented class ssl.SSLSocket + # undocumented CPython class ssl.SSLSocket + # TODO: include ssl.SSLSocket from stdlib / mpy_typeshed, currently Incomplete + "ssl.wrap_socket": ("SSLSocket", 0.95), + "ussl.wrap_socket": ("SSLSocket", 0.95), + # "usys.exit": ("NoReturn", 0.95), # never returns "utime.sleep_ms": ( "Coroutine[None, None, None]", # Micropython V1.15+ ? @@ -252,34 +252,17 @@ class Fix: MODULE_GLUE = { "array": ['_T: Final = TypeVar("_T", int, float, Text)'], - "asyncio": ANY_BUF - + [ - '_T = TypeVar("_T")', - "# `Coroutine` `_T` is covariant and `Awaitable` `_T` is invariant.", - "_C :TypeAlias = Coroutine[Any, None, _T] | Awaitable[_T]", - 'StreamReader:TypeAlias = "Stream"', - 'StreamWriter:TypeAlias = "Stream"', - ], - "bluetooth": ANY_BUF - + [ - "_Flag: TypeAlias = int", - '_Descriptor: TypeAlias = tuple["UUID", _Flag]', - '_Characteristic: TypeAlias = (tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]])', - '_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]]', - ], + "asyncio": ANY_BUF, + "bluetooth": ANY_BUF, "collections": [ "from queue import Queue", - "from stdlib.collections import OrderedDict as stdlib_OrderedDict # type: ignore", - "from stdlib.collections import deque as stdlib_deque # type: ignore", - "from stdlib.collections import namedtuple as stdlib_namedtuple # type: ignore", + # "from _mpy_shed.collections import namedtuple as stdlib_namedtuple # type: ignore", '_KT: Final = TypeVar("_KT")', '_VT: Final = TypeVar("_VT")', ], - "io": ANY_BUF, - "micropython": ["Const_T = TypeVar('Const_T',int, float, str, bytes, Tuple) # constant"], "cmath": [ "from typing_extensions import TypeAlias", - "_C: TypeAlias = SupportsFloat | SupportsComplex | SupportsIndex | complex", + # "_C: TypeAlias = SupportsFloat | SupportsComplex | SupportsIndex | complex", ], "cryptolib": ANY_BUF, "esp": ANY_BUF, @@ -291,10 +274,8 @@ class Fix: "heapq": [ '_T: Final = TypeVar("_T")', ], + "io": ANY_BUF, "lcd160cr": ANY_BUF + ["from machine.SPI import SPI"], # uses SPI - "os": [ - "from stdlib.os import * # type: ignore", # integrate STDLIB - ], # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such "machine.ADC": [ "from .Pin import Pin", @@ -316,21 +297,27 @@ class Fix: "from .Pin import Pin", ], # uses Pin "micropython": [ - "from typing import Tuple", + "from typing import Tuple, Final, TypeVar", '_T: Final = TypeVar("_T")', '_F: Final = TypeVar("_F", bound=Callable[..., Any])', 'Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) # constant', ], "network": ["from typing import Protocol"], # for AbstractNIC "neopixel": [ - "from typing_extensions import TypeAlias", - "_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int]", + # "from typing_extensions import TypeAlias", + # "_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int]", ], # for AbstractNIC + "os": [ + "from stdlib.os import * # type: ignore", # integrate STDLIB + "from _mpy_shed import uname_result", + ], "pyb": ANY_BUF + [ "from .UART import UART", - "_OldAbstractBlockDev: TypeAlias = Any", - "_OldAbstractReadOnlyBlockDev: TypeAlias = Any", + "from _mpy_shed import _OldAbstractBlockDev, _OldAbstractReadOnlyBlockDev", + # "_OldAbstractBlockDev: TypeAlias = Any", + # "_OldAbstractReadOnlyBlockDev: TypeAlias = Any", + "HID_Tuple:TypeAlias = tuple[int, int, int, int, bytes]", ], "pyb.ADC": ANY_BUF + ["from .Pin import Pin", "from .Timer import Timer"], "pyb.CAN": ANY_BUF, @@ -355,11 +342,13 @@ class Fix: "socket": [ "from stdlib.socket import * # type: ignore", "from typing_extensions import TypeAlias", - "_Address: TypeAlias = tuple[str, int] | tuple[str, int, int, int] | str", + "from _mpy_shed import AnyReadableBuf, AnyWritableBuf", ], # integrate STDLIB "ssl": [ + "from typing_extensions import TypeAlias", "from _mpy_shed import StrOrBytesPath", "from stdlib.ssl import * # type: ignore", + "SSLSocket : TypeAlias = Incomplete", ], # integrate STDLIB "struct": ANY_BUF, "time": [ @@ -371,16 +360,16 @@ class Fix: ], "uctypes": ANY_BUF + [ - "from typing_extensions import TypeAlias", - "_ScalarProperty: TypeAlias = int", - "_RecursiveProperty: TypeAlias = tuple[int, _property]", - "_ArrayProperty: TypeAlias = tuple[int, int]", - "_ArrayOfAggregateProperty: TypeAlias = tuple[int, int, _property]", - "_PointerToAPrimitiveProperty: TypeAlias = tuple[int, int]", - "_PointerToAaAggregateProperty: TypeAlias = tuple[int, _property]", - "_BitfieldProperty: TypeAlias = int", - "_property: TypeAlias = _ScalarProperty | _RecursiveProperty | _ArrayProperty | _ArrayOfAggregateProperty | _PointerToAPrimitiveProperty | _PointerToAaAggregateProperty | _BitfieldProperty", - "_descriptor: TypeAlias = tuple[str, _property]", + # "from typing_extensions import TypeAlias", + # "_ScalarProperty: TypeAlias = int", + # "_RecursiveProperty: TypeAlias = tuple[int, _property]", + # "_ArrayProperty: TypeAlias = tuple[int, int]", + # "_ArrayOfAggregateProperty: TypeAlias = tuple[int, int, _property]", + # "_PointerToAPrimitiveProperty: TypeAlias = tuple[int, int]", + # "_PointerToAaAggregateProperty: TypeAlias = tuple[int, _property]", + # "_BitfieldProperty: TypeAlias = int", + # "_property: TypeAlias = _ScalarProperty | _RecursiveProperty | _ArrayProperty | _ArrayOfAggregateProperty | _PointerToAPrimitiveProperty | _PointerToAaAggregateProperty | _BitfieldProperty", + # "_descriptor: TypeAlias = tuple[str, _property]", ], } @@ -416,7 +405,7 @@ class Fix: # pyb.hid((buttons, x, y, z)) Fix( "(buttons, x, y, z)", - "hid_tuple:Tuple", + "hid_tuple:HID_Tuple", ), # esp v1.15.2 .. function:: getaddrinfo((hostname, port, lambda)) Fix( diff --git a/src/stubber/rst/rst_utils.py b/src/stubber/rst/rst_utils.py index 1198d886..b9a2fb30 100644 --- a/src/stubber/rst/rst_utils.py +++ b/src/stubber/rst/rst_utils.py @@ -318,6 +318,7 @@ def distill_return(return_text: str) -> List[Dict]: match_string, [ "tuple", + "a tuple", "a pair", "1-tuple", "2-tuple", @@ -459,7 +460,7 @@ def _type_from_context( - then parses the docstring to find references to known types and give then a rating though a hand coded model () - builds a list return type candidates - selects the highest ranking candidate - - the default Type is 'Any' + - the default Type is 'Incomplete' """ if isinstance(docstring, list): @@ -494,27 +495,31 @@ def _type_from_context( # ------------------------------------------------------ # lookup returns that cannot be found based on the docstring from the lookup list - try: - function_name = function_re.findall(signature)[0] - except IndexError: - function_name = signature.strip().strip(":()") - - if ( - "." in module - and "." in function_name - and module.split(".")[1] == function_name.split(".")[0] - ): - # avoid machine.UART.UART.irq - function_name = function_name = ".".join((module, ".".join(function_name.split(".")[1:]))) + if "(" in signature: + # method / function / class + try: + item_name = function_re.findall(signature)[0] + except IndexError: + item_name = signature.strip().strip(":()") + else: + # module or class attribute + item_name = signature.replace(".. data::", "").strip() + + mod_last = module.split(".")[-1] + item_first = item_name.split(".")[0] + name_repeat = mod_last == item_first + if name_repeat: + # avoid machine.UART.UART.irq or pyb.pyb.hid_mouse + item_name = f"{module}.{item_name}".replace(f"{mod_last}.{item_first}", mod_last) else: - function_name = ".".join((module, function_name)) + item_name = f"{module}.{item_name}" - if function_name in LOOKUP_LIST.keys(): - sig_type = LOOKUP_LIST[function_name][0] + if item_name in LOOKUP_LIST.keys(): + sig_type = LOOKUP_LIST[item_name][0] return { "type": sig_type, "confidence": C_LOOKUP * WEIGHT_LOOPUPS, - "match": function_name, + "match": item_name, } # ------------------------------------------------------ # parse the docstring for simple start verbs, diff --git a/tests/rst/test_returns.py b/tests/rst/test_returns.py index d9cb0c96..29784e0a 100644 --- a/tests/rst/test_returns.py +++ b/tests/rst/test_returns.py @@ -1,7 +1,8 @@ +import json +from pathlib import Path from typing import List, Tuple + import pytest -from pathlib import Path -import json # SOT from stubber.rst.rst_utils import _type_from_context, return_type_from_context # type: ignore @@ -12,24 +13,43 @@ ### Test setup @pytest.mark.parametrize( - "signature, docstring, expected_type, confidence", + "signature, docstring, expected_type, confidence, module", [ - (".. function:: heap_unlock()", "", "Incomplete", 0), - (".. function:: heap_unlock()->None", "", "None", 1), - (".. function:: heap_unlock()->None:", "", "None", 1), - (".. function:: heap_unlock()->None: ", "", "None", 1), - (".. function:: heap_unlock()->None : ", "", "None", 1), - (".. function:: heap_unlock()->List[str] : ", "", "List[str]", 1), # (".. class:: heap_unlock()->str : ", "", "None", 1), + (".. function:: heap_unlock()", "", "Incomplete", 0, "builtins"), + (".. function:: heap_unlock()->None", "", "None", 1, "builtins"), + (".. function:: heap_unlock()->None:", "", "None", 1, "builtins"), + (".. function:: heap_unlock()->None: ", "", "None", 1, "builtins"), + (".. function:: heap_unlock()->None : ", "", "None", 1, "builtins"), + (".. function:: heap_unlock()->List[str] : ", "", "List[str]", 1, "builtins"), + ( + ".. data:: hid_mouse", + """ + A tuple of (subclass, protocol, max packet length, polling interval, report + descriptor) to set appropriate values for a USB mouse or keyboard. + """, + "HID_Tuple", + 0.95, + "pyb", + ), ( + ".. data:: pyb.hid_mouse", + """ + A tuple of (subclass, protocol, max packet length, polling interval, report + descriptor) to set appropriate values for a USB mouse or keyboard. + """, + "HID_Tuple", + 0.95, + "pyb", + ), ], ) -def test_signatures(signature, docstring, expected_type, confidence): +def test_signatures(signature, docstring, expected_type, confidence, module): # return type should be included in the signature # except for classes - r = _type_from_context(docstring=docstring, signature=signature, module="builtins") + r = _type_from_context(docstring=docstring, signature=signature, module=module) assert r["type"] == expected_type assert r["confidence"] >= confidence - t = return_type_from_context(docstring=docstring, signature=signature, module="builtins") + t = return_type_from_context(docstring=docstring, signature=signature, module=module) assert t == expected_type From a204c5d22bb704daa93de03907844641e33c929e Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 28 Oct 2024 22:34:08 +0100 Subject: [PATCH 30/57] stubber: Fix fetching repositories and getting the current checked out version Signed-off-by: Jos Verlinde --- src/stubber/commands/get_docstubs_cmd.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/stubber/commands/get_docstubs_cmd.py b/src/stubber/commands/get_docstubs_cmd.py index 65caaaec..0e085247 100644 --- a/src/stubber/commands/get_docstubs_cmd.py +++ b/src/stubber/commands/get_docstubs_cmd.py @@ -95,8 +95,9 @@ def cli_docstubs( result = fetch_repos(version, CONFIG.mpy_path, CONFIG.mpy_lib_path) if not result: return -1 - # get the current checked out version - version = utils.checkedout_version(CONFIG.mpy_path) + else: + # get the current checked out version + version = utils.checkedout_version(CONFIG.mpy_path) release = git.get_local_tag(rst_path.as_posix(), abbreviate=False) or "" From 1689bd8c5575941360700483496fb7f35ea65b48 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sun, 10 Nov 2024 22:38:37 +0100 Subject: [PATCH 31/57] fix: MergeCommand.typevars init Signed-off-by: Jos Verlinde --- src/stubber/codemod/merge_docstub.py | 1 + tests/rst/data/return_testcases.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 30c896a6..638daa8a 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -95,6 +95,7 @@ def __init__( self.stub_imports: Dict[str, ImportItem] = {} self.all_imports: List[Union[cst.Import, cst.ImportFrom]] = [] + self.typevars = [] # parse the doc-stub file if self.docstub_source: try: diff --git a/tests/rst/data/return_testcases.json b/tests/rst/data/return_testcases.json index abc7673a..5e263be4 100644 --- a/tests/rst/data/return_testcases.json +++ b/tests/rst/data/return_testcases.json @@ -712,7 +712,7 @@ " Depending on the underlying module implementation in a particular", " :term:`MicroPython port`, some or all keyword arguments above may be not supported." ], - "type": "IO", + "type": "SSLSocket", "confidence": 0.8, "match": " None:\n", - " \"\"\"\n", - " Set the function to be called when the timer channel triggers.\n", - " ``fun`` is passed 1 argument, the timer object.\n", - " If ``fun`` is ``None`` then the callback will be disabled.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def capture(self) -> int:\n", - " \"\"\"\n", - " Get or set the capture value associated with a channel.\n", - " capture, compare, and pulse_width are all aliases for the same function.\n", - " capture is the logical name to use when the channel is in input capture mode.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def capture(self, value: int, /) -> None:\n", - " \"\"\"\n", - " Get or set the capture value associated with a channel.\n", - " capture, compare, and pulse_width are all aliases for the same function.\n", - " capture is the logical name to use when the channel is in input capture mode.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def compare(self) -> int:\n", - " \"\"\"\n", - " Get or set the compare value associated with a channel.\n", - " capture, compare, and pulse_width are all aliases for the same function.\n", - " compare is the logical name to use when the channel is in output compare mode.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def compare(self, value: int, /) -> None:\n", - " \"\"\"\n", - " Get or set the compare value associated with a channel.\n", - " capture, compare, and pulse_width are all aliases for the same function.\n", - " compare is the logical name to use when the channel is in output compare mode.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def pulse_width(self) -> int:\n", - " \"\"\"\n", - " Get or set the pulse width value associated with a channel.\n", - " capture, compare, and pulse_width are all aliases for the same function.\n", - " pulse_width is the logical name to use when the channel is in PWM mode.\n", - "\n", - " In edge aligned mode, a pulse_width of ``period + 1`` corresponds to a duty cycle of 100%\n", - " In center aligned mode, a pulse width of ``period`` corresponds to a duty cycle of 100%\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def pulse_width(self, value: int, /) -> None:\n", - " \"\"\"\n", - " Get or set the pulse width value associated with a channel.\n", - " capture, compare, and pulse_width are all aliases for the same function.\n", - " pulse_width is the logical name to use when the channel is in PWM mode.\n", - "\n", - " In edge aligned mode, a pulse_width of ``period + 1`` corresponds to a duty cycle of 100%\n", - " In center aligned mode, a pulse width of ``period`` corresponds to a duty cycle of 100%\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def pulse_width_percent(self) -> float:\n", - " \"\"\"\n", - " Get or set the pulse width percentage associated with a channel. The value\n", - " is a number between 0 and 100 and sets the percentage of the timer period\n", - " for which the pulse is active. The value can be an integer or\n", - " floating-point number for more accuracy. For example, a value of 25 gives\n", - " a duty cycle of 25%.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " @abstractmethod\n", - " def pulse_width_percent(self, value: int | float, /) -> None:\n", - " \"\"\"\n", - " Get or set the pulse width percentage associated with a channel. The value\n", - " is a number between 0 and 100 and sets the percentage of the timer period\n", - " for which the pulse is active. The value can be an integer or\n", - " floating-point number for more accuracy. For example, a value of 25 gives\n", - " a duty cycle of 25%.\n", - " \"\"\"\n", - "\n", - "'''\n", - "# append this to scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi if it does not exist\n", - "# with open(\"scratch/micropython-v1_23_0-docstubs/pyb/Timer.pyi\", \"a\") as f:\n", - "# f.write(TIMERCHANNEL_CLASS)" - ] - }, - { - "cell_type": "code", - "execution_count": 114, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -1096,18 +1116,22 @@ "# Some base types to be used in the stubs\n", "\n", "from __future__ import annotations\n", - "from _typeshed import PathLike\n", + "\n", "from abc import abstractmethod\n", - "from typing import overload, Protocol, Any, runtime_checkable, Literal\n", + "from typing import Tuple, final, overload, Protocol, Any, runtime_checkable, Literal\n", "from typing_extensions import TypeVar, TypeAlias\n", "from array import array\n", "\n", + "\n", "AnyReadableBuf : TypeAlias = bytearray | array | memoryview | bytes\n", "AnyWritableBuf : TypeAlias = bytearray | array | memoryview\n", "\n", - "StrOrBytesPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes]\n", + "StrOrBytesPath: TypeAlias = str | bytes \n", + "# | PathLike[str] | PathLike[bytes]\n", + "# TODO : add the PathLike or GenericPath type\n", + "# from _typeshed import GenericPath\n", "\n", - "_StrOrBytesT = TypeVar(\"_StrOrBytesT\", str, bytes)\n", + "_StrOrBytesT = TypeVar(\"_StrOrBytesT\", str, bytes, covariant=True)\n", "\n", "class _PathLike(Protocol[_StrOrBytesT]):\n", " @abstractmethod\n", @@ -1123,9 +1147,10 @@ "\n", "# copied from _typeshed os.pyi as os.pyi cannot import from a module with the same name\n", "@final\n", - "class uname_result(structseq[str], tuple[str, str, str, str, str]):\n", - " if sys.version_info >= (3, 8):\n", - " __match_args__: Final = (\"sysname\", \"nodename\", \"release\", \"version\", \"machine\")\n", + "# class uname_result(structseq[str], tuple[str, str, str, str, str]):\n", + "class uname_result(str, Tuple[str, str, str, str, str]):\n", + " # if sys.version_info >= (3, 8):\n", + " # __match_args__: Final = (\"sysname\", \"nodename\", \"release\", \"version\", \"machine\")\n", " @property\n", " def sysname(self) -> str: ...\n", " @property\n", @@ -1357,7 +1382,7 @@ "\n", "from pathlib import Path\n", "\n", - "target = Path(\"scratch/micropython-v1_23_0-docstubs/_mpy_shed/__init__.pyi\")\n", + "target = Path(reference_p / \"_mpy_shed/__init__.pyi\")\n", "target.parent.mkdir(parents=True, exist_ok=True)\n", "with open(target, \"w\") as f:\n", " f.write(MPY_SHED)" @@ -1365,7 +1390,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -1450,15 +1475,17 @@ "'''\n", "\n", "# Add missing class\n", - "rp2 = Path(\"scratch/micropython-v1_23_0-docstubs/rp2/__init__.pyi\")\n", + "rp2 = Path(reference_p / \"rp2/__init__.pyi\")\n", "with open(rp2, \"a\") as f:\n", " f.write(CLASS_PIOASMEMIT)\n", "\n", - "# clean / change rp2 / _rp2 \n", - "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", - "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\FLASH.pyi\n", - "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "! del scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", + "\n", + "# clean / change rp2 / _rp2\n", + "# remove the submodules to avoid duplication in multiple files\n", + "for name in [\"DMA\", \"FLASH\", \"PIO\", \"StateMachine\"]:\n", + " submodule = reference_p / f\"rp2/{name}.pyi\"\n", + " submodule.unlink(missing_ok=True)\n", + "\n", "\n", "# remove the relative imports from the rp2 module\n", "with rp2.open(mode=\"r\", encoding=\"utf-8\") as f:\n", @@ -1474,224 +1501,326 @@ " line = \"# \" + line\n", "\n", " # Write the modified line to the file\n", - " f.write(line) " + " f.write(line)" ] }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Found 1041 errors (1041 fixed, 0 remaining).\n" + "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m74\u001b[36m:\u001b[0m56\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\u001b[1;38;5;12m72 |\u001b[0m _OpenBinaryModeReading: TypeAlias = Literal[\"rb\", \"br\", \"rbU\", \"rUb\", \"Urb\", \"brU\", \"bUr\", \"Ubr\"]\n", + "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", + "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", + "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", + "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\n", + "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m74\u001b[36m:\u001b[0m71\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\u001b[1;38;5;12m72 |\u001b[0m _OpenBinaryModeReading: TypeAlias = Literal[\"rb\", \"br\", \"rbU\", \"rUb\", \"Urb\", \"brU\", \"bUr\", \"Ubr\"]\n", + "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", + "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", + "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", + "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\n", + "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m75\u001b[36m:\u001b[0m46\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", + "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", + "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", + "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\n", + "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m75\u001b[36m:\u001b[0m61\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", + "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", + "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", + "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", + "\u001b[1;38;5;12m |\u001b[0m\n", + "\n", + "Found 1069 errors (1065 fixed, 4 remaining).\n" ] } ], "source": [ - "from pathlib import Path\n", - "! ruff check scratch\\micropython-v1_23_0-docstubs --fix --unsafe-fixes\n", - "\n" + "# Clean formatting and upgrate typing notation to 3.10\n", + "! ruff check {reference_p} --fix --unsafe-fixes\n" ] }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# run autoflake on all files - one by one to get the __init__.pyi files\n", - "for f in Path(\"scratch/micropython-v1_23_0-docstubs\").rglob(\"*.pyi\"):\n", + "for f in reference_p.rglob(\"*.pyi\"):\n", " ! autoflake {f} --in --imports typing_extensions,_mpy_shed,_typeshed\n" ] }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uselect.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\usocket.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\Flash.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\PIO.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\StateMachine.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_rp2\\__init__.pyi\n" + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\collections\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cryptolib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\deflate\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\errno\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gc\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gzip\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\heapq\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\lcd160cr\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCBlock.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2C.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2S.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Pin.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\PWM.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\RTC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SD.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SDCard.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Signal.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SPI.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Timer.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\USBDevice.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WIZNET5K.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLANWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ExtInt.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\I2C.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LCD.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\RTC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Servo.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\SPI.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Switch.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\UART.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_HID.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\select\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\struct\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\time\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\vfs\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wipy\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\FlashArea.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\zsensor.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zlib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\Flash.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\StateMachine.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\__init__.pyi\n" ] } ], "source": [ "# clean up the formatting\n", - "! isort scratch/micropython-v1_23_0-docstubs" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "! isort scratch/micropython-v1_23_0-docstubs" + "! isort {reference_p}" ] }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "WARNING: there is a new pyright version available (v1.1.370 -> v1.1.386).\n", + "WARNING: there is a new pyright version available (v1.1.388 -> v1.1.389).\n", "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", "\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m20\u001b[39m:\u001b[33m7\u001b[39m - \u001b[36mwarning\u001b[39m: Type variable \"_StrOrBytesT\" used in generic protocol \"_PathLike\" should be covariant\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m33\u001b[39m:\u001b[33m2\u001b[39m - \u001b[36mwarning\u001b[39m: \"final\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m34\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"structseq\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m35\u001b[39m:\u001b[33m8\u001b[39m - \u001b[36mwarning\u001b[39m: \"sys\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\_mpy_shed\\__init__.pyi:\u001b[33m36\u001b[39m:\u001b[33m25\u001b[39m - \u001b[36mwarning\u001b[39m: \"Final\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi:\u001b[33m394\u001b[39m:\u001b[33m25\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_T\" appears only once in generic function signature\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m75\u001b[39m:\u001b[33m56\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m75\u001b[39m:\u001b[33m71\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m76\u001b[39m:\u001b[33m46\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m76\u001b[39m:\u001b[33m61\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m22\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m36\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m49\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m49\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\u001b[90m (reportInvalidTypeForm)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m306\u001b[39m:\u001b[33m33\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m318\u001b[39m:\u001b[33m55\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m364\u001b[39m:\u001b[33m23\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m378\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m378\u001b[39m:\u001b[33m25\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m402\u001b[39m:\u001b[33m35\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m419\u001b[39m:\u001b[33m38\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m458\u001b[39m:\u001b[33m25\u001b[39m - \u001b[34minformation\u001b[39m: \"StreamReader\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m458\u001b[39m:\u001b[33m39\u001b[39m - \u001b[34minformation\u001b[39m: \"StreamWriter\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi:\u001b[33m642\u001b[39m:\u001b[33m66\u001b[39m - \u001b[34minformation\u001b[39m: \"_Service\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi:\u001b[33m80\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m32\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m38\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m44\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m50\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m74\u001b[39m:\u001b[33m13\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m198\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m356\u001b[39m:\u001b[33m59\u001b[39m - \u001b[34minformation\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m400\u001b[39m:\u001b[33m41\u001b[39m - \u001b[34minformation\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi:\u001b[33m468\u001b[39m:\u001b[33m35\u001b[39m - \u001b[34minformation\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi:\u001b[33m37\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi:\u001b[33m69\u001b[39m:\u001b[33m12\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi:\u001b[33m101\u001b[39m:\u001b[33m11\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m56\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m71\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m153\u001b[39m:\u001b[33m46\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m153\u001b[39m:\u001b[33m61\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m155\u001b[39m:\u001b[33m16\u001b[39m - \u001b[34minformation\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m244\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m364\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m372\u001b[39m:\u001b[33m71\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m380\u001b[39m:\u001b[33m73\u001b[39m - \u001b[34minformation\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m388\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m396\u001b[39m:\u001b[33m78\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m404\u001b[39m:\u001b[33m73\u001b[39m - \u001b[34minformation\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi:\u001b[33m16\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi:\u001b[33m48\u001b[39m:\u001b[33m58\u001b[39m - \u001b[34minformation\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi:\u001b[33m19\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_T\" appears only once in generic function signature\n", "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi:\u001b[33m21\u001b[39m:\u001b[33m6\u001b[39m - \u001b[31merror\u001b[39m: Import \"stdlib.collections\" could not be resolved\u001b[90m (reportMissingImports)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi:\u001b[33m469\u001b[39m:\u001b[33m35\u001b[39m - \u001b[36mwarning\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi:\u001b[33m49\u001b[39m:\u001b[33m58\u001b[39m - \u001b[36mwarning\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m57\u001b[39m:\u001b[33m44\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi:\u001b[33m57\u001b[39m:\u001b[33m68\u001b[39m - \u001b[36mwarning\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m73\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi:\u001b[33m73\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi:\u001b[33m683\u001b[39m:\u001b[33m45\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"int\" cannot be assigned to parameter of type \"tuple[int, int, int, int, bytes]\"\n", - "   \"int\" is incompatible with \"tuple[int, int, int, int, bytes]\"\u001b[90m (reportArgumentType)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m19\u001b[39m - \u001b[31merror\u001b[39m: Cannot access attribute \"JOIN_NONE\" for class \"type[PIO]\"\n", - "   Attribute \"JOIN_NONE\" is unknown\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m192\u001b[39m:\u001b[33m27\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m200\u001b[39m:\u001b[33m30\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m220\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m235\u001b[39m:\u001b[33m59\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m352\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m362\u001b[39m:\u001b[33m29\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyWritableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi:\u001b[33m379\u001b[39m:\u001b[33m26\u001b[39m - \u001b[36mwarning\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m14\u001b[39m - \u001b[36mwarning\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m15\u001b[39m - \u001b[36mwarning\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m62\u001b[39m:\u001b[33m20\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m63\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m64\u001b[39m:\u001b[33m23\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m18\u001b[39m - \u001b[36mwarning\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m69\u001b[39m:\u001b[33m21\u001b[39m - \u001b[36mwarning\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m99\u001b[39m:\u001b[33m50\u001b[39m - \u001b[36mwarning\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi:\u001b[33m153\u001b[39m:\u001b[33m38\u001b[39m - \u001b[36mwarning\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "3 errors, 27 warnings, 2 informations \n" + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi:\u001b[33m54\u001b[39m:\u001b[33m27\u001b[39m - \u001b[34minformation\u001b[39m: \"_Color\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"_Color\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m68\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m17\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m23\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m36\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m33\u001b[39m:\u001b[33m15\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m38\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m53\u001b[39m:\u001b[33m15\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m58\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m110\u001b[39m:\u001b[33m17\u001b[39m - \u001b[34minformation\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m207\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m228\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m333\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m354\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m399\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m405\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m435\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m441\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m446\u001b[39m:\u001b[33m17\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m452\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m458\u001b[39m:\u001b[33m17\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m464\u001b[39m:\u001b[33m22\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m464\u001b[39m:\u001b[33m42\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m470\u001b[39m:\u001b[33m16\u001b[39m - \u001b[34minformation\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m476\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m528\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m267\u001b[39m:\u001b[33m43\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m363\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m459\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m556\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m652\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m747\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi:\u001b[33m107\u001b[39m:\u001b[33m22\u001b[39m - \u001b[34minformation\u001b[39m: \"Subscriptable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m20\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m126\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Variable not allowed in type expression\u001b[90m (reportInvalidTypeForm)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m127\u001b[39m:\u001b[33m15\u001b[39m - \u001b[31merror\u001b[39m: Variable not allowed in type expression\u001b[90m (reportInvalidTypeForm)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m128\u001b[39m:\u001b[33m22\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['CERT_NONE']\" cannot be assigned to parameter of type \"int\"\n", + "   \"Literal['CERT_NONE']\" is not assignable to \"int\"\u001b[90m (reportArgumentType)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi:\u001b[33m13\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi:\u001b[33m102\u001b[39m:\u001b[33m47\u001b[39m - \u001b[34minformation\u001b[39m: \"_descriptor\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi:\u001b[33m108\u001b[39m:\u001b[33m29\u001b[39m - \u001b[34minformation\u001b[39m: \"_descriptor\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m59\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m61\u001b[39m:\u001b[33m20\u001b[39m - \u001b[34minformation\u001b[39m: \"INPUT_MIC3\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m62\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"INPUT_MIC2\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m63\u001b[39m:\u001b[33m23\u001b[39m - \u001b[34minformation\u001b[39m: \"SYSCLK_MCLK\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m66\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"SYNC_DAC\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"BUS_I2S\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m98\u001b[39m:\u001b[33m50\u001b[39m - \u001b[34minformation\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m38\u001b[39m - \u001b[34minformation\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "15 errors, 1 warning, 87 informations \n" ] } ], "source": [ "\n", - "!cd \"d:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\" && pyright .\n", + "!cd \"d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\" && pyright .\n", "!cd \"d:\\mypython\\micropython-stubber\"\n" ] } From 547d9091957ef63cdd8fb6b9364a13928ad19c40 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 15 Nov 2024 15:42:33 +0100 Subject: [PATCH 34/57] Reference Update to v1.24. Signed-off-by: Jos Verlinde --- enrich_tester.ipynb | 1962 +++++++++++++++++-------------------------- 1 file changed, 768 insertions(+), 1194 deletions(-) diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb index 2cca35dc..154b5116 100644 --- a/enrich_tester.ipynb +++ b/enrich_tester.ipynb @@ -13,8 +13,7 @@ "\n", "# Merge with the notebook on another branch where I have already seperated out _mpy_shed \n", "- path repos\\micropython-stubs\\stubs\\_manual\\_mpy_shed\n", - "- but now also changes in this file \n", - "- Confused - need to sit down to fix this another time " + "- but now also changes in this file \n" ] }, { @@ -50,16 +49,28 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "outputs": [], "source": [ + "# set parameters\n", + "\n", "from pathlib import Path\n", "\n", - "version = \"v1.23.0\"\n", + "\n", + "\n", + "version = \"v1.24.0\"\n", + "\n", + "\n", "flat_version = version.replace(\".\", \"_\")\n", + "\n", + "\n", "reference_p = Path(\"./scratch/micropython-reference\")\n", "\n", - "MIT = True\n", + "MIT = False\n", "if MIT:\n", " # Howards Typeshed\n", " overload_typestubs = Path(\"repos\\\\PyBoardTypeshed\\\\micropython_typesheds\")\n", @@ -71,7 +82,11 @@ { "cell_type": "code", "execution_count": 2, - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, "outputs": [ { "name": "stdout", @@ -79,181 +94,237 @@ "text": [ "Unstaged changes after reset:\n", "M\tmicropython-reference/_mpy_shed/__init__.pyi\n", + "M\tmicropython-reference/_thread/__init__.pyi\n", + "M\tmicropython-reference/array/__init__.pyi\n", + "M\tmicropython-reference/asyncio/__init__.pyi\n", + "M\tmicropython-reference/binascii/__init__.pyi\n", + "M\tmicropython-reference/bluetooth/__init__.pyi\n", + "M\tmicropython-reference/btree/__init__.pyi\n", + "M\tmicropython-reference/cmath/__init__.pyi\n", + "M\tmicropython-reference/collections/__init__.pyi\n", + "M\tmicropython-reference/cryptolib/__init__.pyi\n", + "M\tmicropython-reference/deflate/__init__.pyi\n", + "M\tmicropython-reference/errno/__init__.pyi\n", + "M\tmicropython-reference/esp/__init__.pyi\n", + "M\tmicropython-reference/esp32/__init__.pyi\n", + "M\tmicropython-reference/espnow/__init__.pyi\n", + "M\tmicropython-reference/framebuf/__init__.pyi\n", + "M\tmicropython-reference/gc/__init__.pyi\n", + "M\tmicropython-reference/gzip/__init__.pyi\n", "M\tmicropython-reference/hashlib/__init__.pyi\n", - "M\tpyrightconfig.json\n", - "10:43:47 | ℹ️ micropython-stubber 1.23.2a0\n", - "10:43:47 | ℹ️ fetch updates\n", - "10:43:49 | ℹ️ Switching to v1.23.0\n", - "10:43:52 | ℹ️ repos\\micropython v1.23.0\n", - "10:43:52 | ℹ️ repos\\micropython-lib v1.23.0\n", - "10:43:52 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.23.0\n", - "10:43:53 | ℹ️ Get docstubs for MicroPython v1.23.0\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\array\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\asyncio\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\binascii\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\bluetooth\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\btree\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\cmath\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\collections\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\cryptolib\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\deflate\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\errno\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\esp\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\esp32\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\espnow\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\framebuf\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\gc\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\gzip\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\heapq\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\io\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\json\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\lcd160cr\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\ADCBlock.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\ADCWiPy.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\I2C.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\I2S.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\Pin.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\PWM.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\RTC.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\machine\\SD.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\SDCard.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\Signal.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\SPI.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\Timer.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\TimerWiPy.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\UART.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\USBDevice.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\machine\\WDT.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\math\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\micropython\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\neopixel\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\network\\LAN.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\network\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\network\\WIZNET5K.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\network\\WLAN.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\network\\WLANWiPy.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\openamp\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\os\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\platform\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Accel.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ADC.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\CAN.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\DAC.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\ExtInt.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Flash.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\I2C.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LCD.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\LED.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Pin.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\pyb\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\RTC.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Servo.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\SPI.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Switch.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\Timer.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\pyb\\UART.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_HID.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\pyb\\USB_VCP.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\random\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\DMA.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\Flash.pyi\n", - "10:43:53 | ℹ️ - Writing to: scratch\\micropython-v1_23_0-docstubs\\rp2\\PIO.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\rp2\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\rp2\\StateMachine.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\select\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\socket\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\ssl\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\stm\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\struct\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\sys\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\time\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\uctypes\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\vfs\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\wipy\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\wm8960\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\zephyr\\DiskAccess.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\zephyr\\FlashArea.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\zephyr\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\zephyr\\zsensor.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\zlib\\__init__.pyi\n", - "10:43:53 | ℹ️ - Writing to: \n", - "scratch\\micropython-v1_23_0-docstubs\\_thread\\__init__.pyi\n", - "10:43:53 | ℹ️ ::group:: start post processing of retrieved stubs\n", - "10:43:56 | ℹ️ ::group:: Done\n" + "M\tmicropython-reference/heapq/__init__.pyi\n", + "M\tmicropython-reference/io/__init__.pyi\n", + "M\tmicropython-reference/json/__init__.pyi\n", + "M\tmicropython-reference/lcd160cr/__init__.pyi\n", + "M\tmicropython-reference/machine/Pin.pyi\n", + "M\tmicropython-reference/machine/UART.pyi\n", + "M\tmicropython-reference/machine/USBDevice.pyi\n", + "M\tmicropython-reference/machine/__init__.pyi\n", + "M\tmicropython-reference/math/__init__.pyi\n", + "M\tmicropython-reference/micropython/__init__.pyi\n", + "M\tmicropython-reference/modules.json\n", + "M\tmicropython-reference/neopixel/__init__.pyi\n", + "M\tmicropython-reference/network/WIZNET5K.pyi\n", + "M\tmicropython-reference/network/WLAN.pyi\n", + "M\tmicropython-reference/network/WLANWiPy.pyi\n", + "M\tmicropython-reference/network/__init__.pyi\n", + "M\tmicropython-reference/openamp/__init__.pyi\n", + "M\tmicropython-reference/os/__init__.pyi\n", + "M\tmicropython-reference/platform/__init__.pyi\n", + "M\tmicropython-reference/pyb/__init__.pyi\n", + "M\tmicropython-reference/random/__init__.pyi\n", + "M\tmicropython-reference/rp2/__init__.pyi\n", + "M\tmicropython-reference/select/__init__.pyi\n", + "M\tmicropython-reference/socket/__init__.pyi\n", + "M\tmicropython-reference/ssl/__init__.pyi\n", + "M\tmicropython-reference/stm/__init__.pyi\n", + "M\tmicropython-reference/struct/__init__.pyi\n", + "M\tmicropython-reference/sys/__init__.pyi\n", + "M\tmicropython-reference/time/__init__.pyi\n", + "M\tmicropython-reference/uctypes/__init__.pyi\n", + "M\tmicropython-reference/vfs/__init__.pyi\n", + "M\tmicropython-reference/wipy/__init__.pyi\n", + "M\tmicropython-reference/zephyr/__init__.pyi\n", + "M\tmicropython-reference/zephyr/zsensor.pyi\n", + "M\tmicropython-reference/zlib/__init__.pyi\n", + "Removing micropython-reference/_mpy_shed/_collections_abc.pyi\n", + "Removing micropython-reference/_mpy_shed/collections/\n", + "Removing micropython-reference/network/PPP.pyi\n", + "15:21:01 | ℹ️ micropython-stubber 1.23.2a0\n", + "15:21:01 | ℹ️ fetch updates\n", + "15:21:03 | ℹ️ Switching to v1.24.0\n", + "15:21:06 | ℹ️ repos\\micropython v1.24.0-dirty\n", + "15:21:06 | ℹ️ repos\\micropython-lib v1.24.0\n", + "15:21:06 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.24.0\n", + "15:21:06 | ℹ️ Get docstubs for MicroPython v1.24.0\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\array\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\asyncio\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\binascii\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\bluetooth\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\btree\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\cmath\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\collections\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\cryptolib\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\deflate\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\errno\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\esp\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\esp32\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\espnow\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\framebuf\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\gc\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\gzip\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\hashlib\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\heapq\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\io\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\json\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\lcd160cr\\__init__.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi\n", + "15:21:06 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\UART.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\USBDevice.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\math\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\micropython\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\neopixel\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\network\\LAN.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\network\\PPP.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\openamp\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\os\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\platform\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\random\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi\n", + "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\select\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\stm\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\sys\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\time\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\uctypes\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\vfs\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\wipy\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\wm8960\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi\n", + "15:21:07 | ℹ️ - Writing to: \n", + "scratch\\micropython-v1_24_0-docstubs\\_thread\\__init__.pyi\n", + "15:21:07 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "15:21:10 | ℹ️ ::group:: Done\n" ] }, { @@ -265,98 +336,99 @@ "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_thread\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\collections\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\deflate\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\errno\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\errno\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\binascii\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gzip\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gc\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\heapq\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gzip\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCBlock.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2C.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2S.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2C.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\PWM.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cryptolib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\lcd160cr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cryptolib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SDCard.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Signal.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Timer.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Pin.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SPI.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\lcd160cr\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\USBDevice.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\USBDevice.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WIZNET5K.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\PPP.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLAN.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLANWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ExtInt.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LCD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\I2C.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Servo.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\I2C.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\RTC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Switch.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_HID.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Servo.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\SPI.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\UART.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_VCP.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\Flash.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\DMA.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\StateMachine.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_VCP.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\select\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\StateMachine.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\struct\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wipy\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\DiskAccess.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\time\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\vfs\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\FlashArea.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\vfs\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zlib\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\zsensor.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", "\n", "All done! ✨ 🍰 ✨\n", - "92 files reformatted, 11 files left unchanged.\n" + "93 files reformatted, 11 files left unchanged.\n" ] } ], @@ -439,6 +511,7 @@ "M\tmicropython-reference/machine/__init__.pyi\n", "M\tmicropython-reference/math/__init__.pyi\n", "M\tmicropython-reference/micropython/__init__.pyi\n", + "M\tmicropython-reference/modules.json\n", "M\tmicropython-reference/neopixel/__init__.pyi\n", "M\tmicropython-reference/network/LAN.pyi\n", "M\tmicropython-reference/network/WIZNET5K.pyi\n", @@ -487,90 +560,22 @@ "M\tmicropython-reference/zephyr/__init__.pyi\n", "M\tmicropython-reference/zephyr/zsensor.pyi\n", "M\tmicropython-reference/zlib/__init__.pyi\n", - "M\tpyrightconfig.json\n", - "10:44:09 | ℹ️ micropython-stubber 1.23.2a0\n", - "10:44:09 | ℹ️ Enriching scratch with repos\\rp2040\n", - "10:44:09 | ℹ️ Enrich folder scratch.\n", - "10:44:10 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\rp2\\asm_pio.pyi\n", - "10:44:10 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\rp2\\__init__.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\_rp2\\DMA.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\_rp2\\Flash.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\_rp2\\irq.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\_rp2\\PIO.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\_rp2\\StateMachine.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", - "repos\\rp2040\\_rp2\\__init__.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\rp2\\asm_pio.pyi\n", - "10:44:11 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\rp2\\__init__.pyi\n", - "10:44:12 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\_rp2\\DMA.pyi\n", - "10:44:12 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\_rp2\\Flash.pyi\n", - "10:44:12 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\_rp2\\irq.pyi\n", - "10:44:12 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\_rp2\\PIO.pyi\n", - "10:44:12 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\_rp2\\StateMachine.pyi\n", - "10:44:12 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", - "repos\\rp2040\\_rp2\\__init__.pyi\n", - "10:44:13 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\rp2\\asm_pio.pyi\n", - "10:44:13 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\rp2\\__init__.pyi\n", - "10:44:13 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\_rp2\\DMA.pyi\n", - "10:44:13 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\_rp2\\Flash.pyi\n", - "10:44:14 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\_rp2\\irq.pyi\n", - "10:44:14 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\_rp2\\PIO.pyi\n", - "10:44:14 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\_rp2\\StateMachine.pyi\n", - "10:44:14 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", - "repos\\rp2040\\_rp2\\__init__.pyi\n", - "10:44:15 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\rp2\\asm_pio.pyi\n", - "10:44:15 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\rp2\\__init__.pyi\n", - "10:44:15 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\_rp2\\DMA.pyi\n", - "10:44:15 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\_rp2\\Flash.pyi\n", - "10:44:16 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\_rp2\\irq.pyi\n", - "10:44:16 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\_rp2\\PIO.pyi\n", - "10:44:16 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\_rp2\\StateMachine.pyi\n", - "10:44:16 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", - "repos\\rp2040\\_rp2\\__init__.pyi\n", - "10:44:16 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\rp2\\asm_pio.pyi\n", - "10:44:16 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\rp2\\__init__.pyi\n", - "10:44:17 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\_rp2\\DMA.pyi\n", - "10:44:17 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\_rp2\\Flash.pyi\n", - "10:44:17 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\_rp2\\irq.pyi\n", - "10:44:17 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\_rp2\\PIO.pyi\n", - "10:44:17 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\_rp2\\StateMachine.pyi\n", - "10:44:17 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", - "repos\\rp2040\\_rp2\\__init__.pyi\n" + "15:21:21 | ℹ️ micropython-stubber 1.23.2a0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \n", + " Usage: stubber enrich [OPTIONS] \n", + " \n", + " Try 'stubber enrich --help' for help \n", + "┌─ Error ─────────────────────────────────────────────────────────────────────┐\n", + "│ Invalid value for '--docstubs' / '--source' / '-ds': Path 'repos\\\\rp2040' │\n", + "│ does not exist. │\n", + "└─────────────────────────────────────────────────────────────────────────────┘\n", + " \n" ] } ], @@ -596,7 +601,7 @@ } ], "source": [ - "# sanity check on formatting\n", + "### sanity check on formatting\n", "! ruff check scratch\\micropython-reference --ignore F4 --ignore UP0 --ignore F811 " ] }, @@ -609,357 +614,355 @@ "name": "stdout", "output_type": "stream", "text": [ - "10:44:29 | ℹ️ micropython-stubber 1.23.2a0\n", - "10:44:29 | ℹ️ Enriching scratch with repos\\PyBoardTypeshed\\micropython_typesheds\n", - "10:44:29 | ℹ️ Enrich folder scratch.\n", - "10:44:29 | ℹ️ Merge scratch\\micropython-reference\\_thread\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\_thread.pyi\n", - "10:44:29 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\array.pyi\n", - "10:44:29 | ℹ️ Change __getitem__ to @overload\n", - "10:44:29 | ℹ️ Change __setitem__ to @overload\n", - "10:44:30 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uarray.pyi\n", - "10:44:30 | ℹ️ Merge scratch\\micropython-reference\\asyncio\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uasyncio.pyi\n", - "10:44:30 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\binascii.pyi\n", - "10:44:30 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ubinascii.pyi\n", - "10:44:30 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\bluetooth.pyi\n", - "10:44:31 | ℹ️ Change active to @overload\n", - "10:44:31 | ℹ️ Change config to @overload\n", - "10:44:31 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ubluetooth.pyi\n", - "10:44:32 | ℹ️ Merge scratch\\micropython-reference\\btree\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\btree.pyi\n", - "10:44:32 | ℹ️ Merge scratch\\micropython-reference\\cmath\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\cmath.pyi\n", - "10:44:32 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\collections.pyi\n", - "10:44:32 | ℹ️ Change __init__ to @overload\n", - "10:44:32 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ucollections.pyi\n", - "10:44:33 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\cryptolib.pyi\n", - "10:44:33 | ℹ️ Change __init__ to @overload\n", - "10:44:33 | ℹ️ Change encrypt to @overload\n", - "10:44:33 | ℹ️ Change decrypt to @overload\n", - "10:44:33 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ucryptolib.pyi\n", - "10:44:33 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\errno.pyi\n", - "10:44:33 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uerrno.pyi\n", - "10:44:33 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\esp.pyi\n", - "10:44:33 | ℹ️ Change sleep_type to @overload\n", - "10:44:33 | ℹ️ Change flash_read to @overload\n", - "10:44:33 | ℹ️ Change set_native_code_location to @overload\n", - "10:44:34 | ℹ️ Merge scratch\\micropython-reference\\esp32\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\esp32.pyi\n", - "10:44:34 | ℹ️ Change write_pulses to @overload\n", - "10:44:34 | ℹ️ Merge scratch\\micropython-reference\\framebuf\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\framebuf.pyi\n", - "10:44:34 | ℹ️ Change pixel to @overload\n", - "10:44:35 | ℹ️ Merge scratch\\micropython-reference\\gc\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\gc.pyi\n", - "10:44:35 | ℹ️ Change threshold to @overload\n", - "10:44:35 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\hashlib.pyi\n", - "10:44:35 | ℹ️ Change __init__ to @overload\n", - "10:44:35 | ℹ️ Change __init__ to @overload\n", - "10:44:35 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uhashlib.pyi\n", - "10:44:35 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\heapq.pyi\n", - "10:44:35 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uheapq.pyi\n", - "10:44:36 | ℹ️ Merge scratch\\micropython-reference\\io\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\io.pyi\n", - "10:44:36 | ℹ️ Change __init__ to @overload\n", - "10:44:36 | ℹ️ Change __init__ to @overload\n", - "10:44:36 | ℹ️ Change open to @overload\n", - "10:44:36 | ℹ️ Merge scratch\\micropython-reference\\io\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uio.pyi\n", - "10:44:37 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\json.pyi\n", - "10:44:37 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ujson.pyi\n", - "10:44:37 | ℹ️ Merge scratch\\micropython-reference\\lcd160cr\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\lcd160cr.pyi\n", - "10:44:37 | ℹ️ Change __init__ to @overload\n", - "10:44:38 | ℹ️ Merge scratch\\micropython-reference\\machine\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:39 | ℹ️ Change freq to @overload\n", - "10:44:39 | ℹ️ Change lightsleep to @overload\n", - "10:44:39 | ℹ️ Change deepsleep to @overload\n", - "10:44:39 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADC.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:40 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCBlock.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:40 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCWiPy.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:41 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2C.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:42 | ℹ️ Change __init__ to @overload\n", - "10:44:42 | ℹ️ Change init to @overload\n", - "10:44:43 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2S.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:43 | ℹ️ Merge scratch\\micropython-reference\\machine\\Pin.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:45 | ℹ️ Change value to @overload\n", - "10:44:45 | ℹ️ Change __call__ to @overload\n", - "10:44:45 | ℹ️ Change mode to @overload\n", - "10:44:45 | ℹ️ Change pull to @overload\n", - "10:44:45 | ℹ️ Merge scratch\\micropython-reference\\machine\\PWM.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:45 | ℹ️ Change freq to @overload\n", - "10:44:45 | ℹ️ Change duty_u16 to @overload\n", - "10:44:45 | ℹ️ Change duty_ns to @overload\n", - "10:44:45 | ℹ️ Merge scratch\\micropython-reference\\machine\\RTC.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:46 | ℹ️ Change __init__ to @overload\n", - "10:44:46 | ℹ️ Change init to @overload\n", - "10:44:46 | ℹ️ Change alarm to @overload\n", - "10:44:46 | ℹ️ Merge scratch\\micropython-reference\\machine\\SD.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:47 | ℹ️ Merge scratch\\micropython-reference\\machine\\SDCard.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\Signal.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:49 | ℹ️ Change __init__ to @overload\n", - "10:44:49 | ℹ️ Change value to @overload\n", - "10:44:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\SPI.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:50 | ℹ️ Change __init__ to @overload\n", - "10:44:50 | ℹ️ Change init to @overload\n", - "10:44:51 | ℹ️ Merge scratch\\micropython-reference\\machine\\Timer.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:51 | ℹ️ Change __init__ to @overload\n", - "10:44:51 | ℹ️ Merge scratch\\micropython-reference\\machine\\TimerWiPy.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:52 | ℹ️ Merge scratch\\micropython-reference\\machine\\UART.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:52 | ℹ️ Change __init__ to @overload\n", - "10:44:52 | ℹ️ Change init to @overload\n", - "10:44:52 | ℹ️ Change read to @overload\n", - "10:44:52 | ℹ️ Change readinto to @overload\n", - "10:44:52 | ℹ️ Merge scratch\\micropython-reference\\machine\\USBDevice.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:53 | ℹ️ Merge scratch\\micropython-reference\\machine\\WDT.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "10:44:54 | ℹ️ Merge scratch\\micropython-reference\\math\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\math.pyi\n", - "10:44:55 | ℹ️ Merge scratch\\micropython-reference\\micropython\\__init__.pyi from\n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\micropython.pyi\n", - "10:44:55 | ℹ️ Change opt_level to @overload\n", - "10:44:55 | ℹ️ Change mem_info to @overload\n", - "10:44:55 | ℹ️ Change qstr_info to @overload\n", - "10:44:55 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\neopixel.pyi\n", - "10:44:55 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "10:44:56 | ℹ️ Change active to @overload\n", - "10:44:56 | ℹ️ Change connect to @overload\n", - "10:44:56 | ℹ️ Change status to @overload\n", - "10:44:56 | ℹ️ Change ifconfig to @overload\n", - "10:44:56 | ℹ️ Change config to @overload\n", - "10:44:56 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "10:44:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "10:44:57 | ℹ️ Change ifconfig to @overload\n", - "10:44:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "10:44:58 | ℹ️ Change active to @overload\n", - "10:44:58 | ℹ️ Change status to @overload\n", - "10:44:58 | ℹ️ Change ifconfig to @overload\n", - "10:44:58 | ℹ️ Change config to @overload\n", - "10:44:58 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "10:44:58 | ℹ️ Change __init__ to @overload\n", - "10:44:58 | ℹ️ Change ifconfig to @overload\n", - "10:44:58 | ℹ️ Change mode to @overload\n", - "10:44:58 | ℹ️ Change ssid to @overload\n", - "10:44:58 | ℹ️ Change auth to @overload\n", - "10:44:58 | ℹ️ Change channel to @overload\n", - "10:44:58 | ℹ️ Change antenna to @overload\n", - "10:44:58 | ℹ️ Change mac to @overload\n", - "10:44:58 | ℹ️ Merge scratch\\micropython-reference\\os\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi\n", - "10:44:59 | ℹ️ Change ilistdir to @overload\n", - "10:44:59 | ℹ️ Change listdir to @overload\n", - "10:44:59 | ℹ️ Merge scratch\\micropython-reference\\os\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uos.pyi\n", - "10:45:00 | ℹ️ Merge scratch\\micropython-reference\\pyb\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:01 | ℹ️ Change freq to @overload\n", - "10:45:01 | ℹ️ Change hid to @overload\n", - "10:45:01 | ℹ️ Change info to @overload\n", - "10:45:01 | ℹ️ Change mount to @overload\n", - "10:45:01 | ℹ️ Change repl_uart to @overload\n", - "10:45:01 | ℹ️ Change usb_mode to @overload\n", - "10:45:01 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Accel.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:02 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ADC.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:03 | ℹ️ Merge scratch\\micropython-reference\\pyb\\CAN.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:04 | ℹ️ Change info to @overload\n", - "10:45:04 | ℹ️ Change setfilter to @overload\n", - "10:45:04 | ℹ️ Change recv to @overload\n", - "10:45:04 | ℹ️ Merge scratch\\micropython-reference\\pyb\\DAC.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:07 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ExtInt.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:09 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Flash.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:11 | ℹ️ Change __init__ to @overload\n", - "10:45:11 | ℹ️ Merge scratch\\micropython-reference\\pyb\\I2C.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:12 | ℹ️ Change mem_read to @overload\n", - "10:45:12 | ℹ️ Change recv to @overload\n", - "10:45:12 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LCD.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:14 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LED.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:15 | ℹ️ Change intensity to @overload\n", - "10:45:16 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Pin.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:18 | ℹ️ Change debug to @overload\n", - "10:45:18 | ℹ️ Change dict to @overload\n", - "10:45:18 | ℹ️ Change mapper to @overload\n", - "10:45:18 | ℹ️ Change value to @overload\n", - "10:45:18 | ℹ️ Merge scratch\\micropython-reference\\pyb\\RTC.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:20 | ℹ️ Change calibration to @overload\n", - "10:45:20 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Servo.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:22 | ℹ️ Change angle to @overload\n", - "10:45:22 | ℹ️ Change speed to @overload\n", - "10:45:22 | ℹ️ Change calibration to @overload\n", - "10:45:22 | ℹ️ Merge scratch\\micropython-reference\\pyb\\SPI.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:23 | ℹ️ Change __init__ to @overload\n", - "10:45:23 | ℹ️ Change init to @overload\n", - "10:45:23 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Switch.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:25 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Timer.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:27 | ℹ️ Change __init__ to @overload\n", - "10:45:27 | ℹ️ Change init to @overload\n", - "10:45:27 | ℹ️ Change channel to @overload\n", - "10:45:27 | ℹ️ Change counter to @overload\n", - "10:45:27 | ℹ️ Change freq to @overload\n", - "10:45:27 | ℹ️ Change period to @overload\n", - "10:45:27 | ℹ️ Change prescaler to @overload\n", - "10:45:28 | ℹ️ Merge scratch\\micropython-reference\\pyb\\UART.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:30 | ℹ️ Change __init__ to @overload\n", - "10:45:30 | ℹ️ Change read to @overload\n", - "10:45:30 | ℹ️ Change readinto to @overload\n", - "10:45:30 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_HID.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:31 | ℹ️ Change recv to @overload\n", - "10:45:31 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_VCP.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "10:45:32 | ℹ️ Change read to @overload\n", - "10:45:32 | ℹ️ Change readinto to @overload\n", - "10:45:32 | ℹ️ Change recv to @overload\n", - "10:45:32 | ℹ️ Merge scratch\\micropython-reference\\random\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\random.pyi\n", - "10:45:32 | ℹ️ Change randrange to @overload\n", - "10:45:32 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\select.pyi\n", - "10:45:32 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uselect.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\socket.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\usocket.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ssl.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ussl.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\stm\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\stm.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\struct.pyi\n", - "10:45:33 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ustruct.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\sys.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\usys.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\time.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\utime.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\array.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uarray.pyi\n", - "10:45:34 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\binascii.pyi\n", - "10:45:35 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ubinascii.pyi\n", - "10:45:35 | ℹ️ Merge scratch\\micropython-reference\\uctypes\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uctypes.pyi\n", - "10:45:35 | ℹ️ Merge scratch\\micropython-reference\\uio.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\io.pyi\n", - "10:45:35 | ℹ️ Merge scratch\\micropython-reference\\uio.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uio.pyi\n", - "10:45:36 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\json.pyi\n", - "10:45:36 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ujson.pyi\n", - "10:45:36 | ℹ️ Merge scratch\\micropython-reference\\uos.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi\n", - "10:45:36 | ℹ️ Merge scratch\\micropython-reference\\uos.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uos.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\select.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uselect.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\socket.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\usocket.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ssl.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ussl.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\struct.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\ustruct.pyi\n", - "10:45:37 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\time.pyi\n", - "10:45:38 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\utime.pyi\n", - "10:45:38 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uzlib.pyi\n", - "10:45:38 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\zlib.pyi\n", - "10:45:38 | ℹ️ Merge scratch\\micropython-reference\\wipy\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\wipy.pyi\n", - "10:45:38 | ℹ️ Change heartbeat to @overload\n", - "10:45:38 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\uzlib.pyi\n", - "10:45:38 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", - "repos\\PyBoardTypeshed\\micropython_typesheds\\zlib.pyi\n" + "15:21:31 | ℹ️ micropython-stubber 1.23.2a0\n", + "15:21:31 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n", + "15:21:31 | ℹ️ Enrich folder scratch.\n", + "15:21:31 | ℹ️ Merge scratch\\micropython-reference\\_thread\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\n", + "15:21:31 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", + "15:21:31 | ℹ️ Change __getitem__ to @overload\n", + "15:21:31 | ℹ️ Change __setitem__ to @overload\n", + "15:21:31 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", + "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\asyncio\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\n", + "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", + "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", + "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\n", + "15:21:33 | ℹ️ Change active to @overload\n", + "15:21:33 | ℹ️ Change config to @overload\n", + "15:21:33 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\n", + "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\btree\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\btree.pyi\n", + "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\cmath\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\n", + "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\n", + "15:21:34 | ℹ️ Change __init__ to @overload\n", + "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\n", + "15:21:35 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\n", + "15:21:35 | ℹ️ Change __init__ to @overload\n", + "15:21:35 | ℹ️ Change encrypt to @overload\n", + "15:21:35 | ℹ️ Change decrypt to @overload\n", + "15:21:35 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\n", + "15:21:35 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\n", + "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\n", + "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\esp.pyi\n", + "15:21:36 | ℹ️ Change sleep_type to @overload\n", + "15:21:36 | ℹ️ Change flash_read to @overload\n", + "15:21:36 | ℹ️ Change set_native_code_location to @overload\n", + "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\n", + "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\esp32\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\n", + "15:21:37 | ℹ️ Change readblocks to @overload\n", + "15:21:37 | ℹ️ Change writeblocks to @overload\n", + "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\framebuf\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\n", + "15:21:37 | ℹ️ Change pixel to @overload\n", + "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\gc\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\n", + "15:21:37 | ℹ️ Change threshold to @overload\n", + "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\n", + "15:21:37 | ℹ️ Change __init__ to @overload\n", + "15:21:37 | ℹ️ Change __init__ to @overload\n", + "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\n", + "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\n", + "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\n", + "15:21:38 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", + "15:21:38 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", + "15:21:38 | ℹ️ Merge scratch\\micropython-reference\\lcd160cr\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\n", + "15:21:38 | ℹ️ Change __init__ to @overload\n", + "15:21:39 | ℹ️ Merge scratch\\micropython-reference\\machine\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:39 | ℹ️ Change freq to @overload\n", + "15:21:39 | ℹ️ Change lightsleep to @overload\n", + "15:21:39 | ℹ️ Change deepsleep to @overload\n", + "15:21:39 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADC.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:40 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCBlock.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:40 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCWiPy.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:41 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2C.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:42 | ℹ️ Change __init__ to @overload\n", + "15:21:42 | ℹ️ Change init to @overload\n", + "15:21:42 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2S.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:43 | ℹ️ Merge scratch\\micropython-reference\\machine\\Pin.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:43 | ℹ️ Change value to @overload\n", + "15:21:43 | ℹ️ Change __call__ to @overload\n", + "15:21:43 | ℹ️ Change mode to @overload\n", + "15:21:43 | ℹ️ Change pull to @overload\n", + "15:21:43 | ℹ️ Change drive to @overload\n", + "15:21:43 | ℹ️ Merge scratch\\micropython-reference\\machine\\PWM.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:44 | ℹ️ Change freq to @overload\n", + "15:21:44 | ℹ️ Change duty_u16 to @overload\n", + "15:21:44 | ℹ️ Change duty_ns to @overload\n", + "15:21:44 | ℹ️ Merge scratch\\micropython-reference\\machine\\RTC.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:45 | ℹ️ Change __init__ to @overload\n", + "15:21:45 | ℹ️ Change init to @overload\n", + "15:21:45 | ℹ️ Change alarm to @overload\n", + "15:21:45 | ℹ️ Merge scratch\\micropython-reference\\machine\\SD.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:46 | ℹ️ Merge scratch\\micropython-reference\\machine\\SDCard.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\Signal.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:48 | ℹ️ Change __init__ to @overload\n", + "15:21:48 | ℹ️ Change value to @overload\n", + "15:21:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\SPI.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:49 | ℹ️ Change __init__ to @overload\n", + "15:21:49 | ℹ️ Change init to @overload\n", + "15:21:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\Timer.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:49 | ℹ️ Change __init__ to @overload\n", + "15:21:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\TimerWiPy.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:50 | ℹ️ Merge scratch\\micropython-reference\\machine\\UART.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:51 | ℹ️ Change __init__ to @overload\n", + "15:21:51 | ℹ️ Change init to @overload\n", + "15:21:51 | ℹ️ Change read to @overload\n", + "15:21:51 | ℹ️ Change readinto to @overload\n", + "15:21:52 | ℹ️ Merge scratch\\micropython-reference\\machine\\USBDevice.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:52 | ℹ️ Merge scratch\\micropython-reference\\machine\\WDT.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", + "15:21:53 | ℹ️ Merge scratch\\micropython-reference\\math\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\math.pyi\n", + "15:21:53 | ℹ️ Merge scratch\\micropython-reference\\micropython\\__init__.pyi from\n", + "repos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\n", + "15:21:53 | ℹ️ Change opt_level to @overload\n", + "15:21:53 | ℹ️ Change mem_info to @overload\n", + "15:21:53 | ℹ️ Change qstr_info to @overload\n", + "15:21:53 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\n", + "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\n", + "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "15:21:54 | ℹ️ Change active to @overload\n", + "15:21:54 | ℹ️ Change connect to @overload\n", + "15:21:54 | ℹ️ Change status to @overload\n", + "15:21:54 | ℹ️ Change ifconfig to @overload\n", + "15:21:54 | ℹ️ Change config to @overload\n", + "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "15:21:56 | ℹ️ Change active to @overload\n", + "15:21:56 | ℹ️ Change ifconfig to @overload\n", + "15:21:56 | ℹ️ Change config to @overload\n", + "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "15:21:57 | ℹ️ Change status to @overload\n", + "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", + "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", + "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", + "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", + "15:21:58 | ℹ️ Change __init__ to @overload\n", + "15:21:58 | ℹ️ Change mode to @overload\n", + "15:21:58 | ℹ️ Change ssid to @overload\n", + "15:21:58 | ℹ️ Change auth to @overload\n", + "15:21:58 | ℹ️ Change channel to @overload\n", + "15:21:58 | ℹ️ Change antenna to @overload\n", + "15:21:58 | ℹ️ Change mac to @overload\n", + "15:21:58 | ℹ️ Merge scratch\\micropython-reference\\pyb\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:21:59 | ℹ️ Change freq to @overload\n", + "15:21:59 | ℹ️ Change hid to @overload\n", + "15:21:59 | ℹ️ Change info to @overload\n", + "15:21:59 | ℹ️ Change mount to @overload\n", + "15:21:59 | ℹ️ Change repl_uart to @overload\n", + "15:21:59 | ℹ️ Change usb_mode to @overload\n", + "15:21:59 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Accel.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:00 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ADC.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:02 | ℹ️ Merge scratch\\micropython-reference\\pyb\\CAN.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:04 | ℹ️ Change info to @overload\n", + "15:22:04 | ℹ️ Change setfilter to @overload\n", + "15:22:04 | ℹ️ Change recv to @overload\n", + "15:22:04 | ℹ️ Merge scratch\\micropython-reference\\pyb\\DAC.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:05 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ExtInt.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:08 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Flash.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:09 | ℹ️ Change __init__ to @overload\n", + "15:22:09 | ℹ️ Merge scratch\\micropython-reference\\pyb\\I2C.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:10 | ℹ️ Change mem_read to @overload\n", + "15:22:10 | ℹ️ Change recv to @overload\n", + "15:22:10 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LCD.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:11 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LED.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:13 | ℹ️ Change intensity to @overload\n", + "15:22:13 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Pin.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:14 | ℹ️ Change debug to @overload\n", + "15:22:14 | ℹ️ Change dict to @overload\n", + "15:22:14 | ℹ️ Change mapper to @overload\n", + "15:22:14 | ℹ️ Change value to @overload\n", + "15:22:14 | ℹ️ Merge scratch\\micropython-reference\\pyb\\RTC.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:15 | ℹ️ Change calibration to @overload\n", + "15:22:15 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Servo.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:16 | ℹ️ Change angle to @overload\n", + "15:22:16 | ℹ️ Change speed to @overload\n", + "15:22:16 | ℹ️ Change calibration to @overload\n", + "15:22:16 | ℹ️ Merge scratch\\micropython-reference\\pyb\\SPI.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:18 | ℹ️ Change __init__ to @overload\n", + "15:22:18 | ℹ️ Change init to @overload\n", + "15:22:18 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Switch.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:20 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Timer.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:21 | ℹ️ Change __init__ to @overload\n", + "15:22:21 | ℹ️ Change init to @overload\n", + "15:22:21 | ℹ️ Change channel to @overload\n", + "15:22:21 | ℹ️ Change counter to @overload\n", + "15:22:21 | ℹ️ Change freq to @overload\n", + "15:22:21 | ℹ️ Change period to @overload\n", + "15:22:21 | ℹ️ Change prescaler to @overload\n", + "15:22:21 | ℹ️ Change capture to @overload\n", + "15:22:21 | ℹ️ Change compare to @overload\n", + "15:22:21 | ℹ️ Change pulse_width to @overload\n", + "15:22:21 | ℹ️ Change pulse_width_percent to @overload\n", + "15:22:21 | ℹ️ Merge scratch\\micropython-reference\\pyb\\UART.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:23 | ℹ️ Change __init__ to @overload\n", + "15:22:23 | ℹ️ Change read to @overload\n", + "15:22:23 | ℹ️ Change readinto to @overload\n", + "15:22:24 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_HID.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:25 | ℹ️ Change recv to @overload\n", + "15:22:25 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_VCP.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", + "15:22:27 | ℹ️ Change read to @overload\n", + "15:22:27 | ℹ️ Change readinto to @overload\n", + "15:22:27 | ℹ️ Change recv to @overload\n", + "15:22:27 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", + "15:22:27 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", + "15:22:27 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", + "15:22:27 | ℹ️ Change makefile to @overload\n", + "15:22:27 | ℹ️ Change read to @overload\n", + "15:22:27 | ℹ️ Change readinto to @overload\n", + "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", + "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", + "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\stm\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\n", + "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\uctypes\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\n", + "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", + "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n", + "15:22:31 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", + "15:22:31 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", + "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n" ] } ], "source": [ - "\n", - "# # Merge redacted typehints from IntelliJ plugin with docstubs\n", - "!stubber enrich --params-only --stubs scratch --docstubs {overload_typestubs}\n", - "\n", - "# !stubber enrich --params-only --stubs D:\\mypython\\micropython-stubber\\scratch\\micropython-v1_23_0-docstubs\\machine\\ADC.pyi --docstubs repos\\intellij-micropython\\typehints\n", - "\n" + "## Merge redacted typehints from the overload source with docstubs\n", + "!stubber enrich --params-only --stubs scratch --docstubs {overload_typestubs}\n" ] }, { @@ -989,13 +992,7 @@ "name": "stdout", "output_type": "stream", "text": [ - ".\\repos\\rp2040\\_rp2\\DMA.pyi\n", - ".\\repos\\rp2040\\_rp2\\Flash.pyi\n", - ".\\repos\\rp2040\\_rp2\\irq.pyi\n", - ".\\repos\\rp2040\\_rp2\\PIO.pyi\n", - ".\\repos\\rp2040\\_rp2\\StateMachine.pyi\n", - ".\\repos\\rp2040\\_rp2\\__init__.pyi\n", - " 6 file(s) copied.\n" + "The system cannot find the path specified.\n" ] } ], @@ -1006,18 +1003,59 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 8, "metadata": {}, + "outputs": [], "source": [ - "Replace the `import u` with `import module`" + "import shutil\n", + "\n", + "\n", + "manual_p = Path(\"repos\\\\micropython-stubs\\\\stubs\\\\_manual\")\n", + "# rp2040_p = Path(\"repos\\\\rp2040\")\n", + "\n", + "\n", + "# copy _mpy_shed to the reference folder\n", + "def copy_module(module: str | Path, src: Path = manual_p):\n", + " target = reference_p / module\n", + " if target.exists():\n", + " shutil.rmtree(target)\n", + " if (src / module).is_dir():\n", + " shutil.copytree(src / module, target)\n", + " else:\n", + " shutil.copy(src / module, target)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "## Copy _mpy_shed to the reference folder\n", + "copy_module(\"_mpy_shed\", manual_p)\n", + "copy_module(\"_thread\", manual_p)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Add rp2 modules ( may be an overkill?)\n", + "# copy_module(\"rp2\", manual_p/ \"rpi\")\n", + "copy_module(\"_rp2\", manual_p / \"rpi\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ + "# fix u-module imports and replace stdlib imports with _mpy_shed\n", + "\n", "from pathlib import Path\n", "\n", "\n", @@ -1030,18 +1068,27 @@ " \"from utime import\",\n", "]\n", "\n", + "\n", "NO_IMPORT = [\n", " \"from io import AnyReadableBuf\",\n", " \"from io import AnyWritableBuf\",\n", + " \"from uio import AnyReadableBuf\",\n", + " \"from uio import AnyWritableBuf\",\n", "]\n", "\n", + "\n", "REPLACE = [\n", " (\"from os import AbstractBlockDev\", \"from _mpy_shed import AbstractBlockDev\"),\n", + " (\"from io import IOBase\", \"from _mpy_shed import IOBase\"),\n", + " (\"from uio import IOBase\", \"from _mpy_shed import IOBase\"),\n", "]\n", "\n", + "\n", "# Iterate over all files in the directory\n", "# reference_p = Path(\"scratch/micropython-v1_23_0-docstubs\")\n", - "for file in reference_p.glob(\"**/*\"):\n", + "\n", + "\n", + "for file in reference_p.rglob(\"*.p*\"):\n", " # Check if the file is a regular file\n", " if file.is_file():\n", " # Open the file in read mode\n", @@ -1053,18 +1100,25 @@ " with file.open(mode=\"w\", encoding=\"utf-8\") as f:\n", " # Iterate over each line in the file\n", " for line in lines:\n", + " if \"import\" not in line:\n", + " f.write(line)\n", + " continue\n", + "\n", " # Check if the line starts with\n", " if any(line.startswith(l) for l in UMOD_TO_UMOD):\n", " # Modify the line to remove the `u` prefix\n", " line = \"from \" + line[6:]\n", + "\n", + " # always replace the imports\n", + " for old, new in REPLACE:\n", + " if line.startswith(old):\n", + " line = f\"{new}\\n\"\n", + " break\n", + "\n", " if any(line.startswith(l) for l in NO_IMPORT):\n", " # remove the line\n", " # line = \"# \" + line\n", " line = \"\"\n", - " for old, new in REPLACE:\n", - " if line.startswith(old):\n", - " line = new\n", - " break\n", "\n", " # Write the modified line to the file\n", " f.write(line)" @@ -1072,416 +1126,69 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], + "source": [ + "# sanity check on formatting\n", + "! ruff check scratch\\micropython-reference --ignore F4 --ignore UP0 --ignore F811 " + ] + }, + { + "cell_type": "code", + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "HASH_CLASS = '''\n", - "\n", - "class _Hash(ABC):\n", - " \"\"\"\n", - " Abstract base class for hashing algorithms that defines methods available in all algorithms.\n", - " \"\"\"\n", - "\n", - " def update(self, data: AnyReadableBuf, /) -> None:\n", - " \"\"\"\n", - " Feed more binary data into hash.\n", - " \"\"\"\n", + "# Add missing HASH class to hashlib\n", "\n", - " def digest(self) -> bytes:\n", - " \"\"\"\n", - " Return hash for all data passed through hash, as a bytes object. After this\n", - " method is called, more data cannot be fed into the hash any longer.\n", - " \"\"\"\n", + "HASH_CLASS = open(manual_p / \"partial_modules\" / \"hashlib.pyi\").read()\n", "\n", - " def hexdigest(self) -> str:\n", - " \"\"\"\n", - " This method is NOT implemented. Use ``binascii.hexlify(hash.digest())``\n", - " to achieve a similar effect.\n", - " \"\"\"\n", "\n", - "'''\n", - "# append this to scratch\\micropython-v1_23_0-docstubs\\hashlib\\__init__.pyi if it does not exist\n", "with open(reference_p / \"hashlib/__init__.pyi\", \"a\") as f:\n", + "\n", " f.write(HASH_CLASS)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ - "MPY_SHED = '''\n", - "# Some base types to be used in the stubs\n", - "\n", - "from __future__ import annotations\n", - "\n", - "from abc import abstractmethod\n", - "from typing import Tuple, final, overload, Protocol, Any, runtime_checkable, Literal\n", - "from typing_extensions import TypeVar, TypeAlias\n", - "from array import array\n", - "\n", - "\n", - "AnyReadableBuf : TypeAlias = bytearray | array | memoryview | bytes\n", - "AnyWritableBuf : TypeAlias = bytearray | array | memoryview\n", - "\n", - "StrOrBytesPath: TypeAlias = str | bytes \n", - "# | PathLike[str] | PathLike[bytes]\n", - "# TODO : add the PathLike or GenericPath type\n", - "# from _typeshed import GenericPath\n", - "\n", - "_StrOrBytesT = TypeVar(\"_StrOrBytesT\", str, bytes, covariant=True)\n", - "\n", - "class _PathLike(Protocol[_StrOrBytesT]):\n", - " @abstractmethod\n", - " def __fspath__(self) -> _StrOrBytesT:\n", - " \"\"\"Return the file system path representation of the object, preferably as a `str`.\"\"\"\n", - "\n", - "_AnyPath: TypeAlias = str | bytes | _PathLike[str] | _PathLike[bytes]\n", - "_FdOrAnyPath: TypeAlias = int | _AnyPath\n", - "\n", - "# AbstractBlockDev: TypeAlias = Any\n", - "_OldAbstractReadOnlyBlockDev: TypeAlias = Any\n", - "_OldAbstractBlockDev: TypeAlias = Any\n", - "\n", - "# copied from _typeshed os.pyi as os.pyi cannot import from a module with the same name\n", - "@final\n", - "# class uname_result(structseq[str], tuple[str, str, str, str, str]):\n", - "class uname_result(str, Tuple[str, str, str, str, str]):\n", - " # if sys.version_info >= (3, 8):\n", - " # __match_args__: Final = (\"sysname\", \"nodename\", \"release\", \"version\", \"machine\")\n", - " @property\n", - " def sysname(self) -> str: ...\n", - " @property\n", - " def nodename(self) -> str: ...\n", - " @property\n", - " def release(self) -> str: ...\n", - " @property\n", - " def version(self) -> str: ...\n", - " @property\n", - " def machine(self) -> str: ...\n", - "\n", - "@runtime_checkable\n", - "class AbstractBlockDev(Protocol):\n", - " \"\"\"\n", - " Block devices\n", - " -------------\n", - "\n", - " A block device is an object which implements the block protocol. This enables a\n", - " device to support MicroPython filesystems. The physical hardware is represented\n", - " by a user defined class. The :class:`AbstractBlockDev` class is a template for\n", - " the design of such a class: MicroPython does not actually provide that class,\n", - " but an actual block device class must implement the methods described below.\n", - "\n", - " A concrete implementation of this class will usually allow access to the\n", - " memory-like functionality of a piece of hardware (like flash memory). A block\n", - " device can be formatted to any supported filesystem and mounted using ``os``\n", - " methods.\n", - "\n", - " See :ref:`filesystem` for example implementations of block devices using the\n", - " two variants of the block protocol described below.\n", - "\n", - " .. _block-device-interface:\n", - "\n", - " Simple and extended interface\n", - " .............................\n", - "\n", - " There are two compatible signatures for the ``readblocks`` and ``writeblocks``\n", - " methods (see below), in order to support a variety of use cases. A given block\n", - " device may implement one form or the other, or both at the same time. The second\n", - " form (with the offset parameter) is referred to as the \"extended interface\".\n", - "\n", - " Some filesystems (such as littlefs) that require more control over write\n", - " operations, for example writing to sub-block regions without erasing, may require\n", - " that the block device supports the extended interface.\n", - " \"\"\"\n", - "\n", - " def __init__(self):\n", - " \"\"\"\n", - " Construct a block device object. The parameters to the constructor are\n", - " dependent on the specific block device.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " def readblocks(self, block_num: int, buf: bytearray, /) -> None:\n", - " \"\"\"\n", - " The first form reads aligned, multiples of blocks.\n", - " Starting at the block given by the index *block_num*, read blocks from\n", - " the device into *buf* (an array of bytes).\n", - " The number of blocks to read is given by the length of *buf*,\n", - " which will be a multiple of the block size.\n", - "\n", - " The second form allows reading at arbitrary locations within a block,\n", - " and arbitrary lengths.\n", - " Starting at block index *block_num*, and byte offset within that block\n", - " of *offset*, read bytes from the device into *buf* (an array of bytes).\n", - " The number of bytes to read is given by the length of *buf*.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " def readblocks(self, block_num: int, buf: bytearray, offset: int, /) -> None:\n", - " \"\"\"\n", - " The first form reads aligned, multiples of blocks.\n", - " Starting at the block given by the index *block_num*, read blocks from\n", - " the device into *buf* (an array of bytes).\n", - " The number of blocks to read is given by the length of *buf*,\n", - " which will be a multiple of the block size.\n", - "\n", - " The second form allows reading at arbitrary locations within a block,\n", - " and arbitrary lengths.\n", - " Starting at block index *block_num*, and byte offset within that block\n", - " of *offset*, read bytes from the device into *buf* (an array of bytes).\n", - " The number of bytes to read is given by the length of *buf*.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " def writeblocks(self, block_num: int, buf: bytes | bytearray, /) -> None:\n", - " \"\"\"\n", - " The first form writes aligned, multiples of blocks, and requires that the\n", - " blocks that are written to be first erased (if necessary) by this method.\n", - " Starting at the block given by the index *block_num*, write blocks from\n", - " *buf* (an array of bytes) to the device.\n", - " The number of blocks to write is given by the length of *buf*,\n", - " which will be a multiple of the block size.\n", - "\n", - " The second form allows writing at arbitrary locations within a block,\n", - " and arbitrary lengths. Only the bytes being written should be changed,\n", - " and the caller of this method must ensure that the relevant blocks are\n", - " erased via a prior ``ioctl`` call.\n", - " Starting at block index *block_num*, and byte offset within that block\n", - " of *offset*, write bytes from *buf* (an array of bytes) to the device.\n", - " The number of bytes to write is given by the length of *buf*.\n", - "\n", - " Note that implementations must never implicitly erase blocks if the offset\n", - " argument is specified, even if it is zero.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " def writeblocks(self, block_num: int, buf: bytes | bytearray, offset: int, /) -> None:\n", - " \"\"\"\n", - " The first form writes aligned, multiples of blocks, and requires that the\n", - " blocks that are written to be first erased (if necessary) by this method.\n", - " Starting at the block given by the index *block_num*, write blocks from\n", - " *buf* (an array of bytes) to the device.\n", - " The number of blocks to write is given by the length of *buf*,\n", - " which will be a multiple of the block size.\n", - "\n", - " The second form allows writing at arbitrary locations within a block,\n", - " and arbitrary lengths. Only the bytes being written should be changed,\n", - " and the caller of this method must ensure that the relevant blocks are\n", - " erased via a prior ``ioctl`` call.\n", - " Starting at block index *block_num*, and byte offset within that block\n", - " of *offset*, write bytes from *buf* (an array of bytes) to the device.\n", - " The number of bytes to write is given by the length of *buf*.\n", - "\n", - " Note that implementations must never implicitly erase blocks if the offset\n", - " argument is specified, even if it is zero.\n", - " \"\"\"\n", + "# Add missing PIOASM Emit class to rp2\n", "\n", - " @overload\n", - " def ioctl(self, op: int, arg: int) -> int | None:\n", - " \"\"\"\n", - " Control the block device and query its parameters. The operation to\n", - " perform is given by *op* which is one of the following integers:\n", + "CLASS_PIOASMEMIT = open(manual_p / \"partial_modules\" / \"rp2.pyi\").read()\n", "\n", - " - 1 -- initialise the device (*arg* is unused)\n", - " - 2 -- shutdown the device (*arg* is unused)\n", - " - 3 -- sync the device (*arg* is unused)\n", - " - 4 -- get a count of the number of blocks, should return an integer\n", - " (*arg* is unused)\n", - " - 5 -- get the number of bytes in a block, should return an integer,\n", - " or ``None`` in which case the default value of 512 is used\n", - " (*arg* is unused)\n", - " - 6 -- erase a block, *arg* is the block number to erase\n", "\n", - " As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs\n", - " ``ioctl(6, ...)`` must also be intercepted. The need for others is\n", - " hardware dependent.\n", - "\n", - " Prior to any call to ``writeblocks(block, ...)`` littlefs issues\n", - " ``ioctl(6, block)``. This enables a device driver to erase the block\n", - " prior to a write if the hardware requires it. Alternatively a driver\n", - " might intercept ``ioctl(6, block)`` and return 0 (success). In this case\n", - " the driver assumes responsibility for detecting the need for erasure.\n", - "\n", - " Unless otherwise stated ``ioctl(op, arg)`` can return ``None``.\n", - " Consequently an implementation can ignore unused values of ``op``. Where\n", - " ``op`` is intercepted, the return value for operations 4 and 5 are as\n", - " detailed above. Other operations should return 0 on success and non-zero\n", - " for failure, with the value returned being an ``OSError`` errno code.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " def ioctl(self, op: Literal[4, 5], arg: int) -> int:\n", - " \"\"\"\n", - " Control the block device and query its parameters. The operation to\n", - " perform is given by *op* which is one of the following integers:\n", - "\n", - " - 1 -- initialise the device (*arg* is unused)\n", - " - 2 -- shutdown the device (*arg* is unused)\n", - " - 3 -- sync the device (*arg* is unused)\n", - " - 4 -- get a count of the number of blocks, should return an integer\n", - " (*arg* is unused)\n", - " - 5 -- get the number of bytes in a block, should return an integer,\n", - " or ``None`` in which case the default value of 512 is used\n", - " (*arg* is unused)\n", - " - 6 -- erase a block, *arg* is the block number to erase\n", - "\n", - " As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs\n", - " ``ioctl(6, ...)`` must also be intercepted. The need for others is\n", - " hardware dependent.\n", - "\n", - " Prior to any call to ``writeblocks(block, ...)`` littlefs issues\n", - " ``ioctl(6, block)``. This enables a device driver to erase the block\n", - " prior to a write if the hardware requires it. Alternatively a driver\n", - " might intercept ``ioctl(6, block)`` and return 0 (success). In this case\n", - " the driver assumes responsibility for detecting the need for erasure.\n", - "\n", - " Unless otherwise stated ``ioctl(op, arg)`` can return ``None``.\n", - " Consequently an implementation can ignore unused values of ``op``. Where\n", - " ``op`` is intercepted, the return value for operations 4 and 5 are as\n", - " detailed above. Other operations should return 0 on success and non-zero\n", - " for failure, with the value returned being an ``OSError`` errno code.\n", - " \"\"\"\n", - "\n", - " @overload\n", - " def ioctl(self, op: Literal[1, 2, 3, 6], arg: int) -> int | None:\n", - " \"\"\"\n", - " Control the block device and query its parameters. The operation to\n", - " perform is given by *op* which is one of the following integers:\n", - "\n", - " - 1 -- initialise the device (*arg* is unused)\n", - " - 2 -- shutdown the device (*arg* is unused)\n", - " - 3 -- sync the device (*arg* is unused)\n", - " - 4 -- get a count of the number of blocks, should return an integer\n", - " (*arg* is unused)\n", - " - 5 -- get the number of bytes in a block, should return an integer,\n", - " or ``None`` in which case the default value of 512 is used\n", - " (*arg* is unused)\n", - " - 6 -- erase a block, *arg* is the block number to erase\n", + "# Add missing class\n", "\n", - " As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs\n", - " ``ioctl(6, ...)`` must also be intercepted. The need for others is\n", - " hardware dependent.\n", "\n", - " Prior to any call to ``writeblocks(block, ...)`` littlefs issues\n", - " ``ioctl(6, block)``. This enables a device driver to erase the block\n", - " prior to a write if the hardware requires it. Alternatively a driver\n", - " might intercept ``ioctl(6, block)`` and return 0 (success). In this case\n", - " the driver assumes responsibility for detecting the need for erasure.\n", + "rp2 = Path(reference_p / \"rp2/__init__.pyi\")\n", "\n", - " Unless otherwise stated ``ioctl(op, arg)`` can return ``None``.\n", - " Consequently an implementation can ignore unused values of ``op``. Where\n", - " ``op`` is intercepted, the return value for operations 4 and 5 are as\n", - " detailed above. Other operations should return 0 on success and non-zero\n", - " for failure, with the value returned being an ``OSError`` errno code.\n", - " \"\"\"\n", "\n", - "'''\n", + "with open(rp2, \"a\") as f:\n", "\n", - "from pathlib import Path\n", "\n", - "target = Path(reference_p / \"_mpy_shed/__init__.pyi\")\n", - "target.parent.mkdir(parents=True, exist_ok=True)\n", - "with open(target, \"w\") as f:\n", - " f.write(MPY_SHED)" + " f.write(CLASS_PIOASMEMIT)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "CLASS_PIOASMEMIT = '''\n", - "\n", - "class PIOASMEmit:\n", - " \"\"\"\n", - " The PIOASMEmit class provides a comprehensive interface for constructing PIO programs, \n", - " handling the intricacies of instruction encoding, label management, and program state. \n", - " This allows users to build complex PIO programs in pythone, leveraging the flexibility \n", - " and power of the PIO state machine.\n", - "\n", - " The class should not be instantiated directly, but used via the `@asm_pio` decorator.\n", - " \"\"\" \n", - " labels: Dict\n", - " prog: List\n", - " wrap_used: bool\n", - " sideset_count: int\n", - " delay_max: int\n", - " sideset_opt: bool\n", - " pass_: int\n", - " num_instr: int\n", - " num_sideset: int\n", - " def __init__(\n", - " self,\n", - " *,\n", - " out_init: int | List | None = ...,\n", - " set_init: int | List | None = ...,\n", - " sideset_init: int | List | None = ...,\n", - " in_shiftdir: int = ...,\n", - " out_shiftdir: int = ...,\n", - " autopush: bool = ...,\n", - " autopull: bool = ...,\n", - " push_thresh: int = ...,\n", - " pull_thresh: int = ...,\n", - " fifo_join: int = ...,\n", - " ) -> None: ...\n", - " def __getitem__(self, key): ...\n", - " def start_pass(self, pass_) -> None: \n", - " \"\"\"The start_pass method is used to start a pass over the instructions, \n", - " setting up the necessary state for the pass. It handles wrapping instructions \n", - " if needed and adjusts the delay maximum based on the number of side-set bits. \n", - " \"\"\"\n", - "\n", - " ...\n", - " def delay(self, delay:int): \n", - " \"\"\"\n", - " The delay method allows setting a delay for the current instruction, \n", - " ensuring it does not exceed the maximum allowed delay.\n", - " \"\"\"\n", - " def side(self, value:int): \n", - " \"\"\"\\\n", - " This is a modifier which can be applied to any instruction, and is used to control side-set pin values.\n", - " value: the value (bits) to output on the side-set pins\n", - "\n", - " When an instruction has side 0 next to it, the corresponding output is set LOW, \n", - " and when it has side 1 next to it, the corresponding output is set HIGH. \n", - " There can be up to 5 side-set pins, in which case side N is interpreted as a binary number.\n", - "\n", - " `side(0b00011)` sets the first and the second side-set pin HIGH, and the others LOW.\n", - " \"\"\"\n", - " ...\n", - " def wrap_target(self) -> None: ...\n", - " def wrap(self) -> None: \n", - " \"\"\"\n", - " The wrap method sets the wrap point for the program, ensuring the program loops correctly.\n", - " \"\"\"\n", - " ...\n", - " def label(self, label:str) -> None: ...\n", - " def word(self, instr, label: str | None = ...): ...\n", - " def nop(self): ...\n", - " def jmp(self, cond, label: str | None = ...): ...\n", - " def wait(self, polarity, src, index): ...\n", - " def in_(self, src, data): ...\n", - " def out(self, dest, data): ...\n", - " def push(self, value: int = ..., value2: int = ...): ...\n", - " def pull(self, value: int = ..., value2: int = ...): ...\n", - " def mov(self, dest, src): ...\n", - " def irq(self, mod, index: Incomplete | None = ...): ...\n", - " def set(self, dest, data): ...\n", - "\n", - "'''\n", - "\n", - "# Add missing class\n", - "rp2 = Path(reference_p / \"rp2/__init__.pyi\")\n", - "with open(rp2, \"a\") as f:\n", - " f.write(CLASS_PIOASMEMIT)\n", - "\n", - "\n", "# clean / change rp2 / _rp2\n", - "# remove the submodules to avoid duplication in multiple files\n", + "# remove the submodules to avoid duplication in multiple files\n", "for name in [\"DMA\", \"FLASH\", \"PIO\", \"StateMachine\"]:\n", " submodule = reference_p / f\"rp2/{name}.pyi\"\n", " submodule.unlink(missing_ok=True)\n", @@ -1506,48 +1213,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m74\u001b[36m:\u001b[0m56\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\u001b[1;38;5;12m72 |\u001b[0m _OpenBinaryModeReading: TypeAlias = Literal[\"rb\", \"br\", \"rbU\", \"rUb\", \"Urb\", \"brU\", \"bUr\", \"Ubr\"]\n", - "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", - "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", - "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", - "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\n", - "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m74\u001b[36m:\u001b[0m71\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\u001b[1;38;5;12m72 |\u001b[0m _OpenBinaryModeReading: TypeAlias = Literal[\"rb\", \"br\", \"rbU\", \"rUb\", \"Urb\", \"brU\", \"bUr\", \"Ubr\"]\n", - "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", - "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", - "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", - "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\n", - "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m75\u001b[36m:\u001b[0m46\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", - "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", - "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", - "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\n", - "\u001b[1mscratch\\micropython-reference\\uio.pyi\u001b[0m\u001b[36m:\u001b[0m75\u001b[36m:\u001b[0m61\u001b[36m:\u001b[0m \u001b[1;31mF405\u001b[0m `PathLike` may be undefined, or defined from star imports\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\u001b[1;38;5;12m73 |\u001b[0m _OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting\n", - "\u001b[1;38;5;12m74 |\u001b[0m StrOrBytesPath = TypeVar(\"StrOrBytesPath\", str, bytes, PathLike[str], PathLike[bytes])\n", - "\u001b[1;38;5;12m75 |\u001b[0m _OpenFile = TypeVar(\"_OpenFile\", str, bytes, PathLike[str], PathLike[bytes], int)\n", - "\u001b[1;38;5;12m |\u001b[0m\u001b[1;38;5;9m ^^^^^^^^\u001b[0m \u001b[1;38;5;9mF405\u001b[0m\n", - "\u001b[1;38;5;12m |\u001b[0m\n", - "\n", - "Found 1069 errors (1065 fixed, 4 remaining).\n" + "Found 1064 errors (1064 fixed, 0 remaining).\n" ] } ], @@ -1558,7 +1231,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -1569,14 +1242,15 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uselect.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\usocket.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", @@ -1613,12 +1287,12 @@ "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\USBDevice.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\PPP.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WIZNET5K.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLAN.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLANWiPy.pyi\n", @@ -1626,14 +1300,12 @@ "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ExtInt.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\I2C.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LCD.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\RTC.pyi\n", @@ -1663,7 +1335,9 @@ "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\zsensor.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zlib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\_collections_abc.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\collections\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\Flash.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\StateMachine.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\__init__.pyi\n" @@ -1677,7 +1351,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -1687,122 +1361,22 @@ "WARNING: there is a new pyright version available (v1.1.388 -> v1.1.389).\n", "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", "\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m75\u001b[39m:\u001b[33m56\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m75\u001b[39m:\u001b[33m71\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m76\u001b[39m:\u001b[33m46\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi:\u001b[33m76\u001b[39m:\u001b[33m61\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m22\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m36\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m49\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m49\u001b[39m:\u001b[33m49\u001b[39m - \u001b[31merror\u001b[39m: Type argument for \"Generic\" must be a type variable\u001b[90m (reportInvalidTypeForm)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m306\u001b[39m:\u001b[33m33\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m318\u001b[39m:\u001b[33m55\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m364\u001b[39m:\u001b[33m23\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m378\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m378\u001b[39m:\u001b[33m25\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m402\u001b[39m:\u001b[33m35\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m419\u001b[39m:\u001b[33m38\u001b[39m - \u001b[34minformation\u001b[39m: \"_T\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m458\u001b[39m:\u001b[33m25\u001b[39m - \u001b[34minformation\u001b[39m: \"StreamReader\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi:\u001b[33m458\u001b[39m:\u001b[33m39\u001b[39m - \u001b[34minformation\u001b[39m: \"StreamWriter\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi:\u001b[33m642\u001b[39m:\u001b[33m66\u001b[39m - \u001b[34minformation\u001b[39m: \"_Service\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi:\u001b[33m80\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m32\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m38\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m44\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m50\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi:\u001b[33m74\u001b[39m:\u001b[33m13\u001b[39m - \u001b[34minformation\u001b[39m: \"_C\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m198\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m356\u001b[39m:\u001b[33m59\u001b[39m - \u001b[34minformation\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m400\u001b[39m:\u001b[33m41\u001b[39m - \u001b[34minformation\u001b[39m: \"AnyReadableBuf\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m121\u001b[39m:\u001b[33m40\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m157\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi:\u001b[33m468\u001b[39m:\u001b[33m35\u001b[39m - \u001b[34minformation\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi:\u001b[33m37\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi:\u001b[33m69\u001b[39m:\u001b[33m12\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi:\u001b[33m101\u001b[39m:\u001b[33m11\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m56\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m71\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m153\u001b[39m:\u001b[33m46\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m153\u001b[39m:\u001b[33m61\u001b[39m - \u001b[34minformation\u001b[39m: \"PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m155\u001b[39m:\u001b[33m16\u001b[39m - \u001b[34minformation\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m244\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"IOBase\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m364\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m372\u001b[39m:\u001b[33m71\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m380\u001b[39m:\u001b[33m73\u001b[39m - \u001b[34minformation\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m388\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m396\u001b[39m:\u001b[33m78\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m404\u001b[39m:\u001b[33m73\u001b[39m - \u001b[34minformation\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi:\u001b[33m16\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi:\u001b[33m48\u001b[39m:\u001b[33m58\u001b[39m - \u001b[34minformation\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi:\u001b[33m19\u001b[39m:\u001b[33m17\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_T\" appears only once in generic function signature\n", - "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi:\u001b[33m54\u001b[39m:\u001b[33m27\u001b[39m - \u001b[34minformation\u001b[39m: \"_Color\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi:\u001b[33m67\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"_Color\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m68\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m17\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m23\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m26\u001b[39m:\u001b[33m36\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m33\u001b[39m:\u001b[33m15\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m38\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m53\u001b[39m:\u001b[33m15\u001b[39m - \u001b[31merror\u001b[39m: Argument to class must be a base class\u001b[90m (reportGeneralTypeIssues)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m58\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m110\u001b[39m:\u001b[33m17\u001b[39m - \u001b[34minformation\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m207\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m228\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m333\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m354\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m399\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m405\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m435\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m441\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_PathLike\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m446\u001b[39m:\u001b[33m17\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m452\u001b[39m:\u001b[33m18\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m458\u001b[39m:\u001b[33m17\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m464\u001b[39m:\u001b[33m22\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m464\u001b[39m:\u001b[33m42\u001b[39m - \u001b[34minformation\u001b[39m: \"_AnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m470\u001b[39m:\u001b[33m16\u001b[39m - \u001b[34minformation\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m476\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"_FdOrAnyPath\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi:\u001b[33m528\u001b[39m:\u001b[33m19\u001b[39m - \u001b[34minformation\u001b[39m: \"AbstractBlockDev\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m267\u001b[39m:\u001b[33m43\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m363\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m459\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m556\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m652\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi:\u001b[33m747\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: \"TimerChannel\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi:\u001b[33m107\u001b[39m:\u001b[33m22\u001b[39m - \u001b[34minformation\u001b[39m: \"Subscriptable\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m18\u001b[39m:\u001b[33m20\u001b[39m - \u001b[31merror\u001b[39m: \"Socket\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m126\u001b[39m:\u001b[33m14\u001b[39m - \u001b[31merror\u001b[39m: Variable not allowed in type expression\u001b[90m (reportInvalidTypeForm)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m127\u001b[39m:\u001b[33m15\u001b[39m - \u001b[31merror\u001b[39m: Variable not allowed in type expression\u001b[90m (reportInvalidTypeForm)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi:\u001b[33m128\u001b[39m:\u001b[33m22\u001b[39m - \u001b[31merror\u001b[39m: Expression of type \"Literal['CERT_NONE']\" cannot be assigned to parameter of type \"int\"\n", - "   \"Literal['CERT_NONE']\" is not assignable to \"int\"\u001b[90m (reportArgumentType)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi:\u001b[33m13\u001b[39m:\u001b[33m16\u001b[39m - \u001b[31merror\u001b[39m: \"IOBase\" is unknown import symbol\u001b[90m (reportAttributeAccessIssue)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi:\u001b[33m102\u001b[39m:\u001b[33m47\u001b[39m - \u001b[34minformation\u001b[39m: \"_descriptor\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi:\u001b[33m108\u001b[39m:\u001b[33m29\u001b[39m - \u001b[34minformation\u001b[39m: \"_descriptor\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi:\u001b[33m46\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"PIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m59\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", @@ -1814,7 +1388,7 @@ " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m98\u001b[39m:\u001b[33m50\u001b[39m - \u001b[34minformation\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m38\u001b[39m - \u001b[34minformation\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "15 errors, 1 warning, 87 informations \n" + "0 errors, 0 warnings, 20 informations \n" ] } ], From 6c30b7163718c3e070be5e3698071aa94507610c Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 18 Nov 2024 09:10:04 +0100 Subject: [PATCH 35/57] merge overloads - from hlovatt Signed-off-by: Jos Verlinde --- enrich_tester.ipynb | 1342 ++++++++--------- pyproject.toml | 6 +- src/stubber/rst/lookup.py | 50 +- .../typealias_add/doc_stub.py | 2 +- .../typealias_add/expected.py | 2 +- 5 files changed, 647 insertions(+), 755 deletions(-) diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb index 154b5116..88c7425c 100644 --- a/enrich_tester.ipynb +++ b/enrich_tester.ipynb @@ -6,14 +6,11 @@ "source": [ "Try to merge in overloads from handcoded and other maintainers \n", "----\n", - "\n", "- clone to repos \n", "- new docstubs \n", "- merge in overloads\n", "\n", - "# Merge with the notebook on another branch where I have already seperated out _mpy_shed \n", - "- path repos\\micropython-stubs\\stubs\\_manual\\_mpy_shed\n", - "- but now also changes in this file \n" + "\n" ] }, { @@ -30,15 +27,16 @@ " - cmath has some incorrect type definitions for _C \n", "- [ ] Bug: Imports are copied even if they are inside an if statement (repos\\rp2040\\rp2\\asm_pio.pyi :`from rp2 import PIOASMEmit` ) \n", "- [ ] ? create a method to forcefully copy over a class and all methods while merging \n", + " Q&D Workaround for mow with appending a piece of text.\n", "\n", "\n", "- [x] avoid defining AnyReadableBuf and AnyWritableBuf in multile modules ( _mpy_shed module)\n", "- [x] for now: Include in docstub MODULE_GLUE \n", "- [x] manual addition of some classes\n", - "- [ ] rp2 and _rp2 modules need manual adjustments\n", - " - [ ] there are quite a few classes that are not/partly documented .rst files\n", - " - [ ] the several classes in `_rp2` are documented to be in `rp2` module\n", - " - [ ] `PIOASMEmit` class is missing in `rp2` module\n", + "- [x] rp2 and _rp2 modules need manual adjustments\n", + " - [x] there are quite a few classes that are not/partly documented .rst files\n", + " - [x] the several classes in `_rp2` are documented to be in `rp2` module\n", + " - [x] `PIOASMEmit` class is missing in `rp2` module\n", " - may also need a way to remove a class from a module\n", "\n", "\n", @@ -48,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" @@ -57,20 +55,19 @@ "outputs": [], "source": [ "# set parameters\n", - "\n", "from pathlib import Path\n", "\n", "\n", - "\n", "version = \"v1.24.0\"\n", - "\n", - "\n", "flat_version = version.replace(\".\", \"_\")\n", "\n", - "\n", + "# Destination\n", "reference_p = Path(\"./scratch/micropython-reference\")\n", "\n", - "MIT = False\n", + "# source of manual stubs ( _mpy_shed & rp2 )\n", + "manual_p = Path(\"repos\\\\micropython-stubs\\\\stubs\\\\_manual\")\n", + "\n", + "MIT = True\n", "if MIT:\n", " # Howards Typeshed\n", " overload_typestubs = Path(\"repos\\\\PyBoardTypeshed\\\\micropython_typesheds\")\n", @@ -79,6 +76,26 @@ " overload_typestubs = Path(\"repos\\\\intellij-micropython\\\\typehints\")" ] }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "\n", + "\n", + "# copy _mpy_shed to the reference folder\n", + "def copy_module(module: str | Path, src: Path = manual_p):\n", + " target = reference_p / module\n", + " if target.exists():\n", + " shutil.rmtree(target)\n", + " if (src / module).is_dir():\n", + " shutil.copytree(src / module, target)\n", + " else:\n", + " shutil.copy(src / module, target)" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -92,239 +109,181 @@ "name": "stdout", "output_type": "stream", "text": [ - "Unstaged changes after reset:\n", - "M\tmicropython-reference/_mpy_shed/__init__.pyi\n", - "M\tmicropython-reference/_thread/__init__.pyi\n", - "M\tmicropython-reference/array/__init__.pyi\n", - "M\tmicropython-reference/asyncio/__init__.pyi\n", - "M\tmicropython-reference/binascii/__init__.pyi\n", - "M\tmicropython-reference/bluetooth/__init__.pyi\n", - "M\tmicropython-reference/btree/__init__.pyi\n", - "M\tmicropython-reference/cmath/__init__.pyi\n", - "M\tmicropython-reference/collections/__init__.pyi\n", - "M\tmicropython-reference/cryptolib/__init__.pyi\n", - "M\tmicropython-reference/deflate/__init__.pyi\n", - "M\tmicropython-reference/errno/__init__.pyi\n", - "M\tmicropython-reference/esp/__init__.pyi\n", - "M\tmicropython-reference/esp32/__init__.pyi\n", - "M\tmicropython-reference/espnow/__init__.pyi\n", - "M\tmicropython-reference/framebuf/__init__.pyi\n", - "M\tmicropython-reference/gc/__init__.pyi\n", - "M\tmicropython-reference/gzip/__init__.pyi\n", - "M\tmicropython-reference/hashlib/__init__.pyi\n", - "M\tmicropython-reference/heapq/__init__.pyi\n", - "M\tmicropython-reference/io/__init__.pyi\n", - "M\tmicropython-reference/json/__init__.pyi\n", - "M\tmicropython-reference/lcd160cr/__init__.pyi\n", - "M\tmicropython-reference/machine/Pin.pyi\n", - "M\tmicropython-reference/machine/UART.pyi\n", - "M\tmicropython-reference/machine/USBDevice.pyi\n", - "M\tmicropython-reference/machine/__init__.pyi\n", - "M\tmicropython-reference/math/__init__.pyi\n", - "M\tmicropython-reference/micropython/__init__.pyi\n", - "M\tmicropython-reference/modules.json\n", - "M\tmicropython-reference/neopixel/__init__.pyi\n", - "M\tmicropython-reference/network/WIZNET5K.pyi\n", - "M\tmicropython-reference/network/WLAN.pyi\n", - "M\tmicropython-reference/network/WLANWiPy.pyi\n", - "M\tmicropython-reference/network/__init__.pyi\n", - "M\tmicropython-reference/openamp/__init__.pyi\n", - "M\tmicropython-reference/os/__init__.pyi\n", - "M\tmicropython-reference/platform/__init__.pyi\n", - "M\tmicropython-reference/pyb/__init__.pyi\n", - "M\tmicropython-reference/random/__init__.pyi\n", - "M\tmicropython-reference/rp2/__init__.pyi\n", - "M\tmicropython-reference/select/__init__.pyi\n", - "M\tmicropython-reference/socket/__init__.pyi\n", - "M\tmicropython-reference/ssl/__init__.pyi\n", - "M\tmicropython-reference/stm/__init__.pyi\n", - "M\tmicropython-reference/struct/__init__.pyi\n", - "M\tmicropython-reference/sys/__init__.pyi\n", - "M\tmicropython-reference/time/__init__.pyi\n", - "M\tmicropython-reference/uctypes/__init__.pyi\n", - "M\tmicropython-reference/vfs/__init__.pyi\n", - "M\tmicropython-reference/wipy/__init__.pyi\n", - "M\tmicropython-reference/zephyr/__init__.pyi\n", - "M\tmicropython-reference/zephyr/zsensor.pyi\n", - "M\tmicropython-reference/zlib/__init__.pyi\n", - "Removing micropython-reference/_mpy_shed/_collections_abc.pyi\n", - "Removing micropython-reference/_mpy_shed/collections/\n", - "Removing micropython-reference/network/PPP.pyi\n", - "15:21:01 | ℹ️ micropython-stubber 1.23.2a0\n", - "15:21:01 | ℹ️ fetch updates\n", - "15:21:03 | ℹ️ Switching to v1.24.0\n", - "15:21:06 | ℹ️ repos\\micropython v1.24.0-dirty\n", - "15:21:06 | ℹ️ repos\\micropython-lib v1.24.0\n", - "15:21:06 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.24.0\n", - "15:21:06 | ℹ️ Get docstubs for MicroPython v1.24.0\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:01 | ℹ️ micropython-stubber 1.23.2a0\n", + "08:42:01 | ℹ️ fetch updates\n", + "08:42:04 | ℹ️ Switching to v1.24.0\n", + "08:42:07 | ℹ️ repos\\micropython v1.24.0-dirty\n", + "08:42:07 | ℹ️ repos\\micropython-lib v1.24.0\n", + "08:42:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.24.0\n", + "08:42:08 | ℹ️ Get docstubs for MicroPython v1.24.0\n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\array\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\asyncio\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\binascii\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\bluetooth\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\btree\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\cmath\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\collections\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\cryptolib\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\deflate\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\errno\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\esp\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\esp32\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\espnow\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\framebuf\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\gc\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\gzip\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\hashlib\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\heapq\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\io\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\json\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\lcd160cr\\__init__.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi\n", - "15:21:06 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\UART.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\USBDevice.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\math\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\micropython\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\neopixel\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\LAN.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\PPP.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\openamp\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\os\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\platform\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\random\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi\n", - "15:21:07 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi\n", + "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi\n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\select\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\stm\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:08 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\sys\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\time\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\uctypes\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\vfs\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\wipy\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\wm8960\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi\n", - "15:21:07 | ℹ️ - Writing to: \n", + "08:42:09 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\_thread\\__init__.pyi\n", - "15:21:07 | ℹ️ ::group:: start post processing of retrieved stubs\n", - "15:21:10 | ℹ️ ::group:: Done\n" + "08:42:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "08:42:13 | ℹ️ ::group:: Done\n" ] }, { @@ -333,99 +292,99 @@ "text": [ "Skipping .ipynb files as Jupyter dependencies are not installed.\n", "You can fix this by running ``pip install \"black[jupyter]\"``\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_thread\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\collections\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cryptolib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\deflate\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\errno\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\binascii\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gzip\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gc\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gc\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\binascii\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\heapq\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gzip\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCBlock.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2S.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2C.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\PWM.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCWiPy.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\lcd160cr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SD.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Pin.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cryptolib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\PWM.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SDCard.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2C.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Signal.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Timer.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SPI.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\USBDevice.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WIZNET5K.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\PPP.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\PPP.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLANWiPy.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ExtInt.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLANWiPy.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LCD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\RTC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\I2C.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Servo.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\SPI.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Switch.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_HID.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\SPI.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\Flash.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\DMA.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\UART.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_VCP.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\select\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\Flash.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\StateMachine.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\DMA.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\select\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\struct\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\StateMachine.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wipy\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\DiskAccess.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\time\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\FlashArea.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\vfs\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zlib\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\zsensor.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\zsensor.pyi\n", "\n", "All done! ✨ 🍰 ✨\n", "93 files reformatted, 11 files left unchanged.\n" @@ -461,106 +420,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Unstaged changes after reset:\n", - "D\tmicropython-reference/_mpy_shed/__init__.pyi\n", - "D\tmicropython-reference/_rp2/DMA.pyi\n", - "D\tmicropython-reference/_rp2/Flash.pyi\n", - "D\tmicropython-reference/_rp2/PIO.pyi\n", - "D\tmicropython-reference/_rp2/StateMachine.pyi\n", - "D\tmicropython-reference/_rp2/__init__.pyi\n", - "D\tmicropython-reference/_rp2/irq.pyi\n", - "M\tmicropython-reference/_thread/__init__.pyi\n", - "M\tmicropython-reference/array/__init__.pyi\n", - "M\tmicropython-reference/asyncio/__init__.pyi\n", - "M\tmicropython-reference/binascii/__init__.pyi\n", - "M\tmicropython-reference/bluetooth/__init__.pyi\n", - "M\tmicropython-reference/btree/__init__.pyi\n", - "M\tmicropython-reference/cmath/__init__.pyi\n", - "M\tmicropython-reference/collections/__init__.pyi\n", - "M\tmicropython-reference/cryptolib/__init__.pyi\n", - "M\tmicropython-reference/deflate/__init__.pyi\n", - "M\tmicropython-reference/errno/__init__.pyi\n", - "M\tmicropython-reference/esp/__init__.pyi\n", - "M\tmicropython-reference/esp32/__init__.pyi\n", - "M\tmicropython-reference/espnow/__init__.pyi\n", - "M\tmicropython-reference/framebuf/__init__.pyi\n", - "M\tmicropython-reference/gc/__init__.pyi\n", - "M\tmicropython-reference/gzip/__init__.pyi\n", - "M\tmicropython-reference/hashlib/__init__.pyi\n", - "M\tmicropython-reference/heapq/__init__.pyi\n", - "M\tmicropython-reference/io/__init__.pyi\n", - "M\tmicropython-reference/json/__init__.pyi\n", - "M\tmicropython-reference/lcd160cr/__init__.pyi\n", - "M\tmicropython-reference/machine/ADC.pyi\n", - "M\tmicropython-reference/machine/ADCBlock.pyi\n", - "M\tmicropython-reference/machine/ADCWiPy.pyi\n", - "M\tmicropython-reference/machine/I2C.pyi\n", - "M\tmicropython-reference/machine/I2S.pyi\n", - "M\tmicropython-reference/machine/PWM.pyi\n", - "M\tmicropython-reference/machine/Pin.pyi\n", - "M\tmicropython-reference/machine/RTC.pyi\n", - "M\tmicropython-reference/machine/SD.pyi\n", - "M\tmicropython-reference/machine/SDCard.pyi\n", - "M\tmicropython-reference/machine/SPI.pyi\n", - "M\tmicropython-reference/machine/Signal.pyi\n", - "M\tmicropython-reference/machine/Timer.pyi\n", - "M\tmicropython-reference/machine/TimerWiPy.pyi\n", - "M\tmicropython-reference/machine/UART.pyi\n", - "M\tmicropython-reference/machine/USBDevice.pyi\n", - "M\tmicropython-reference/machine/WDT.pyi\n", - "M\tmicropython-reference/machine/__init__.pyi\n", - "M\tmicropython-reference/math/__init__.pyi\n", - "M\tmicropython-reference/micropython/__init__.pyi\n", - "M\tmicropython-reference/modules.json\n", - "M\tmicropython-reference/neopixel/__init__.pyi\n", - "M\tmicropython-reference/network/LAN.pyi\n", - "M\tmicropython-reference/network/WIZNET5K.pyi\n", - "M\tmicropython-reference/network/WLAN.pyi\n", - "M\tmicropython-reference/network/WLANWiPy.pyi\n", - "M\tmicropython-reference/network/__init__.pyi\n", - "M\tmicropython-reference/openamp/__init__.pyi\n", - "M\tmicropython-reference/os/__init__.pyi\n", - "M\tmicropython-reference/platform/__init__.pyi\n", - "M\tmicropython-reference/pyb/ADC.pyi\n", - "M\tmicropython-reference/pyb/Accel.pyi\n", - "M\tmicropython-reference/pyb/CAN.pyi\n", - "M\tmicropython-reference/pyb/DAC.pyi\n", - "M\tmicropython-reference/pyb/ExtInt.pyi\n", - "M\tmicropython-reference/pyb/Flash.pyi\n", - "M\tmicropython-reference/pyb/I2C.pyi\n", - "M\tmicropython-reference/pyb/LCD.pyi\n", - "M\tmicropython-reference/pyb/LED.pyi\n", - "M\tmicropython-reference/pyb/Pin.pyi\n", - "M\tmicropython-reference/pyb/RTC.pyi\n", - "M\tmicropython-reference/pyb/SPI.pyi\n", - "M\tmicropython-reference/pyb/Servo.pyi\n", - "M\tmicropython-reference/pyb/Switch.pyi\n", - "M\tmicropython-reference/pyb/Timer.pyi\n", - "M\tmicropython-reference/pyb/UART.pyi\n", - "M\tmicropython-reference/pyb/USB_HID.pyi\n", - "M\tmicropython-reference/pyb/USB_VCP.pyi\n", - "M\tmicropython-reference/pyb/__init__.pyi\n", - "M\tmicropython-reference/random/__init__.pyi\n", - "M\tmicropython-reference/rp2/__init__.pyi\n", - "M\tmicropython-reference/select/__init__.pyi\n", - "M\tmicropython-reference/socket/__init__.pyi\n", - "M\tmicropython-reference/ssl/__init__.pyi\n", - "M\tmicropython-reference/stm/__init__.pyi\n", - "M\tmicropython-reference/struct/__init__.pyi\n", - "M\tmicropython-reference/sys/__init__.pyi\n", - "M\tmicropython-reference/time/__init__.pyi\n", - "M\tmicropython-reference/uctypes/__init__.pyi\n", - "M\tmicropython-reference/uselect.pyi\n", - "M\tmicropython-reference/usocket.pyi\n", - "M\tmicropython-reference/vfs/__init__.pyi\n", - "M\tmicropython-reference/wipy/__init__.pyi\n", - "M\tmicropython-reference/wm8960/__init__.pyi\n", - "M\tmicropython-reference/zephyr/DiskAccess.pyi\n", - "M\tmicropython-reference/zephyr/FlashArea.pyi\n", - "M\tmicropython-reference/zephyr/__init__.pyi\n", - "M\tmicropython-reference/zephyr/zsensor.pyi\n", - "M\tmicropython-reference/zlib/__init__.pyi\n", - "15:21:21 | ℹ️ micropython-stubber 1.23.2a0\n" + "08:42:26 | ℹ️ micropython-stubber 1.23.2a0" ] }, { @@ -577,10 +437,17 @@ "└─────────────────────────────────────────────────────────────────────────────┘\n", " \n" ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] } ], "source": [ - "! git -C scratch reset .\n", + "# ! git -C scratch reset .\n", "# assume root of workspace is the current directory\n", "\n", "# pull in josverl's handcoded rp2040 stubs\n", @@ -614,349 +481,346 @@ "name": "stdout", "output_type": "stream", "text": [ - "15:21:31 | ℹ️ micropython-stubber 1.23.2a0\n", - "15:21:31 | ℹ️ Enriching scratch with repos\\intellij-micropython\\typehints\n", - "15:21:31 | ℹ️ Enrich folder scratch.\n", - "15:21:31 | ℹ️ Merge scratch\\micropython-reference\\_thread\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\_thread.pyi\n", - "15:21:31 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", - "15:21:31 | ℹ️ Change __getitem__ to @overload\n", - "15:21:31 | ℹ️ Change __setitem__ to @overload\n", - "15:21:31 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", - "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\asyncio\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uasyncio.pyi\n", - "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", - "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", - "15:21:32 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\bluetooth.pyi\n", - "15:21:33 | ℹ️ Change active to @overload\n", - "15:21:33 | ℹ️ Change config to @overload\n", - "15:21:33 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\ubluetooth.pyi\n", - "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\btree\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\btree.pyi\n", - "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\cmath\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\cmath.pyi\n", - "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", - "repos\\intellij-micropython\\typehints\\stdlib\\collections.pyi\n", - "15:21:34 | ℹ️ Change __init__ to @overload\n", - "15:21:34 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", - "repos\\intellij-micropython\\typehints\\stdlib\\ucollections.pyi\n", - "15:21:35 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\cryptolib.pyi\n", - "15:21:35 | ℹ️ Change __init__ to @overload\n", - "15:21:35 | ℹ️ Change encrypt to @overload\n", - "15:21:35 | ℹ️ Change decrypt to @overload\n", - "15:21:35 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\ucryptolib.pyi\n", - "15:21:35 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\errno.pyi\n", - "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uerrno.pyi\n", - "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\esp.pyi\n", - "15:21:36 | ℹ️ Change sleep_type to @overload\n", - "15:21:36 | ℹ️ Change flash_read to @overload\n", - "15:21:36 | ℹ️ Change set_native_code_location to @overload\n", - "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\esp.pyi\n", - "15:21:36 | ℹ️ Merge scratch\\micropython-reference\\esp32\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\esp32.pyi\n", - "15:21:37 | ℹ️ Change readblocks to @overload\n", - "15:21:37 | ℹ️ Change writeblocks to @overload\n", - "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\framebuf\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\framebuf.pyi\n", - "15:21:37 | ℹ️ Change pixel to @overload\n", - "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\gc\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\gc.pyi\n", - "15:21:37 | ℹ️ Change threshold to @overload\n", - "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\hashlib.pyi\n", - "15:21:37 | ℹ️ Change __init__ to @overload\n", - "15:21:37 | ℹ️ Change __init__ to @overload\n", - "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uhashlib.pyi\n", - "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\heapq.pyi\n", - "15:21:37 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uheapq.pyi\n", - "15:21:38 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", - "15:21:38 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", - "15:21:38 | ℹ️ Merge scratch\\micropython-reference\\lcd160cr\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\lcd160cr.pyi\n", - "15:21:38 | ℹ️ Change __init__ to @overload\n", - "15:21:39 | ℹ️ Merge scratch\\micropython-reference\\machine\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:39 | ℹ️ Change freq to @overload\n", - "15:21:39 | ℹ️ Change lightsleep to @overload\n", - "15:21:39 | ℹ️ Change deepsleep to @overload\n", - "15:21:39 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADC.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:40 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCBlock.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:40 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCWiPy.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:41 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2C.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:42 | ℹ️ Change __init__ to @overload\n", - "15:21:42 | ℹ️ Change init to @overload\n", - "15:21:42 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2S.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:43 | ℹ️ Merge scratch\\micropython-reference\\machine\\Pin.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:43 | ℹ️ Change value to @overload\n", - "15:21:43 | ℹ️ Change __call__ to @overload\n", - "15:21:43 | ℹ️ Change mode to @overload\n", - "15:21:43 | ℹ️ Change pull to @overload\n", - "15:21:43 | ℹ️ Change drive to @overload\n", - "15:21:43 | ℹ️ Merge scratch\\micropython-reference\\machine\\PWM.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:44 | ℹ️ Change freq to @overload\n", - "15:21:44 | ℹ️ Change duty_u16 to @overload\n", - "15:21:44 | ℹ️ Change duty_ns to @overload\n", - "15:21:44 | ℹ️ Merge scratch\\micropython-reference\\machine\\RTC.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:45 | ℹ️ Change __init__ to @overload\n", - "15:21:45 | ℹ️ Change init to @overload\n", - "15:21:45 | ℹ️ Change alarm to @overload\n", - "15:21:45 | ℹ️ Merge scratch\\micropython-reference\\machine\\SD.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:46 | ℹ️ Merge scratch\\micropython-reference\\machine\\SDCard.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\Signal.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:48 | ℹ️ Change __init__ to @overload\n", - "15:21:48 | ℹ️ Change value to @overload\n", - "15:21:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\SPI.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:49 | ℹ️ Change __init__ to @overload\n", - "15:21:49 | ℹ️ Change init to @overload\n", - "15:21:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\Timer.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:49 | ℹ️ Change __init__ to @overload\n", - "15:21:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\TimerWiPy.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:50 | ℹ️ Merge scratch\\micropython-reference\\machine\\UART.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:51 | ℹ️ Change __init__ to @overload\n", - "15:21:51 | ℹ️ Change init to @overload\n", - "15:21:51 | ℹ️ Change read to @overload\n", - "15:21:51 | ℹ️ Change readinto to @overload\n", - "15:21:52 | ℹ️ Merge scratch\\micropython-reference\\machine\\USBDevice.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:52 | ℹ️ Merge scratch\\micropython-reference\\machine\\WDT.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\machine.pyi\n", - "15:21:53 | ℹ️ Merge scratch\\micropython-reference\\math\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\math.pyi\n", - "15:21:53 | ℹ️ Merge scratch\\micropython-reference\\micropython\\__init__.pyi from\n", - "repos\\intellij-micropython\\typehints\\micropython\\micropython.pyi\n", - "15:21:53 | ℹ️ Change opt_level to @overload\n", - "15:21:53 | ℹ️ Change mem_info to @overload\n", - "15:21:53 | ℹ️ Change qstr_info to @overload\n", - "15:21:53 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\microbit\\neopixel.pyi\n", - "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\neopixel.pyi\n", - "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "15:21:54 | ℹ️ Change active to @overload\n", - "15:21:54 | ℹ️ Change connect to @overload\n", - "15:21:54 | ℹ️ Change status to @overload\n", - "15:21:54 | ℹ️ Change ifconfig to @overload\n", - "15:21:54 | ℹ️ Change config to @overload\n", - "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "15:21:54 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "15:21:55 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "15:21:56 | ℹ️ Change active to @overload\n", - "15:21:56 | ℹ️ Change ifconfig to @overload\n", - "15:21:56 | ℹ️ Change config to @overload\n", - "15:21:56 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "15:21:57 | ℹ️ Change status to @overload\n", - "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp32\\network.pyi\n", - "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", - "repos\\intellij-micropython\\typehints\\esp8266\\network.pyi\n", - "15:21:57 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\network.pyi\n", - "15:21:58 | ℹ️ Change __init__ to @overload\n", - "15:21:58 | ℹ️ Change mode to @overload\n", - "15:21:58 | ℹ️ Change ssid to @overload\n", - "15:21:58 | ℹ️ Change auth to @overload\n", - "15:21:58 | ℹ️ Change channel to @overload\n", - "15:21:58 | ℹ️ Change antenna to @overload\n", - "15:21:58 | ℹ️ Change mac to @overload\n", - "15:21:58 | ℹ️ Merge scratch\\micropython-reference\\pyb\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:21:59 | ℹ️ Change freq to @overload\n", - "15:21:59 | ℹ️ Change hid to @overload\n", - "15:21:59 | ℹ️ Change info to @overload\n", - "15:21:59 | ℹ️ Change mount to @overload\n", - "15:21:59 | ℹ️ Change repl_uart to @overload\n", - "15:21:59 | ℹ️ Change usb_mode to @overload\n", - "15:21:59 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Accel.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:00 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ADC.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:02 | ℹ️ Merge scratch\\micropython-reference\\pyb\\CAN.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:04 | ℹ️ Change info to @overload\n", - "15:22:04 | ℹ️ Change setfilter to @overload\n", - "15:22:04 | ℹ️ Change recv to @overload\n", - "15:22:04 | ℹ️ Merge scratch\\micropython-reference\\pyb\\DAC.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:05 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ExtInt.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:08 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Flash.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:09 | ℹ️ Change __init__ to @overload\n", - "15:22:09 | ℹ️ Merge scratch\\micropython-reference\\pyb\\I2C.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:10 | ℹ️ Change mem_read to @overload\n", - "15:22:10 | ℹ️ Change recv to @overload\n", - "15:22:10 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LCD.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:11 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LED.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:13 | ℹ️ Change intensity to @overload\n", - "15:22:13 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Pin.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:14 | ℹ️ Change debug to @overload\n", - "15:22:14 | ℹ️ Change dict to @overload\n", - "15:22:14 | ℹ️ Change mapper to @overload\n", - "15:22:14 | ℹ️ Change value to @overload\n", - "15:22:14 | ℹ️ Merge scratch\\micropython-reference\\pyb\\RTC.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:15 | ℹ️ Change calibration to @overload\n", - "15:22:15 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Servo.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:16 | ℹ️ Change angle to @overload\n", - "15:22:16 | ℹ️ Change speed to @overload\n", - "15:22:16 | ℹ️ Change calibration to @overload\n", - "15:22:16 | ℹ️ Merge scratch\\micropython-reference\\pyb\\SPI.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:18 | ℹ️ Change __init__ to @overload\n", - "15:22:18 | ℹ️ Change init to @overload\n", - "15:22:18 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Switch.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:20 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Timer.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:21 | ℹ️ Change __init__ to @overload\n", - "15:22:21 | ℹ️ Change init to @overload\n", - "15:22:21 | ℹ️ Change channel to @overload\n", - "15:22:21 | ℹ️ Change counter to @overload\n", - "15:22:21 | ℹ️ Change freq to @overload\n", - "15:22:21 | ℹ️ Change period to @overload\n", - "15:22:21 | ℹ️ Change prescaler to @overload\n", - "15:22:21 | ℹ️ Change capture to @overload\n", - "15:22:21 | ℹ️ Change compare to @overload\n", - "15:22:21 | ℹ️ Change pulse_width to @overload\n", - "15:22:21 | ℹ️ Change pulse_width_percent to @overload\n", - "15:22:21 | ℹ️ Merge scratch\\micropython-reference\\pyb\\UART.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:23 | ℹ️ Change __init__ to @overload\n", - "15:22:23 | ℹ️ Change read to @overload\n", - "15:22:23 | ℹ️ Change readinto to @overload\n", - "15:22:24 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_HID.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:25 | ℹ️ Change recv to @overload\n", - "15:22:25 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_VCP.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\pyb.pyi\n", - "15:22:27 | ℹ️ Change read to @overload\n", - "15:22:27 | ℹ️ Change readinto to @overload\n", - "15:22:27 | ℹ️ Change recv to @overload\n", - "15:22:27 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", - "15:22:27 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", - "15:22:27 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", - "15:22:27 | ℹ️ Change makefile to @overload\n", - "15:22:27 | ℹ️ Change read to @overload\n", - "15:22:27 | ℹ️ Change readinto to @overload\n", - "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", - "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", - "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\stm\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\pyboard\\stm.pyi\n", - "15:22:28 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\array.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uarray.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\binascii.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ubinascii.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\uctypes\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\micropython\\uctypes.pyi\n", - "15:22:29 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\json.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ujson.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\select.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uselect.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\socket.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\usocket.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ssl.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\struct.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\ustruct.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\time.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\utime.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", - "15:22:30 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n", - "15:22:31 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\uzlib.pyi\n", - "15:22:31 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", - "repos\\intellij-micropython\\typehints\\stdlib\\zlib.pyi\n" + "08:42:39 | ℹ️ micropython-stubber 1.23.2a0\n", + "08:42:39 | ℹ️ Enriching scratch with repos\\PyBoardTypeshed\\micropython_typesheds\n", + "08:42:39 | ℹ️ Enrich folder scratch.\n", + "08:42:40 | ℹ️ Merge scratch\\micropython-reference\\_thread\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\_thread.pyi\n", + "08:42:40 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\array.pyi\n", + "08:42:40 | ℹ️ Change __getitem__ to @overload\n", + "08:42:40 | ℹ️ Change __setitem__ to @overload\n", + "08:42:40 | ℹ️ Merge scratch\\micropython-reference\\asyncio\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uasyncio.pyi\n", + "08:42:41 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\binascii.pyi\n", + "08:42:41 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ubinascii.pyi\n", + "08:42:41 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\bluetooth.pyi\n", + "08:42:42 | ℹ️ Change active to @overload\n", + "08:42:42 | ℹ️ Change config to @overload\n", + "08:42:42 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ubluetooth.pyi\n", + "08:42:43 | ℹ️ Merge scratch\\micropython-reference\\btree\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\btree.pyi\n", + "08:42:43 | ℹ️ Merge scratch\\micropython-reference\\cmath\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\cmath.pyi\n", + "08:42:43 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\collections.pyi\n", + "08:42:43 | ℹ️ Change __init__ to @overload\n", + "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\cryptolib.pyi\n", + "08:42:44 | ℹ️ Change __init__ to @overload\n", + "08:42:44 | ℹ️ Change encrypt to @overload\n", + "08:42:44 | ℹ️ Change decrypt to @overload\n", + "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ucryptolib.pyi\n", + "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\errno.pyi\n", + "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uerrno.pyi\n", + "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\esp.pyi\n", + "08:42:45 | ℹ️ Change sleep_type to @overload\n", + "08:42:45 | ℹ️ Change flash_read to @overload\n", + "08:42:45 | ℹ️ Change set_native_code_location to @overload\n", + "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\esp32\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\esp32.pyi\n", + "08:42:45 | ℹ️ Change write_pulses to @overload\n", + "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\framebuf\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\framebuf.pyi\n", + "08:42:45 | ℹ️ Change pixel to @overload\n", + "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\gc\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\gc.pyi\n", + "08:42:45 | ℹ️ Change threshold to @overload\n", + "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\hashlib.pyi\n", + "08:42:46 | ℹ️ Change __init__ to @overload\n", + "08:42:46 | ℹ️ Change __init__ to @overload\n", + "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uhashlib.pyi\n", + "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\heapq.pyi\n", + "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\io\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uio.pyi\n", + "08:42:46 | ℹ️ Change __init__ to @overload\n", + "08:42:46 | ℹ️ Change __init__ to @overload\n", + "08:42:46 | ℹ️ Change open to @overload\n", + "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\json.pyi\n", + "08:42:47 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ujson.pyi\n", + "08:42:47 | ℹ️ Merge scratch\\micropython-reference\\lcd160cr\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\lcd160cr.pyi\n", + "08:42:47 | ℹ️ Change __init__ to @overload\n", + "08:42:47 | ℹ️ Merge scratch\\micropython-reference\\machine\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:48 | ℹ️ Change freq to @overload\n", + "08:42:48 | ℹ️ Change lightsleep to @overload\n", + "08:42:48 | ℹ️ Change deepsleep to @overload\n", + "08:42:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADC.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCBlock.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:50 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCWiPy.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:51 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2C.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:52 | ℹ️ Change __init__ to @overload\n", + "08:42:53 | ℹ️ Change init to @overload\n", + "08:42:53 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2S.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:54 | ℹ️ Merge scratch\\micropython-reference\\machine\\Pin.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:55 | ℹ️ Change value to @overload\n", + "08:42:55 | ℹ️ Change __call__ to @overload\n", + "08:42:55 | ℹ️ Change mode to @overload\n", + "08:42:55 | ℹ️ Change pull to @overload\n", + "08:42:55 | ℹ️ Merge scratch\\micropython-reference\\machine\\PWM.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:56 | ℹ️ Change freq to @overload\n", + "08:42:56 | ℹ️ Change duty_u16 to @overload\n", + "08:42:56 | ℹ️ Change duty_ns to @overload\n", + "08:42:56 | ℹ️ Merge scratch\\micropython-reference\\machine\\RTC.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:57 | ℹ️ Change __init__ to @overload\n", + "08:42:57 | ℹ️ Change init to @overload\n", + "08:42:57 | ℹ️ Change alarm to @overload\n", + "08:42:57 | ℹ️ Merge scratch\\micropython-reference\\machine\\SD.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:58 | ℹ️ Merge scratch\\micropython-reference\\machine\\SDCard.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:42:59 | ℹ️ Merge scratch\\micropython-reference\\machine\\Signal.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:00 | ℹ️ Change __init__ to @overload\n", + "08:43:00 | ℹ️ Change value to @overload\n", + "08:43:00 | ℹ️ Merge scratch\\micropython-reference\\machine\\SPI.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:01 | ℹ️ Change __init__ to @overload\n", + "08:43:01 | ℹ️ Change init to @overload\n", + "08:43:01 | ℹ️ Merge scratch\\micropython-reference\\machine\\Timer.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:02 | ℹ️ Change __init__ to @overload\n", + "08:43:02 | ℹ️ Merge scratch\\micropython-reference\\machine\\TimerWiPy.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:03 | ℹ️ Merge scratch\\micropython-reference\\machine\\UART.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:04 | ℹ️ Change __init__ to @overload\n", + "08:43:04 | ℹ️ Change init to @overload\n", + "08:43:04 | ℹ️ Change read to @overload\n", + "08:43:04 | ℹ️ Change readinto to @overload\n", + "08:43:05 | ℹ️ Merge scratch\\micropython-reference\\machine\\USBDevice.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:05 | ℹ️ Merge scratch\\micropython-reference\\machine\\WDT.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", + "08:43:06 | ℹ️ Merge scratch\\micropython-reference\\math\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\math.pyi\n", + "08:43:07 | ℹ️ Merge scratch\\micropython-reference\\micropython\\__init__.pyi from\n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\micropython.pyi\n", + "08:43:07 | ℹ️ Change opt_level to @overload\n", + "08:43:07 | ℹ️ Change mem_info to @overload\n", + "08:43:07 | ℹ️ Change qstr_info to @overload\n", + "08:43:07 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\neopixel.pyi\n", + "08:43:07 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", + "08:43:08 | ℹ️ Change active to @overload\n", + "08:43:08 | ℹ️ Change connect to @overload\n", + "08:43:08 | ℹ️ Change status to @overload\n", + "08:43:08 | ℹ️ Change ifconfig to @overload\n", + "08:43:08 | ℹ️ Change config to @overload\n", + "08:43:08 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", + "08:43:08 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", + "08:43:09 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", + "08:43:09 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", + "08:43:10 | ℹ️ Change active to @overload\n", + "08:43:10 | ℹ️ Change status to @overload\n", + "08:43:10 | ℹ️ Change ifconfig to @overload\n", + "08:43:10 | ℹ️ Change config to @overload\n", + "08:43:10 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", + "08:43:10 | ℹ️ Change __init__ to @overload\n", + "08:43:10 | ℹ️ Change mode to @overload\n", + "08:43:10 | ℹ️ Change ssid to @overload\n", + "08:43:10 | ℹ️ Change auth to @overload\n", + "08:43:10 | ℹ️ Change channel to @overload\n", + "08:43:10 | ℹ️ Change antenna to @overload\n", + "08:43:10 | ℹ️ Change mac to @overload\n", + "08:43:11 | ℹ️ Merge scratch\\micropython-reference\\os\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi\n", + "08:43:11 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "Syntax Error @ 26:1.\n", + "parser error: error at 25:0: expected NAME\n", + "\n", + "from typing_extensions import TypeAlias\n", + " ^\n", + "08:43:11 | ❌ Error parsing scratch\\micropython-reference\\os\\__init__.pyi\n", + "08:43:11 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "Syntax Error @ 26:1.\n", + "parser error: error at 25:0: expected NAME\n", + "\n", + "from typing_extensions import TypeAlias\n", + " ^\n", + "08:43:11 | ℹ️ Merge scratch\\micropython-reference\\pyb\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:13 | ℹ️ Change freq to @overload\n", + "08:43:13 | ℹ️ Change hid to @overload\n", + "08:43:13 | ℹ️ Change info to @overload\n", + "08:43:13 | ℹ️ Change mount to @overload\n", + "08:43:13 | ℹ️ Change repl_uart to @overload\n", + "08:43:13 | ℹ️ Change usb_mode to @overload\n", + "08:43:13 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Accel.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:15 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ADC.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:17 | ℹ️ Merge scratch\\micropython-reference\\pyb\\CAN.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:19 | ℹ️ Change info to @overload\n", + "08:43:19 | ℹ️ Change setfilter to @overload\n", + "08:43:19 | ℹ️ Change recv to @overload\n", + "08:43:19 | ℹ️ Merge scratch\\micropython-reference\\pyb\\DAC.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:21 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ExtInt.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:22 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Flash.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:24 | ℹ️ Change __init__ to @overload\n", + "08:43:24 | ℹ️ Merge scratch\\micropython-reference\\pyb\\I2C.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:26 | ℹ️ Change mem_read to @overload\n", + "08:43:26 | ℹ️ Change recv to @overload\n", + "08:43:26 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LCD.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:28 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LED.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:30 | ℹ️ Change intensity to @overload\n", + "08:43:30 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Pin.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:32 | ℹ️ Change debug to @overload\n", + "08:43:32 | ℹ️ Change dict to @overload\n", + "08:43:32 | ℹ️ Change mapper to @overload\n", + "08:43:32 | ℹ️ Change value to @overload\n", + "08:43:32 | ℹ️ Merge scratch\\micropython-reference\\pyb\\RTC.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:34 | ℹ️ Change calibration to @overload\n", + "08:43:34 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Servo.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:36 | ℹ️ Change angle to @overload\n", + "08:43:36 | ℹ️ Change speed to @overload\n", + "08:43:36 | ℹ️ Change calibration to @overload\n", + "08:43:36 | ℹ️ Merge scratch\\micropython-reference\\pyb\\SPI.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:38 | ℹ️ Change __init__ to @overload\n", + "08:43:38 | ℹ️ Change init to @overload\n", + "08:43:38 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Switch.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:41 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Timer.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:45 | ℹ️ Change __init__ to @overload\n", + "08:43:45 | ℹ️ Change init to @overload\n", + "08:43:45 | ℹ️ Change channel to @overload\n", + "08:43:45 | ℹ️ Change counter to @overload\n", + "08:43:45 | ℹ️ Change freq to @overload\n", + "08:43:45 | ℹ️ Change period to @overload\n", + "08:43:45 | ℹ️ Change prescaler to @overload\n", + "08:43:45 | ℹ️ Change capture to @overload\n", + "08:43:45 | ℹ️ Change compare to @overload\n", + "08:43:45 | ℹ️ Change pulse_width to @overload\n", + "08:43:45 | ℹ️ Change pulse_width_percent to @overload\n", + "08:43:45 | ℹ️ Merge scratch\\micropython-reference\\pyb\\UART.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:47 | ℹ️ Change __init__ to @overload\n", + "08:43:47 | ℹ️ Change read to @overload\n", + "08:43:47 | ℹ️ Change readinto to @overload\n", + "08:43:47 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_HID.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:48 | ℹ️ Change recv to @overload\n", + "08:43:48 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_VCP.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", + "08:43:50 | ℹ️ Change read to @overload\n", + "08:43:50 | ℹ️ Change readinto to @overload\n", + "08:43:50 | ℹ️ Change recv to @overload\n", + "08:43:50 | ℹ️ Merge scratch\\micropython-reference\\random\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\random.pyi\n", + "08:43:50 | ℹ️ Change randrange to @overload\n", + "08:43:50 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\select.pyi\n", + "08:43:51 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uselect.pyi\n", + "08:43:51 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\socket.pyi\n", + "08:43:51 | ℹ️ Change makefile to @overload\n", + "08:43:51 | ℹ️ Change read to @overload\n", + "08:43:51 | ℹ️ Change readinto to @overload\n", + "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ssl.pyi\n", + "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\stm\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\stm.pyi\n", + "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\struct.pyi\n", + "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\sys.pyi\n", + "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\usys.pyi\n", + "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\time.pyi\n", + "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\array.pyi\n", + "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\binascii.pyi\n", + "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ubinascii.pyi\n", + "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\uctypes\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uctypes.pyi\n", + "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\uio.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uio.pyi\n", + "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\json.pyi\n", + "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ujson.pyi\n", + "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\uos.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi\n", + "08:43:54 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "Syntax Error @ 26:1.\n", + "parser error: error at 25:0: expected NAME\n", + "\n", + "from typing_extensions import TypeAlias\n", + " ^\n", + "08:43:54 | ❌ Error parsing scratch\\micropython-reference\\uos.pyi\n", + "08:43:54 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "Syntax Error @ 26:1.\n", + "parser error: error at 25:0: expected NAME\n", + "\n", + "from typing_extensions import TypeAlias\n", + " ^\n", + "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\select.pyi\n", + "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uselect.pyi\n", + "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\socket.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\ssl.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\struct.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\time.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uzlib.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\zlib.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\wipy\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\wipy.pyi\n", + "08:43:55 | ℹ️ Change heartbeat to @overload\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\uzlib.pyi\n", + "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", + "repos\\PyBoardTypeshed\\micropython_typesheds\\zlib.pyi\n" ] } ], @@ -1002,30 +866,6 @@ "!copy .\\repos\\rp2040\\_rp2\\*.* .\\scratch\\micropython-reference\\_rp2\\*.*" ] }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "import shutil\n", - "\n", - "\n", - "manual_p = Path(\"repos\\\\micropython-stubs\\\\stubs\\\\_manual\")\n", - "# rp2040_p = Path(\"repos\\\\rp2040\")\n", - "\n", - "\n", - "# copy _mpy_shed to the reference folder\n", - "def copy_module(module: str | Path, src: Path = manual_p):\n", - " target = reference_p / module\n", - " if target.exists():\n", - " shutil.rmtree(target)\n", - " if (src / module).is_dir():\n", - " shutil.copytree(src / module, target)\n", - " else:\n", - " shutil.copy(src / module, target)" - ] - }, { "cell_type": "code", "execution_count": 9, @@ -1044,7 +884,6 @@ "outputs": [], "source": [ "# Add rp2 modules ( may be an overkill?)\n", - "# copy_module(\"rp2\", manual_p/ \"rpi\")\n", "copy_module(\"_rp2\", manual_p / \"rpi\")" ] }, @@ -1074,6 +913,8 @@ " \"from io import AnyWritableBuf\",\n", " \"from uio import AnyReadableBuf\",\n", " \"from uio import AnyWritableBuf\",\n", + " \"from io import StrOrBytesPath\",\n", + " \"from uio import StrOrBytesPath\",\n", "]\n", "\n", "\n", @@ -1150,12 +991,16 @@ "source": [ "# Add missing HASH class to hashlib\n", "\n", - "HASH_CLASS = open(manual_p / \"partial_modules\" / \"hashlib.pyi\").read()\n", "\n", + "def append_partial_module(module: str):\n", + " with open(manual_p / \"partial_modules\" / f\"{module}.pyi\") as f:\n", + " content = f.read()\n", + " with open(reference_p / module / \"__init__.pyi\", \"a\") as f:\n", + " f.write(content)\n", "\n", - "with open(reference_p / \"hashlib/__init__.pyi\", \"a\") as f:\n", "\n", - " f.write(HASH_CLASS)" + "append_partial_module(\"hashlib\")\n", + "append_partial_module(\"random\")" ] }, { @@ -1164,51 +1009,59 @@ "metadata": {}, "outputs": [], "source": [ - "# Add missing PIOASM Emit class to rp2\n", + "# clean / change rp2 / _rp2\n", + "\n", + "if not MIT:\n", + " # Append the class PIOASMEmit to the rp2 module\n", + " append_partial_module(\"rp2\")\n", "\n", - "CLASS_PIOASMEMIT = open(manual_p / \"partial_modules\" / \"rp2.pyi\").read()\n", "\n", + "clean_rp2_modules = False\n", + "if clean_rp2_modules:\n", "\n", - "# Add missing class\n", + " # remove the submodules to avoid duplication in multiple files\n", "\n", + " for name in [\"DMA\", \"FLASH\", \"PIO\", \"StateMachine\"]:\n", + " submodule = reference_p / f\"rp2/{name}.pyi\"\n", + " submodule.unlink(missing_ok=True)\n", "\n", - "rp2 = Path(reference_p / \"rp2/__init__.pyi\")\n", "\n", + " # remove the relative imports from the rp2 module\n", + " rp2 = Path(reference_p / \"rp2\" / \"__init__.pyi\")\n", "\n", - "with open(rp2, \"a\") as f:\n", + " with rp2.open(mode=\"r\", encoding=\"utf-8\") as f:\n", + " # Read the contents of the file\n", + " lines = f.readlines()\n", "\n", "\n", - " f.write(CLASS_PIOASMEMIT)" + " # Open the file in write mode\n", + "\n", + " with rp2.open(mode=\"w\", encoding=\"utf-8\") as f:\n", + " # Iterate over each line in the file\n", + " for line in lines:\n", + " # Check if the line starts with\n", + " if line.startswith(\"from .\") or line == \"from rp2 import PIOASMEmit\":\n", + " line = \"# \" + line\n", + " # Write the modified line to the file\n", + " f.write(line)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], "source": [ - "# clean / change rp2 / _rp2\n", - "# remove the submodules to avoid duplication in multiple files\n", - "for name in [\"DMA\", \"FLASH\", \"PIO\", \"StateMachine\"]:\n", - " submodule = reference_p / f\"rp2/{name}.pyi\"\n", - " submodule.unlink(missing_ok=True)\n", - "\n", - "\n", - "# remove the relative imports from the rp2 module\n", - "with rp2.open(mode=\"r\", encoding=\"utf-8\") as f:\n", - " # Read the contents of the file\n", - " lines = f.readlines()\n", - "\n", - "# Open the file in write mode\n", - "with rp2.open(mode=\"w\", encoding=\"utf-8\") as f:\n", - " # Iterate over each line in the file\n", - " for line in lines:\n", - " # Check if the line starts with\n", - " if line.startswith(\"from .\") or line == \"from rp2 import PIOASMEmit\":\n", - " line = \"# \" + line\n", - "\n", - " # Write the modified line to the file\n", - " f.write(line)" + "# sanity check on formatting\n", + "! ruff check scratch\\micropython-reference --ignore F4 --ignore UP0 --ignore F811 \n" ] }, { @@ -1226,7 +1079,11 @@ ], "source": [ "# Clean formatting and upgrate typing notation to 3.10\n", - "! ruff check {reference_p} --fix --unsafe-fixes\n" + "# except :\n", + "# - non-pep585-annotation (UP006) - Keep from typing import List to support Python 3.7 , 3.8 \n", + " \n", + "! ruff check {reference_p} --fix --unsafe-fixes --ignore UP006 --ignore UP035 --ignore F405\n", + "\n" ] }, { @@ -1249,7 +1106,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uselect.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uio.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\usocket.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", @@ -1300,6 +1157,7 @@ "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", @@ -1318,6 +1176,10 @@ "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_VCP.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\DMA.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\Flash.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\StateMachine.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\select\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", @@ -1345,38 +1207,51 @@ } ], "source": [ - "# clean up the formatting\n", + "# clean up the formatting and import orders by running isort\n", "! isort {reference_p}" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "Reference baked from Source repos\\PyBoardTypeshed\\micropython_typesheds\n", + "======================================== \n", "WARNING: there is a new pyright version available (v1.1.388 -> v1.1.389).\n", "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", "\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m121\u001b[39m:\u001b[33m40\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi:\u001b[33m157\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: Class methods should take a \"cls\" parameter\u001b[90m (reportSelfClsParameterName)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi:\u001b[33m339\u001b[39m:\u001b[33m80\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_IRQ\" appears only once in generic function signature\n", + "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi:\u001b[33m468\u001b[39m:\u001b[33m35\u001b[39m - \u001b[34minformation\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m208\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m216\u001b[39m:\u001b[33m33\u001b[39m - \u001b[34minformation\u001b[39m: \"_OpenTextModeWriting\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m216\u001b[39m:\u001b[33m78\u001b[39m - \u001b[34minformation\u001b[39m: \"TextIOWrapper\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m224\u001b[39m:\u001b[33m33\u001b[39m - \u001b[34minformation\u001b[39m: \"_OpenBinaryMode\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m224\u001b[39m:\u001b[33m73\u001b[39m - \u001b[34minformation\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi:\u001b[33m48\u001b[39m:\u001b[33m58\u001b[39m - \u001b[34minformation\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi:\u001b[33m460\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_IRQ\" appears only once in generic function signature\n", + "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m68\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m10\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi:\u001b[33m46\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"PIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi:\u001b[33m117\u001b[39m:\u001b[33m7\u001b[39m - \u001b[36mwarning\u001b[39m: Type variable \"_T\" used in generic Protocol \"Subscriptable\" should be covariant\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", + "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", + " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi:\u001b[33m108\u001b[39m:\u001b[33m95\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_IRQ\" appears only once in generic function signature\n", + "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m59\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", @@ -1388,15 +1263,22 @@ " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m98\u001b[39m:\u001b[33m50\u001b[39m - \u001b[34minformation\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m38\u001b[39m - \u001b[34minformation\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "0 errors, 0 warnings, 20 informations \n" + "0 errors, 4 warnings, 21 informations \n" ] } ], "source": [ - "\n", + "print(f\"Reference baked from Source {overload_typestubs}\\n{'='*40} \")\n", "!cd \"d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\" && pyright .\n", "!cd \"d:\\mypython\\micropython-stubber\"\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/pyproject.toml b/pyproject.toml index ebab5802..3946e75f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -386,8 +386,9 @@ exclude = [".*", "__*", "dist"] line-length = 140 indent-width = 4 -# Assume Python 3.8 -target-version = "py38" + +#Stubs should be usable Python 3.9 +target-version = "py39" [tool.ruff.lint] # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. @@ -395,7 +396,6 @@ target-version = "py38" # McCabe complexity (`C901`) by default. select = ["E4", "E7", "E9", "F", "U"] ignore = ["E402", "F821", "F403"] - # Allow fix for all enabled rules (when `--fix`) is provided. fixable = ["ALL"] unfixable = [] diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 4be86b93..55db82d2 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -129,7 +129,7 @@ class Fix: "machine.reset": ("NoReturn", 0.95), # never returns "machine.Signal.value": ("int", 0.95), "machine.soft_reset": ("NoReturn", 0.95), # never returns - "machine.UART.irq": ("Incomplete", 0.95), # no IRQ type defined + "machine.UART.irq": ("_IRQ", 0.95), # no IRQ type defined "machine.UART.write": ("Union[int,None]", 0.95), "machine.UART.readinto": ("Union[int,None]", 0.95), "machine.UART.readline": ("Union[str,None]", 0.95), @@ -145,7 +145,8 @@ class Fix: "pyb.SPI.recv": ("bytes", 0.95), # complex in docstring "pyb.hid_keyboard": ("HID_Tuple", 0.95), # ? "pyb.hid_mouse": ("HID_Tuple", 0.95), # plain wrong - "ubluetooth.BLE.irq": ("Any", 0.95), + "bluetooth.BLE.irq": ("_IRQ", 0.95), + "ubluetooth.BLE.irq": ("_IRQ", 0.95), "uctypes.bytearray_at": ("bytearray", 0.95), "uctypes.bytes_at": ("bytes", 0.95), "uio.open": ("IO", 0.95), # Open a file. @@ -183,12 +184,12 @@ class Fix: "_rp2.DMA.unpack_ctrl": ("dict", 0.95), "_rp2.DMA.close": ("None", 0.95), "_rp2.DMA.config": ("None", 0.95), - "_rp2.DMA.irq": ("irq", 0.95), + "_rp2.DMA.irq": ("_IRQ", 0.95), "_rp2.PIO.state_machine": ("StateMachine", 0.95), - "_rp2.PIO.irq": ("irq", 0.95), + "_rp2.PIO.irq": ("_IRQ", 0.95), "_rp2.PIO.remove_program": ("None", 0.95), "_rp2.PIO.add_program": ("None", 0.95), - "rp2.PIO.irq": ("irq", 0.95), + "rp2.PIO.irq": ("_IRQ", 0.95), } @@ -247,18 +248,21 @@ class Fix: # - to add missing abstract classes # - to add TypeAliases and TypeVars -# TODO: avoid defining AnyReadableBuf and AnyWritableBuf in multile modules +# avoid defining AnyReadableBuf and AnyWritableBuf in m modules ANY_BUF = ["from _mpy_shed import AnyReadableBuf, AnyWritableBuf"] MODULE_GLUE = { - "array": ['_T: Final = TypeVar("_T", int, float, Text)'], + "array": ['_T = TypeVar("_T", int, float, str)'], "asyncio": ANY_BUF, - "bluetooth": ANY_BUF, + "bluetooth": ANY_BUF + + [ + "from _mpy_shed import _IRQ", + ], "collections": [ "from queue import Queue", # "from _mpy_shed.collections import namedtuple as stdlib_namedtuple # type: ignore", - '_KT: Final = TypeVar("_KT")', - '_VT: Final = TypeVar("_VT")', + '_KT = TypeVar("_KT")', + '_VT = TypeVar("_VT")', ], "cmath": [ "from typing_extensions import TypeAlias", @@ -272,9 +276,12 @@ class Fix: "framebuf": ANY_BUF, "hashlib": ANY_BUF, "heapq": [ - '_T: Final = TypeVar("_T")', + '_T = TypeVar("_T")', + ], + "io": ANY_BUF + + [ + "from _mpy_shed import IOBase", ], - "io": ANY_BUF, "lcd160cr": ANY_BUF + ["from machine.SPI import SPI"], # uses SPI # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such "machine.ADC": [ @@ -295,11 +302,12 @@ class Fix: + [ "from machine import IDLE", "from .Pin import Pin", + "from _mpy_shed import _IRQ", ], # uses Pin "micropython": [ "from typing import Tuple, Final, TypeVar", - '_T: Final = TypeVar("_T")', - '_F: Final = TypeVar("_F", bound=Callable[..., Any])', + '_T = TypeVar("_T")', + '_F = TypeVar("_F", bound=Callable[..., Any])', 'Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) # constant', ], "network": ["from typing import Protocol"], # for AbstractNIC @@ -338,7 +346,9 @@ class Fix: "from .Pin import Pin", ], # uses Pin # "rp2": ["from .PIO import PIO"], # - # "rp2.PIO": ["from .irq import irq"], # + "_rp2.DMA": ["from _mpy_shed import _IRQ"], + "_rp2.PIO": ["from _mpy_shed import _IRQ"], + "rp2.PIO": ["from _mpy_shed import _IRQ"], "socket": [ "from stdlib.socket import * # type: ignore", "from typing_extensions import TypeAlias", @@ -352,11 +362,11 @@ class Fix: ], # integrate STDLIB "struct": ANY_BUF, "time": [ - "from typing_extensions import TypeAlias", - "class _TicksMs: ...", - "class _TicksUs: ...", - "class _TicksCPU: ...", - "_Ticks: TypeAlias = _TicksMs | _TicksUs | _TicksCPU | int", + "from typing_extensions import TypeAlias, TypeVar", + "_TicksMs: TypeAlias = int", + "_TicksUs: TypeAlias = int", + "_TicksCPU: TypeAlias = int", + '_Ticks = TypeVar("_Ticks", _TicksMs, _TicksUs, _TicksCPU, int)', ], "uctypes": ANY_BUF + [ diff --git a/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py b/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py index 35583220..93b68bb9 100644 --- a/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py +++ b/tests/codemods/codemod_test_cases/typealias_add/doc_stub.py @@ -4,7 +4,7 @@ """ -from typing import TypeAlias +from typing_extensions import TypeAlias UUID: TypeAlias = str _Flag: TypeAlias = int diff --git a/tests/codemods/codemod_test_cases/typealias_add/expected.py b/tests/codemods/codemod_test_cases/typealias_add/expected.py index 7f61917b..49d69cdf 100644 --- a/tests/codemods/codemod_test_cases/typealias_add/expected.py +++ b/tests/codemods/codemod_test_cases/typealias_add/expected.py @@ -2,7 +2,7 @@ """ add typealias """ -from typing import TypeAlias +from typing_extensions import TypeAlias UUID: TypeAlias = str _Flag: TypeAlias = int From 5e8dea8d6eefa354114fef9bf2b13b85e6058573 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 22 Nov 2024 10:57:43 +0100 Subject: [PATCH 36/57] stubber: Fix _IRQ lookups Signed-off-by: Jos Verlinde --- src/stubber/rst/lookup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 55db82d2..17ad68ae 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -190,6 +190,7 @@ class Fix: "_rp2.PIO.remove_program": ("None", 0.95), "_rp2.PIO.add_program": ("None", 0.95), "rp2.PIO.irq": ("_IRQ", 0.95), + "rp2.DMA.irq": ("_IRQ", 0.95), } @@ -349,6 +350,7 @@ class Fix: "_rp2.DMA": ["from _mpy_shed import _IRQ"], "_rp2.PIO": ["from _mpy_shed import _IRQ"], "rp2.PIO": ["from _mpy_shed import _IRQ"], + "rp2.DMA": ["from _mpy_shed import _IRQ"], "socket": [ "from stdlib.socket import * # type: ignore", "from typing_extensions import TypeAlias", @@ -477,7 +479,7 @@ class Fix: "pins:Optional[Tuple]", ), # ## rp2.PIO.irq - # Fix( No longer needed with py 3.12 notation + # Fix( No longer needed with py 3.10 notation # "trigger=IRQ_SM0|IRQ_SM1|IRQ_SM2|IRQ_SM3", # "trigger=IRQ_SM0", # ), From ed68d75613f569e2aabc61d85577adbc922cbb40 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sat, 7 Dec 2024 16:53:45 +0100 Subject: [PATCH 37/57] Docstubs: modify module imports for compatibility Signed-off-by: Jos Verlinde --- .vscode/launch.json | 22 +- WIP.md | 89 + enrich_tester.ipynb | 1110 ++++--- src/stubber/rst/lookup.py | 14 +- verify-reference.ipynb | 6037 +++++++++++++++++++++++++++++++++++++ 5 files changed, 6827 insertions(+), 445 deletions(-) create mode 100644 WIP.md create mode 100644 verify-reference.ipynb diff --git a/.vscode/launch.json b/.vscode/launch.json index e3bef3f2..dda54364 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -40,11 +40,18 @@ "cwd": "${workspaceFolder}", "args": [ "-VV", - "enrich", - "--stubs", - "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network", - "--docstubs", - "repos\\intellij-micropython\\typehints\\micropython", + "build", + "--port", + "rp2", + "--board", + "RPI_PICO", + // + // "enrich", + // "--stubs", + // "repos\\micropython-stubs\\stubs\\micropython-v1_23_0-docstubs\\network", + // "--docstubs", + // "repos\\intellij-micropython\\typehints\\micropython", + // // "get-docstubs", // "--version", // "preview", @@ -58,11 +65,6 @@ // "switch", // "v1.20.0", // "build", - // "--port", - // "esp32", - // "--board", - // "generic", - // "build", // "publish", // "--test-pypi", // "--version", diff --git a/WIP.md b/WIP.md new file mode 100644 index 00000000..3126bbe7 --- /dev/null +++ b/WIP.md @@ -0,0 +1,89 @@ + + + - [ ] class NeoPixel: - indexing + https://github.com/Josverl/micropython-stubs/issues/764 + + ERROR root:typecheck.py:171 "tests/quality_tests/check_rp2/check_neopixel.py"(10,0): "__setitem__" method not defined on type "NeoPixel" + ERROR root:typecheck.py:171 "tests/quality_tests/check_rp2/check_neopixel.py"(12,10): "__getitem__" method not defined on type "NeoPixel" + + - [ ] mod:socket - missing module constants + ERROR root:typecheck.py:171 "tests/quality_tests/feat_micropython/check_functions.py"(5,7): "AF_INET" is not defined + ERROR root:typecheck.py:171 "tests/quality_tests/feat_micropython/check_functions.py"(5,16): "SOCK_STREAM" is not defined + ERROR root:typecheck.py:171 "tests/quality_tests/feat_micropython/check_functions.py"(7,7): "AF_INET" is not defined + ERROR root:typecheck.py:171 "tests/quality_tests/feat_micropython/check_functions.py"(7,16): "SOCK_DGRAM" is not defined + +- [ ] uasyncio.Task + subclass : + class Task(futures._PyFuture): + methods : + - cancel + - __await__ + - s.read() / __call__ ?>? + + + INFO root:typecheck.py:175 "tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py"(67,26): Cannot access attribute "cancel" for class "Task" + Attribute "cancel" is unknown + INFO root:typecheck.py:175 "tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py"(69,26): "Task" is not awaitable + "Task" is incompatible with protocol "Awaitable[_T_co@Awaitable]" + "__await__" is not present + +- [ ] # TODO: fix type stubs asyncio.StreamReader + ```python + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + + # read: Generator ## = + async def read(self, n=-1): + """Read up to `n` bytes from the stream. + + If `n` is not provided or set to -1, + read until EOF, then return all read bytes. + If EOF was received and the internal buffer is empty, + return an empty bytes object. + + If `n` is 0, return an empty bytes object immediately. + + If `n` is positive, return at most `n` available bytes + as soon as at least 1 byte is available in the internal buffer. + If EOF is received before any byte is read, return an empty + bytes object. + + Returned value is not limited with limit, configured at stream + creation. + + If stream was paused, this function will automatically resume it if + needed. + """ + + ``` + + - [ ] stdib - io + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_io.py"(11,9): "BufferedWriter" is not a known attribute of module "io" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_json/check_json.py"(38,26): No parameter named "separators" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_files.py"(40,29): Type "str | list[dict[Unknown, Unknown]]" is not assignable to declared type "List[str]" + Type "str | list[dict[Unknown, Unknown]]" is not assignable to type "List[str]" + "str" is not assignable to "List[str]" + INFO root:typecheck.py:175 "tests/quality_tests/feat_stdlib/check_os/check_files.py"(56,24): Type of "subdir" is "List[str]" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_files.py"(57,17): Type "list[str | dict[Unknown, Unknown]]" is not assignable to declared type "List[dict[Unknown, Unknown]]" + "list[str | dict[Unknown, Unknown]]" is not assignable to "List[dict[Unknown, Unknown]]" + Type parameter "_T@list" is invariant, but "str | dict[Unknown, Unknown]" is not the same as "dict[Unknown, Unknown]" + Consider switching from "list" to "Sequence" which is covariant + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(19,12): "assert_type" mismatch: expected "str" but received "str | Unknown" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(20,12): "assert_type" mismatch: expected "str" but received "str | Unknown" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(21,12): "assert_type" mismatch: expected "str" but received "str | Unknown" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(22,12): "assert_type" mismatch: expected "str" but received "str | Unknown" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(23,12): "assert_type" mismatch: expected "str" but received "str | Unknown" + ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_sys/check_sys.py"(24,20): Argument of type "exc" cannot be assigned to parameter "exc" of type "BaseException" in function "print_exception" + + + + - [ ] Disable ruff warnings + - UP015, UP031, UP032 + diff --git a/enrich_tester.ipynb b/enrich_tester.ipynb index 88c7425c..7110f938 100644 --- a/enrich_tester.ipynb +++ b/enrich_tester.ipynb @@ -44,9 +44,47 @@ " copy from C:\\Users\\josverl\\.vscode\\extensions\\ms-python.vscode-pylance-2024.9.1\\dist\\typeshed-fallback\\stdlib\\cmath.pyi\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```mermaid\n", + "flowchart TD\n", + " A[Start] --> B[Clone Repos]\n", + " B --> C[Create Docstubs]\n", + " C --> D{MIT?}\n", + " D -->|Yes| E[Use Howards Typeshed]\n", + " D -->|No| F[Use IntelliJ Micropython Plugin]\n", + " E --> G[Copy _mpy_shed to Reference Folder]\n", + " F --> G[Copy _mpy_shed to Reference Folder]\n", + " G --> H[Enrich from rp2040]\n", + " H --> I[Sanity Check on Formatting]\n", + " I --> J[Merge Redacted Typehints]\n", + " J --> K[Sanity Check on Formatting]\n", + " K --> L[Add _rp2 Module]\n", + " L --> M[Copy _mpy_shed to Reference Folder]\n", + " M --> N[Add rp2 Modules]\n", + " N --> O[Fix u-module Imports]\n", + " O --> P[Sanity Check on Formatting]\n", + " P --> Q[Add Missing HASH Class]\n", + " Q --> R{Clean rp2 Modules?}\n", + " R -->|Yes| S[Clean rp2 Modules]\n", + " R -->|No| T[Skip Cleaning]\n", + " S --> U[Sanity Check on Formatting]\n", + " T --> U[Sanity Check on Formatting]\n", + " U --> V[Clean Formatting]\n", + " V --> W[Run Autoflake]\n", + " W --> X[Run Isort]\n", + " X --> Y[Remove Duplicate Comments]\n", + " Y --> Z[Final Sanity Check]\n", + " Z --> AA[Run Pyright]\n", + " AA --> AB[End]\n", + "```\n" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "slideshow": { "slide_type": "slide" @@ -66,8 +104,10 @@ "\n", "# source of manual stubs ( _mpy_shed & rp2 )\n", "manual_p = Path(\"repos\\\\micropython-stubs\\\\stubs\\\\_manual\")\n", - "\n", + "enrich_from_rp2040 = True\n", "MIT = True\n", + "\n", + "\n", "if MIT:\n", " # Howards Typeshed\n", " overload_typestubs = Path(\"repos\\\\PyBoardTypeshed\\\\micropython_typesheds\")\n", @@ -78,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" @@ -109,181 +149,294 @@ "name": "stdout", "output_type": "stream", "text": [ - "08:42:01 | ℹ️ micropython-stubber 1.23.2a0\n", - "08:42:01 | ℹ️ fetch updates\n", - "08:42:04 | ℹ️ Switching to v1.24.0\n", - "08:42:07 | ℹ️ repos\\micropython v1.24.0-dirty\n", - "08:42:07 | ℹ️ repos\\micropython-lib v1.24.0\n", - "08:42:08 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.24.0\n", - "08:42:08 | ℹ️ Get docstubs for MicroPython v1.24.0\n", - "08:42:08 | ℹ️ - Writing to: \n", + "Unstaged changes after reset:\n", + "D\tmicropython-reference/_mpy_shed/__init__.pyi\n", + "D\tmicropython-reference/_mpy_shed/_collections_abc.pyi\n", + "D\tmicropython-reference/_mpy_shed/collections/__init__.pyi\n", + "D\tmicropython-reference/_mpy_shed/collections/abc.pyi\n", + "D\tmicropython-reference/_rp2/DMA.pyi\n", + "D\tmicropython-reference/_rp2/Flash.pyi\n", + "D\tmicropython-reference/_rp2/PIO.pyi\n", + "D\tmicropython-reference/_rp2/StateMachine.pyi\n", + "D\tmicropython-reference/_rp2/__init__.pyi\n", + "D\tmicropython-reference/_rp2/irq.pyi\n", + "D\tmicropython-reference/_thread/__init__.pyi\n", + "D\tmicropython-reference/array/__init__.pyi\n", + "D\tmicropython-reference/asyncio/__init__.pyi\n", + "D\tmicropython-reference/binascii/__init__.pyi\n", + "D\tmicropython-reference/bluetooth/__init__.pyi\n", + "D\tmicropython-reference/btree/__init__.pyi\n", + "D\tmicropython-reference/cmath/__init__.pyi\n", + "D\tmicropython-reference/collections/__init__.pyi\n", + "D\tmicropython-reference/cryptolib/__init__.pyi\n", + "D\tmicropython-reference/deflate/__init__.pyi\n", + "D\tmicropython-reference/errno/__init__.pyi\n", + "D\tmicropython-reference/esp/__init__.pyi\n", + "D\tmicropython-reference/esp32/__init__.pyi\n", + "D\tmicropython-reference/espnow/__init__.pyi\n", + "D\tmicropython-reference/framebuf/__init__.pyi\n", + "D\tmicropython-reference/gc/__init__.pyi\n", + "D\tmicropython-reference/gzip/__init__.pyi\n", + "D\tmicropython-reference/hashlib/__init__.pyi\n", + "D\tmicropython-reference/heapq/__init__.pyi\n", + "D\tmicropython-reference/io/__init__.pyi\n", + "D\tmicropython-reference/json/__init__.pyi\n", + "D\tmicropython-reference/lcd160cr/__init__.pyi\n", + "D\tmicropython-reference/machine/ADC.pyi\n", + "D\tmicropython-reference/machine/ADCBlock.pyi\n", + "D\tmicropython-reference/machine/ADCWiPy.pyi\n", + "D\tmicropython-reference/machine/I2C.pyi\n", + "D\tmicropython-reference/machine/I2S.pyi\n", + "D\tmicropython-reference/machine/PWM.pyi\n", + "D\tmicropython-reference/machine/Pin.pyi\n", + "D\tmicropython-reference/machine/RTC.pyi\n", + "D\tmicropython-reference/machine/SD.pyi\n", + "D\tmicropython-reference/machine/SDCard.pyi\n", + "D\tmicropython-reference/machine/SPI.pyi\n", + "D\tmicropython-reference/machine/Signal.pyi\n", + "D\tmicropython-reference/machine/Timer.pyi\n", + "D\tmicropython-reference/machine/TimerWiPy.pyi\n", + "D\tmicropython-reference/machine/UART.pyi\n", + "D\tmicropython-reference/machine/USBDevice.pyi\n", + "D\tmicropython-reference/machine/WDT.pyi\n", + "D\tmicropython-reference/machine/__init__.pyi\n", + "D\tmicropython-reference/math/__init__.pyi\n", + "D\tmicropython-reference/micropython/__init__.pyi\n", + "D\tmicropython-reference/modules.json\n", + "D\tmicropython-reference/neopixel/__init__.pyi\n", + "D\tmicropython-reference/network/LAN.pyi\n", + "D\tmicropython-reference/network/PPP.pyi\n", + "D\tmicropython-reference/network/WIZNET5K.pyi\n", + "D\tmicropython-reference/network/WLAN.pyi\n", + "D\tmicropython-reference/network/WLANWiPy.pyi\n", + "D\tmicropython-reference/network/__init__.pyi\n", + "D\tmicropython-reference/openamp/__init__.pyi\n", + "D\tmicropython-reference/os/__init__.pyi\n", + "D\tmicropython-reference/platform/__init__.pyi\n", + "D\tmicropython-reference/pyb/ADC.pyi\n", + "D\tmicropython-reference/pyb/Accel.pyi\n", + "D\tmicropython-reference/pyb/CAN.pyi\n", + "D\tmicropython-reference/pyb/DAC.pyi\n", + "D\tmicropython-reference/pyb/ExtInt.pyi\n", + "D\tmicropython-reference/pyb/Flash.pyi\n", + "D\tmicropython-reference/pyb/I2C.pyi\n", + "D\tmicropython-reference/pyb/LCD.pyi\n", + "D\tmicropython-reference/pyb/LED.pyi\n", + "D\tmicropython-reference/pyb/Pin.pyi\n", + "D\tmicropython-reference/pyb/RTC.pyi\n", + "D\tmicropython-reference/pyb/SPI.pyi\n", + "D\tmicropython-reference/pyb/Servo.pyi\n", + "D\tmicropython-reference/pyb/Switch.pyi\n", + "D\tmicropython-reference/pyb/Timer.pyi\n", + "D\tmicropython-reference/pyb/UART.pyi\n", + "D\tmicropython-reference/pyb/USB_HID.pyi\n", + "D\tmicropython-reference/pyb/USB_VCP.pyi\n", + "D\tmicropython-reference/pyb/__init__.pyi\n", + "D\tmicropython-reference/random/__init__.pyi\n", + "D\tmicropython-reference/rp2/__init__.pyi\n", + "D\tmicropython-reference/select/__init__.pyi\n", + "D\tmicropython-reference/socket/__init__.pyi\n", + "D\tmicropython-reference/ssl/__init__.pyi\n", + "D\tmicropython-reference/stm/__init__.pyi\n", + "D\tmicropython-reference/struct/__init__.pyi\n", + "D\tmicropython-reference/sys/__init__.pyi\n", + "D\tmicropython-reference/time/__init__.pyi\n", + "D\tmicropython-reference/uarray.pyi\n", + "D\tmicropython-reference/ubinascii.pyi\n", + "D\tmicropython-reference/uctypes/__init__.pyi\n", + "D\tmicropython-reference/uio.pyi\n", + "D\tmicropython-reference/ujson.pyi\n", + "D\tmicropython-reference/uos.pyi\n", + "D\tmicropython-reference/uselect.pyi\n", + "D\tmicropython-reference/usocket.pyi\n", + "D\tmicropython-reference/ussl.pyi\n", + "D\tmicropython-reference/ustruct.pyi\n", + "D\tmicropython-reference/utime.pyi\n", + "D\tmicropython-reference/uzlib.pyi\n", + "D\tmicropython-reference/vfs/__init__.pyi\n", + "D\tmicropython-reference/wipy/__init__.pyi\n", + "D\tmicropython-reference/wm8960/__init__.pyi\n", + "D\tmicropython-reference/zephyr/DiskAccess.pyi\n", + "D\tmicropython-reference/zephyr/FlashArea.pyi\n", + "D\tmicropython-reference/zephyr/__init__.pyi\n", + "D\tmicropython-reference/zephyr/zsensor.pyi\n", + "D\tmicropython-reference/zlib/__init__.pyi\n", + "Removing micropython-v1_24_0-docstubs/\n", + "17:31:32 | ℹ️ micropython-stubber 1.23.2a0\n", + "17:31:32 | ℹ️ fetch updates\n", + "17:31:34 | ℹ️ Switching to v1.24.0\n", + "17:31:36 | ℹ️ repos\\micropython v1.24.0-dirty\n", + "17:31:36 | ℹ️ repos\\micropython-lib v1.24.0\n", + "17:31:36 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.24.0\n", + "17:31:36 | ℹ️ Get docstubs for MicroPython v1.24.0\n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\array\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\asyncio\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\binascii\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\bluetooth\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\btree\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\cmath\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\collections\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\cryptolib\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\deflate\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\errno\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\esp\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\esp32\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\espnow\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\framebuf\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\gc\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\gzip\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\hashlib\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\heapq\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\io\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\json\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\lcd160cr\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\UART.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\USBDevice.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\math\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\micropython\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\neopixel\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\LAN.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\PPP.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\openamp\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\os\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\platform\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\random\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi\n", - "08:42:08 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi\n", + "17:31:37 | ℹ️ - Writing to: scratch\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi\n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\select\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\stm\\__init__.pyi\n", - "08:42:08 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\sys\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\time\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\uctypes\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\vfs\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\wipy\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\wm8960\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi\n", - "08:42:09 | ℹ️ - Writing to: \n", + "17:31:37 | ℹ️ - Writing to: \n", "scratch\\micropython-v1_24_0-docstubs\\_thread\\__init__.pyi\n", - "08:42:09 | ℹ️ ::group:: start post processing of retrieved stubs\n", - "08:42:13 | ℹ️ ::group:: Done\n" + "17:31:37 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "17:31:40 | ℹ️ ::group:: Done\n" ] }, { @@ -292,98 +445,98 @@ "text": [ "Skipping .ipynb files as Jupyter dependencies are not installed.\n", "You can fix this by running ``pip install \"black[jupyter]\"``\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_thread\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\collections\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cryptolib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\deflate\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\errno\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gc\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\array\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\binascii\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\heapq\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gc\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\gzip\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\heapq\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\json\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCBlock.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\hashlib\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\asyncio\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\collections\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADC.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\btree\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2S.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCBlock.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\ADCWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\lcd160cr\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2S.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SD.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\PWM.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SDCard.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\RTC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\lcd160cr\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Pin.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\I2C.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Signal.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SDCard.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\SPI.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\Timer.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\WDT.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\cmath\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\USBDevice.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\neopixel\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WIZNET5K.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\micropython\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WIZNET5K.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\PPP.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\LAN.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\math\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\PPP.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLAN.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\platform\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Accel.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ExtInt.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ADC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\network\\WLANWiPy.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Flash.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\ExtInt.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\esp32\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\CAN.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LCD.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\os\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LED.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\LCD.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\RTC.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\I2C.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Servo.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\SPI.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Switch.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_HID.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\SPI.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Servo.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\UART.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_VCP.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Pin.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\Flash.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\framebuf\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\USB_HID.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\DMA.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\select\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\struct\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\Flash.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\Timer.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\StateMachine.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\struct\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wipy\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\sys\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\ssl\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\time\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\stm\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\uctypes\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\FlashArea.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\vfs\\__init__.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\FlashArea.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zlib\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", - "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\socket\\__init__.pyi\n", "reformatted D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\zephyr\\zsensor.pyi\n", "\n", "All done! ✨ 🍰 ✨\n", @@ -413,36 +566,106 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "08:42:26 | ℹ️ micropython-stubber 1.23.2a0" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \n", - " Usage: stubber enrich [OPTIONS] \n", - " \n", - " Try 'stubber enrich --help' for help \n", - "┌─ Error ─────────────────────────────────────────────────────────────────────┐\n", - "│ Invalid value for '--docstubs' / '--source' / '-ds': Path 'repos\\\\rp2040' │\n", - "│ does not exist. │\n", - "└─────────────────────────────────────────────────────────────────────────────┘\n", - " \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" + "17:31:50 | ℹ️ micropython-stubber 1.23.2a0\n", + "17:31:50 | ℹ️ Enriching scratch with repos\\rp2040\n", + "17:31:50 | ℹ️ Enrich folder scratch.\n", + "17:31:50 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "17:31:50 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\PIOASMEmit.py\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "17:31:51 | ℹ️ Merge scratch\\micropython-reference\\rp2\\__init__.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\PIOASMEmit.py\n", + "17:31:52 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\DMA.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\PIOASMEmit.py\n", + "17:31:53 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\Flash.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "17:31:54 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\PIOASMEmit.py\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\PIO.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\rp2\\asm_pio.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\rp2\\__init__.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\DMA.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\Flash.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\irq.pyi\n", + "17:31:55 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\PIO.pyi\n", + "17:31:56 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\PIOASMEmit.py\n", + "17:31:56 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\StateMachine.pyi\n", + "17:31:56 | ℹ️ Merge scratch\\micropython-reference\\rp2\\StateMachine.pyi from \n", + "repos\\rp2040\\_rp2\\__init__.pyi\n" ] } ], @@ -450,13 +673,14 @@ "# ! git -C scratch reset .\n", "# assume root of workspace is the current directory\n", "\n", - "# pull in josverl's handcoded rp2040 stubs\n", - "!stubber enrich --params-only --stubs scratch --docstubs repos\\rp2040\n" + "if enrich_from_rp2040:\n", + " # pull in josverl's handcoded rp2040 stubs\n", + " !stubber enrich --params-only --stubs scratch --docstubs repos\\rp2040\n" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -474,352 +698,352 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "08:42:39 | ℹ️ micropython-stubber 1.23.2a0\n", - "08:42:39 | ℹ️ Enriching scratch with repos\\PyBoardTypeshed\\micropython_typesheds\n", - "08:42:39 | ℹ️ Enrich folder scratch.\n", - "08:42:40 | ℹ️ Merge scratch\\micropython-reference\\_thread\\__init__.pyi from \n", + "17:32:05 | ℹ️ micropython-stubber 1.23.2a0\n", + "17:32:05 | ℹ️ Enriching scratch with repos\\PyBoardTypeshed\\micropython_typesheds\n", + "17:32:05 | ℹ️ Enrich folder scratch.\n", + "17:32:05 | ℹ️ Merge scratch\\micropython-reference\\_thread\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\_thread.pyi\n", - "08:42:40 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", + "17:32:06 | ℹ️ Merge scratch\\micropython-reference\\array\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\array.pyi\n", - "08:42:40 | ℹ️ Change __getitem__ to @overload\n", - "08:42:40 | ℹ️ Change __setitem__ to @overload\n", - "08:42:40 | ℹ️ Merge scratch\\micropython-reference\\asyncio\\__init__.pyi from \n", + "17:32:06 | ℹ️ Change __getitem__ to @overload\n", + "17:32:06 | ℹ️ Change __setitem__ to @overload\n", + "17:32:06 | ℹ️ Merge scratch\\micropython-reference\\asyncio\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uasyncio.pyi\n", - "08:42:41 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", + "17:32:07 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\binascii.pyi\n", - "08:42:41 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", + "17:32:07 | ℹ️ Merge scratch\\micropython-reference\\binascii\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ubinascii.pyi\n", - "08:42:41 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", + "17:32:07 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\bluetooth.pyi\n", - "08:42:42 | ℹ️ Change active to @overload\n", - "08:42:42 | ℹ️ Change config to @overload\n", - "08:42:42 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", + "17:32:07 | ℹ️ Change active to @overload\n", + "17:32:07 | ℹ️ Change config to @overload\n", + "17:32:07 | ℹ️ Merge scratch\\micropython-reference\\bluetooth\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ubluetooth.pyi\n", - "08:42:43 | ℹ️ Merge scratch\\micropython-reference\\btree\\__init__.pyi from \n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\btree\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\btree.pyi\n", - "08:42:43 | ℹ️ Merge scratch\\micropython-reference\\cmath\\__init__.pyi from \n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\cmath\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\cmath.pyi\n", - "08:42:43 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\collections\\__init__.pyi from\n", "repos\\PyBoardTypeshed\\micropython_typesheds\\collections.pyi\n", - "08:42:43 | ℹ️ Change __init__ to @overload\n", - "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", + "17:32:08 | ℹ️ Change __init__ to @overload\n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\cryptolib.pyi\n", - "08:42:44 | ℹ️ Change __init__ to @overload\n", - "08:42:44 | ℹ️ Change encrypt to @overload\n", - "08:42:44 | ℹ️ Change decrypt to @overload\n", - "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", + "17:32:08 | ℹ️ Change __init__ to @overload\n", + "17:32:08 | ℹ️ Change encrypt to @overload\n", + "17:32:08 | ℹ️ Change decrypt to @overload\n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\cryptolib\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ucryptolib.pyi\n", - "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\errno.pyi\n", - "08:42:44 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\errno\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uerrno.pyi\n", - "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", + "17:32:08 | ℹ️ Merge scratch\\micropython-reference\\esp\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\esp.pyi\n", - "08:42:45 | ℹ️ Change sleep_type to @overload\n", - "08:42:45 | ℹ️ Change flash_read to @overload\n", - "08:42:45 | ℹ️ Change set_native_code_location to @overload\n", - "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\esp32\\__init__.pyi from \n", + "17:32:08 | ℹ️ Change sleep_type to @overload\n", + "17:32:08 | ℹ️ Change flash_read to @overload\n", + "17:32:08 | ℹ️ Change set_native_code_location to @overload\n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\esp32\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\esp32.pyi\n", - "08:42:45 | ℹ️ Change write_pulses to @overload\n", - "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\framebuf\\__init__.pyi from \n", + "17:32:09 | ℹ️ Change write_pulses to @overload\n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\framebuf\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\framebuf.pyi\n", - "08:42:45 | ℹ️ Change pixel to @overload\n", - "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\gc\\__init__.pyi from \n", + "17:32:09 | ℹ️ Change pixel to @overload\n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\gc\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\gc.pyi\n", - "08:42:45 | ℹ️ Change threshold to @overload\n", - "08:42:45 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", + "17:32:09 | ℹ️ Change threshold to @overload\n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\hashlib.pyi\n", - "08:42:46 | ℹ️ Change __init__ to @overload\n", - "08:42:46 | ℹ️ Change __init__ to @overload\n", - "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", + "17:32:09 | ℹ️ Change __init__ to @overload\n", + "17:32:09 | ℹ️ Change __init__ to @overload\n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\hashlib\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uhashlib.pyi\n", - "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\heapq\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\heapq.pyi\n", - "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\io\\__init__.pyi from \n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\io\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uio.pyi\n", - "08:42:46 | ℹ️ Change __init__ to @overload\n", - "08:42:46 | ℹ️ Change __init__ to @overload\n", - "08:42:46 | ℹ️ Change open to @overload\n", - "08:42:46 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", + "17:32:09 | ℹ️ Change __init__ to @overload\n", + "17:32:09 | ℹ️ Change __init__ to @overload\n", + "17:32:09 | ℹ️ Change open to @overload\n", + "17:32:09 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\json.pyi\n", - "08:42:47 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", + "17:32:10 | ℹ️ Merge scratch\\micropython-reference\\json\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ujson.pyi\n", - "08:42:47 | ℹ️ Merge scratch\\micropython-reference\\lcd160cr\\__init__.pyi from \n", + "17:32:10 | ℹ️ Merge scratch\\micropython-reference\\lcd160cr\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\lcd160cr.pyi\n", - "08:42:47 | ℹ️ Change __init__ to @overload\n", - "08:42:47 | ℹ️ Merge scratch\\micropython-reference\\machine\\__init__.pyi from \n", + "17:32:10 | ℹ️ Change __init__ to @overload\n", + "17:32:10 | ℹ️ Merge scratch\\micropython-reference\\machine\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:48 | ℹ️ Change freq to @overload\n", - "08:42:48 | ℹ️ Change lightsleep to @overload\n", - "08:42:48 | ℹ️ Change deepsleep to @overload\n", - "08:42:48 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADC.pyi from \n", + "17:32:10 | ℹ️ Change freq to @overload\n", + "17:32:10 | ℹ️ Change lightsleep to @overload\n", + "17:32:10 | ℹ️ Change deepsleep to @overload\n", + "17:32:10 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADC.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:49 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCBlock.pyi from \n", + "17:32:11 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCBlock.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:50 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCWiPy.pyi from \n", + "17:32:11 | ℹ️ Merge scratch\\micropython-reference\\machine\\ADCWiPy.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:51 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2C.pyi from \n", + "17:32:12 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2C.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:52 | ℹ️ Change __init__ to @overload\n", - "08:42:53 | ℹ️ Change init to @overload\n", - "08:42:53 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2S.pyi from \n", + "17:32:12 | ℹ️ Change __init__ to @overload\n", + "17:32:12 | ℹ️ Change init to @overload\n", + "17:32:12 | ℹ️ Merge scratch\\micropython-reference\\machine\\I2S.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:54 | ℹ️ Merge scratch\\micropython-reference\\machine\\Pin.pyi from \n", + "17:32:13 | ℹ️ Merge scratch\\micropython-reference\\machine\\Pin.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:55 | ℹ️ Change value to @overload\n", - "08:42:55 | ℹ️ Change __call__ to @overload\n", - "08:42:55 | ℹ️ Change mode to @overload\n", - "08:42:55 | ℹ️ Change pull to @overload\n", - "08:42:55 | ℹ️ Merge scratch\\micropython-reference\\machine\\PWM.pyi from \n", + "17:32:13 | ℹ️ Change value to @overload\n", + "17:32:13 | ℹ️ Change __call__ to @overload\n", + "17:32:13 | ℹ️ Change mode to @overload\n", + "17:32:13 | ℹ️ Change pull to @overload\n", + "17:32:14 | ℹ️ Merge scratch\\micropython-reference\\machine\\PWM.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:56 | ℹ️ Change freq to @overload\n", - "08:42:56 | ℹ️ Change duty_u16 to @overload\n", - "08:42:56 | ℹ️ Change duty_ns to @overload\n", - "08:42:56 | ℹ️ Merge scratch\\micropython-reference\\machine\\RTC.pyi from \n", + "17:32:14 | ℹ️ Change freq to @overload\n", + "17:32:14 | ℹ️ Change duty_u16 to @overload\n", + "17:32:14 | ℹ️ Change duty_ns to @overload\n", + "17:32:14 | ℹ️ Merge scratch\\micropython-reference\\machine\\RTC.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:57 | ℹ️ Change __init__ to @overload\n", - "08:42:57 | ℹ️ Change init to @overload\n", - "08:42:57 | ℹ️ Change alarm to @overload\n", - "08:42:57 | ℹ️ Merge scratch\\micropython-reference\\machine\\SD.pyi from \n", + "17:32:14 | ℹ️ Change __init__ to @overload\n", + "17:32:14 | ℹ️ Change init to @overload\n", + "17:32:14 | ℹ️ Change alarm to @overload\n", + "17:32:15 | ℹ️ Merge scratch\\micropython-reference\\machine\\SD.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:58 | ℹ️ Merge scratch\\micropython-reference\\machine\\SDCard.pyi from \n", + "17:32:15 | ℹ️ Merge scratch\\micropython-reference\\machine\\SDCard.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:42:59 | ℹ️ Merge scratch\\micropython-reference\\machine\\Signal.pyi from \n", + "17:32:16 | ℹ️ Merge scratch\\micropython-reference\\machine\\Signal.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:00 | ℹ️ Change __init__ to @overload\n", - "08:43:00 | ℹ️ Change value to @overload\n", - "08:43:00 | ℹ️ Merge scratch\\micropython-reference\\machine\\SPI.pyi from \n", + "17:32:16 | ℹ️ Change __init__ to @overload\n", + "17:32:16 | ℹ️ Change value to @overload\n", + "17:32:16 | ℹ️ Merge scratch\\micropython-reference\\machine\\SPI.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:01 | ℹ️ Change __init__ to @overload\n", - "08:43:01 | ℹ️ Change init to @overload\n", - "08:43:01 | ℹ️ Merge scratch\\micropython-reference\\machine\\Timer.pyi from \n", + "17:32:17 | ℹ️ Change __init__ to @overload\n", + "17:32:17 | ℹ️ Change init to @overload\n", + "17:32:17 | ℹ️ Merge scratch\\micropython-reference\\machine\\Timer.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:02 | ℹ️ Change __init__ to @overload\n", - "08:43:02 | ℹ️ Merge scratch\\micropython-reference\\machine\\TimerWiPy.pyi from \n", + "17:32:17 | ℹ️ Change __init__ to @overload\n", + "17:32:17 | ℹ️ Merge scratch\\micropython-reference\\machine\\TimerWiPy.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:03 | ℹ️ Merge scratch\\micropython-reference\\machine\\UART.pyi from \n", + "17:32:18 | ℹ️ Merge scratch\\micropython-reference\\machine\\UART.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:04 | ℹ️ Change __init__ to @overload\n", - "08:43:04 | ℹ️ Change init to @overload\n", - "08:43:04 | ℹ️ Change read to @overload\n", - "08:43:04 | ℹ️ Change readinto to @overload\n", - "08:43:05 | ℹ️ Merge scratch\\micropython-reference\\machine\\USBDevice.pyi from \n", + "17:32:18 | ℹ️ Change __init__ to @overload\n", + "17:32:18 | ℹ️ Change init to @overload\n", + "17:32:18 | ℹ️ Change read to @overload\n", + "17:32:18 | ℹ️ Change readinto to @overload\n", + "17:32:18 | ℹ️ Merge scratch\\micropython-reference\\machine\\USBDevice.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:05 | ℹ️ Merge scratch\\micropython-reference\\machine\\WDT.pyi from \n", + "17:32:19 | ℹ️ Merge scratch\\micropython-reference\\machine\\WDT.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\machine.pyi\n", - "08:43:06 | ℹ️ Merge scratch\\micropython-reference\\math\\__init__.pyi from \n", + "17:32:19 | ℹ️ Merge scratch\\micropython-reference\\math\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\math.pyi\n", - "08:43:07 | ℹ️ Merge scratch\\micropython-reference\\micropython\\__init__.pyi from\n", + "17:32:19 | ℹ️ Merge scratch\\micropython-reference\\micropython\\__init__.pyi from\n", "repos\\PyBoardTypeshed\\micropython_typesheds\\micropython.pyi\n", - "08:43:07 | ℹ️ Change opt_level to @overload\n", - "08:43:07 | ℹ️ Change mem_info to @overload\n", - "08:43:07 | ℹ️ Change qstr_info to @overload\n", - "08:43:07 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", + "17:32:19 | ℹ️ Change opt_level to @overload\n", + "17:32:19 | ℹ️ Change mem_info to @overload\n", + "17:32:19 | ℹ️ Change qstr_info to @overload\n", + "17:32:19 | ℹ️ Merge scratch\\micropython-reference\\neopixel\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\neopixel.pyi\n", - "08:43:07 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", + "17:32:20 | ℹ️ Merge scratch\\micropython-reference\\network\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "08:43:08 | ℹ️ Change active to @overload\n", - "08:43:08 | ℹ️ Change connect to @overload\n", - "08:43:08 | ℹ️ Change status to @overload\n", - "08:43:08 | ℹ️ Change ifconfig to @overload\n", - "08:43:08 | ℹ️ Change config to @overload\n", - "08:43:08 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", + "17:32:20 | ℹ️ Change active to @overload\n", + "17:32:20 | ℹ️ Change connect to @overload\n", + "17:32:20 | ℹ️ Change status to @overload\n", + "17:32:20 | ℹ️ Change ifconfig to @overload\n", + "17:32:20 | ℹ️ Change config to @overload\n", + "17:32:20 | ℹ️ Merge scratch\\micropython-reference\\network\\LAN.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "08:43:08 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", + "17:32:20 | ℹ️ Merge scratch\\micropython-reference\\network\\PPP.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "08:43:09 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", + "17:32:20 | ℹ️ Merge scratch\\micropython-reference\\network\\WIZNET5K.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "08:43:09 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", + "17:32:20 | ℹ️ Merge scratch\\micropython-reference\\network\\WLAN.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "08:43:10 | ℹ️ Change active to @overload\n", - "08:43:10 | ℹ️ Change status to @overload\n", - "08:43:10 | ℹ️ Change ifconfig to @overload\n", - "08:43:10 | ℹ️ Change config to @overload\n", - "08:43:10 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", + "17:32:21 | ℹ️ Change active to @overload\n", + "17:32:21 | ℹ️ Change status to @overload\n", + "17:32:21 | ℹ️ Change ifconfig to @overload\n", + "17:32:21 | ℹ️ Change config to @overload\n", + "17:32:21 | ℹ️ Merge scratch\\micropython-reference\\network\\WLANWiPy.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\network.pyi\n", - "08:43:10 | ℹ️ Change __init__ to @overload\n", - "08:43:10 | ℹ️ Change mode to @overload\n", - "08:43:10 | ℹ️ Change ssid to @overload\n", - "08:43:10 | ℹ️ Change auth to @overload\n", - "08:43:10 | ℹ️ Change channel to @overload\n", - "08:43:10 | ℹ️ Change antenna to @overload\n", - "08:43:10 | ℹ️ Change mac to @overload\n", - "08:43:11 | ℹ️ Merge scratch\\micropython-reference\\os\\__init__.pyi from \n", + "17:32:21 | ℹ️ Change __init__ to @overload\n", + "17:32:21 | ℹ️ Change mode to @overload\n", + "17:32:21 | ℹ️ Change ssid to @overload\n", + "17:32:21 | ℹ️ Change auth to @overload\n", + "17:32:21 | ℹ️ Change channel to @overload\n", + "17:32:21 | ℹ️ Change antenna to @overload\n", + "17:32:21 | ℹ️ Change mac to @overload\n", + "17:32:21 | ℹ️ Merge scratch\\micropython-reference\\os\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi\n", - "08:43:11 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "17:32:21 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", "Syntax Error @ 26:1.\n", "parser error: error at 25:0: expected NAME\n", "\n", "from typing_extensions import TypeAlias\n", " ^\n", - "08:43:11 | ❌ Error parsing scratch\\micropython-reference\\os\\__init__.pyi\n", - "08:43:11 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "17:32:21 | ❌ Error parsing scratch\\micropython-reference\\os\\__init__.pyi\n", + "17:32:21 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", "Syntax Error @ 26:1.\n", "parser error: error at 25:0: expected NAME\n", "\n", "from typing_extensions import TypeAlias\n", " ^\n", - "08:43:11 | ℹ️ Merge scratch\\micropython-reference\\pyb\\__init__.pyi from \n", + "17:32:21 | ℹ️ Merge scratch\\micropython-reference\\pyb\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:13 | ℹ️ Change freq to @overload\n", - "08:43:13 | ℹ️ Change hid to @overload\n", - "08:43:13 | ℹ️ Change info to @overload\n", - "08:43:13 | ℹ️ Change mount to @overload\n", - "08:43:13 | ℹ️ Change repl_uart to @overload\n", - "08:43:13 | ℹ️ Change usb_mode to @overload\n", - "08:43:13 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Accel.pyi from \n", + "17:32:22 | ℹ️ Change freq to @overload\n", + "17:32:22 | ℹ️ Change hid to @overload\n", + "17:32:22 | ℹ️ Change info to @overload\n", + "17:32:22 | ℹ️ Change mount to @overload\n", + "17:32:22 | ℹ️ Change repl_uart to @overload\n", + "17:32:22 | ℹ️ Change usb_mode to @overload\n", + "17:32:22 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Accel.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:15 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ADC.pyi from \n", + "17:32:23 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ADC.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:17 | ℹ️ Merge scratch\\micropython-reference\\pyb\\CAN.pyi from \n", + "17:32:24 | ℹ️ Merge scratch\\micropython-reference\\pyb\\CAN.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:19 | ℹ️ Change info to @overload\n", - "08:43:19 | ℹ️ Change setfilter to @overload\n", - "08:43:19 | ℹ️ Change recv to @overload\n", - "08:43:19 | ℹ️ Merge scratch\\micropython-reference\\pyb\\DAC.pyi from \n", + "17:32:24 | ℹ️ Change info to @overload\n", + "17:32:24 | ℹ️ Change setfilter to @overload\n", + "17:32:24 | ℹ️ Change recv to @overload\n", + "17:32:25 | ℹ️ Merge scratch\\micropython-reference\\pyb\\DAC.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:21 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ExtInt.pyi from \n", + "17:32:25 | ℹ️ Merge scratch\\micropython-reference\\pyb\\ExtInt.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:22 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Flash.pyi from \n", + "17:32:26 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Flash.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:24 | ℹ️ Change __init__ to @overload\n", - "08:43:24 | ℹ️ Merge scratch\\micropython-reference\\pyb\\I2C.pyi from \n", + "17:32:27 | ℹ️ Change __init__ to @overload\n", + "17:32:27 | ℹ️ Merge scratch\\micropython-reference\\pyb\\I2C.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:26 | ℹ️ Change mem_read to @overload\n", - "08:43:26 | ℹ️ Change recv to @overload\n", - "08:43:26 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LCD.pyi from \n", + "17:32:28 | ℹ️ Change mem_read to @overload\n", + "17:32:28 | ℹ️ Change recv to @overload\n", + "17:32:28 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LCD.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:28 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LED.pyi from \n", + "17:32:29 | ℹ️ Merge scratch\\micropython-reference\\pyb\\LED.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:30 | ℹ️ Change intensity to @overload\n", - "08:43:30 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Pin.pyi from \n", + "17:32:29 | ℹ️ Change intensity to @overload\n", + "17:32:29 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Pin.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:32 | ℹ️ Change debug to @overload\n", - "08:43:32 | ℹ️ Change dict to @overload\n", - "08:43:32 | ℹ️ Change mapper to @overload\n", - "08:43:32 | ℹ️ Change value to @overload\n", - "08:43:32 | ℹ️ Merge scratch\\micropython-reference\\pyb\\RTC.pyi from \n", + "17:32:30 | ℹ️ Change debug to @overload\n", + "17:32:30 | ℹ️ Change dict to @overload\n", + "17:32:30 | ℹ️ Change mapper to @overload\n", + "17:32:30 | ℹ️ Change value to @overload\n", + "17:32:30 | ℹ️ Merge scratch\\micropython-reference\\pyb\\RTC.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:34 | ℹ️ Change calibration to @overload\n", - "08:43:34 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Servo.pyi from \n", + "17:32:31 | ℹ️ Change calibration to @overload\n", + "17:32:31 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Servo.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:36 | ℹ️ Change angle to @overload\n", - "08:43:36 | ℹ️ Change speed to @overload\n", - "08:43:36 | ℹ️ Change calibration to @overload\n", - "08:43:36 | ℹ️ Merge scratch\\micropython-reference\\pyb\\SPI.pyi from \n", + "17:32:32 | ℹ️ Change angle to @overload\n", + "17:32:32 | ℹ️ Change speed to @overload\n", + "17:32:32 | ℹ️ Change calibration to @overload\n", + "17:32:32 | ℹ️ Merge scratch\\micropython-reference\\pyb\\SPI.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:38 | ℹ️ Change __init__ to @overload\n", - "08:43:38 | ℹ️ Change init to @overload\n", - "08:43:38 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Switch.pyi from \n", + "17:32:33 | ℹ️ Change __init__ to @overload\n", + "17:32:33 | ℹ️ Change init to @overload\n", + "17:32:33 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Switch.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:41 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Timer.pyi from \n", + "17:32:35 | ℹ️ Merge scratch\\micropython-reference\\pyb\\Timer.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:45 | ℹ️ Change __init__ to @overload\n", - "08:43:45 | ℹ️ Change init to @overload\n", - "08:43:45 | ℹ️ Change channel to @overload\n", - "08:43:45 | ℹ️ Change counter to @overload\n", - "08:43:45 | ℹ️ Change freq to @overload\n", - "08:43:45 | ℹ️ Change period to @overload\n", - "08:43:45 | ℹ️ Change prescaler to @overload\n", - "08:43:45 | ℹ️ Change capture to @overload\n", - "08:43:45 | ℹ️ Change compare to @overload\n", - "08:43:45 | ℹ️ Change pulse_width to @overload\n", - "08:43:45 | ℹ️ Change pulse_width_percent to @overload\n", - "08:43:45 | ℹ️ Merge scratch\\micropython-reference\\pyb\\UART.pyi from \n", + "17:32:36 | ℹ️ Change __init__ to @overload\n", + "17:32:36 | ℹ️ Change init to @overload\n", + "17:32:36 | ℹ️ Change channel to @overload\n", + "17:32:36 | ℹ️ Change counter to @overload\n", + "17:32:36 | ℹ️ Change freq to @overload\n", + "17:32:36 | ℹ️ Change period to @overload\n", + "17:32:36 | ℹ️ Change prescaler to @overload\n", + "17:32:36 | ℹ️ Change capture to @overload\n", + "17:32:36 | ℹ️ Change compare to @overload\n", + "17:32:36 | ℹ️ Change pulse_width to @overload\n", + "17:32:36 | ℹ️ Change pulse_width_percent to @overload\n", + "17:32:36 | ℹ️ Merge scratch\\micropython-reference\\pyb\\UART.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:47 | ℹ️ Change __init__ to @overload\n", - "08:43:47 | ℹ️ Change read to @overload\n", - "08:43:47 | ℹ️ Change readinto to @overload\n", - "08:43:47 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_HID.pyi from \n", + "17:32:37 | ℹ️ Change __init__ to @overload\n", + "17:32:37 | ℹ️ Change read to @overload\n", + "17:32:37 | ℹ️ Change readinto to @overload\n", + "17:32:37 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_HID.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:48 | ℹ️ Change recv to @overload\n", - "08:43:48 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_VCP.pyi from \n", + "17:32:38 | ℹ️ Change recv to @overload\n", + "17:32:38 | ℹ️ Merge scratch\\micropython-reference\\pyb\\USB_VCP.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\pyb.pyi\n", - "08:43:50 | ℹ️ Change read to @overload\n", - "08:43:50 | ℹ️ Change readinto to @overload\n", - "08:43:50 | ℹ️ Change recv to @overload\n", - "08:43:50 | ℹ️ Merge scratch\\micropython-reference\\random\\__init__.pyi from \n", + "17:32:38 | ℹ️ Change read to @overload\n", + "17:32:38 | ℹ️ Change readinto to @overload\n", + "17:32:38 | ℹ️ Change recv to @overload\n", + "17:32:38 | ℹ️ Merge scratch\\micropython-reference\\random\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\random.pyi\n", - "08:43:50 | ℹ️ Change randrange to @overload\n", - "08:43:50 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", + "17:32:39 | ℹ️ Change randrange to @overload\n", + "17:32:39 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\select.pyi\n", - "08:43:51 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", + "17:32:39 | ℹ️ Merge scratch\\micropython-reference\\select\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uselect.pyi\n", - "08:43:51 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", + "17:32:39 | ℹ️ Merge scratch\\micropython-reference\\socket\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\socket.pyi\n", - "08:43:51 | ℹ️ Change makefile to @overload\n", - "08:43:51 | ℹ️ Change read to @overload\n", - "08:43:51 | ℹ️ Change readinto to @overload\n", - "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", + "17:32:39 | ℹ️ Change makefile to @overload\n", + "17:32:39 | ℹ️ Change read to @overload\n", + "17:32:39 | ℹ️ Change readinto to @overload\n", + "17:32:39 | ℹ️ Merge scratch\\micropython-reference\\ssl\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ssl.pyi\n", - "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\stm\\__init__.pyi from \n", + "17:32:39 | ℹ️ Merge scratch\\micropython-reference\\stm\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\stm.pyi\n", - "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\struct\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\struct.pyi\n", - "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\sys.pyi\n", - "08:43:52 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\sys\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\usys.pyi\n", - "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\time\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\time.pyi\n", - "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\uarray.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\array.pyi\n", - "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\binascii.pyi\n", - "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\ubinascii.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ubinascii.pyi\n", - "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\uctypes\\__init__.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\uctypes\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uctypes.pyi\n", - "08:43:53 | ℹ️ Merge scratch\\micropython-reference\\uio.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\uio.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uio.pyi\n", - "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\json.pyi\n", - "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", + "17:32:40 | ℹ️ Merge scratch\\micropython-reference\\ujson.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ujson.pyi\n", - "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\uos.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\uos.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi\n", - "08:43:54 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "17:32:41 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", "Syntax Error @ 26:1.\n", "parser error: error at 25:0: expected NAME\n", "\n", "from typing_extensions import TypeAlias\n", " ^\n", - "08:43:54 | ❌ Error parsing scratch\\micropython-reference\\uos.pyi\n", - "08:43:54 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", + "17:32:41 | ❌ Error parsing scratch\\micropython-reference\\uos.pyi\n", + "17:32:41 | ❌ Error parsing repos\\PyBoardTypeshed\\micropython_typesheds\\os.pyi:\n", "Syntax Error @ 26:1.\n", "parser error: error at 25:0: expected NAME\n", "\n", "from typing_extensions import TypeAlias\n", " ^\n", - "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\select.pyi\n", - "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\uselect.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uselect.pyi\n", - "08:43:54 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\usocket.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\socket.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\ussl.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\ssl.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\ustruct.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\struct.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\utime.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\time.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uzlib.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\uzlib.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\zlib.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\wipy\\__init__.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\wipy\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\wipy.pyi\n", - "08:43:55 | ℹ️ Change heartbeat to @overload\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", + "17:32:41 | ℹ️ Change heartbeat to @overload\n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\uzlib.pyi\n", - "08:43:55 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", + "17:32:41 | ℹ️ Merge scratch\\micropython-reference\\zlib\\__init__.pyi from \n", "repos\\PyBoardTypeshed\\micropython_typesheds\\zlib.pyi\n" ] } @@ -831,7 +1055,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -849,14 +1073,28 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 22, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "A subdirectory or file scratch\\micropython-reference\\_rp2 already exists.\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "The system cannot find the path specified.\n" + ".\\repos\\rp2040\\_rp2\\DMA.pyi\n", + ".\\repos\\rp2040\\_rp2\\Flash.pyi\n", + ".\\repos\\rp2040\\_rp2\\irq.pyi\n", + ".\\repos\\rp2040\\_rp2\\PIO.pyi\n", + ".\\repos\\rp2040\\_rp2\\PIOASMEmit.py\n", + ".\\repos\\rp2040\\_rp2\\StateMachine.pyi\n", + ".\\repos\\rp2040\\_rp2\\__init__.pyi\n", + " 7 file(s) copied.\n" ] } ], @@ -1011,9 +1249,9 @@ "source": [ "# clean / change rp2 / _rp2\n", "\n", - "if not MIT:\n", - " # Append the class PIOASMEmit to the rp2 module\n", - " append_partial_module(\"rp2\")\n", + "# # if not MIT:\n", + "# # Append the class PIOASMEmit to the rp2 module\n", + "# append_partial_module(\"rp2\")\n", "\n", "\n", "clean_rp2_modules = False\n", @@ -1025,7 +1263,6 @@ " submodule = reference_p / f\"rp2/{name}.pyi\"\n", " submodule.unlink(missing_ok=True)\n", "\n", - "\n", " # remove the relative imports from the rp2 module\n", " rp2 = Path(reference_p / \"rp2\" / \"__init__.pyi\")\n", "\n", @@ -1033,17 +1270,17 @@ " # Read the contents of the file\n", " lines = f.readlines()\n", "\n", - "\n", " # Open the file in write mode\n", "\n", - " with rp2.open(mode=\"w\", encoding=\"utf-8\") as f:\n", - " # Iterate over each line in the file\n", - " for line in lines:\n", - " # Check if the line starts with\n", - " if line.startswith(\"from .\") or line == \"from rp2 import PIOASMEmit\":\n", - " line = \"# \" + line\n", - " # Write the modified line to the file\n", - " f.write(line)" + " # with rp2.open(mode=\"w\", encoding=\"utf-8\") as f:\n", + " # # Iterate over each line in the file\n", + " # for line in lines:\n", + " # # Check if the line starts with\n", + " # if line.startswith(\"from .\") or line == \"from rp2 import PIOASMEmit\":\n", + " # line = \"# \" + line\n", + "\n", + " # # Write the modified line to the file\n", + " # f.write(line)" ] }, { @@ -1066,19 +1303,19 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Found 1064 errors (1064 fixed, 0 remaining).\n" + "All checks passed!\n" ] } ], "source": [ - "# Clean formatting and upgrate typing notation to 3.10\n", + "# Clean formatting and upgrade typing notation to 3.10\n", "# except :\n", "# - non-pep585-annotation (UP006) - Keep from typing import List to support Python 3.7 , 3.8 \n", " \n", @@ -1099,7 +1336,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1200,20 +1437,38 @@ "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\_collections_abc.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\__init__.pyi\n", "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_mpy_shed\\collections\\__init__.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\Flash.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\StateMachine.pyi\n", - "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\__init__.pyi\n" + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\DMA.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\_rp2\\Flash.pyi\n" ] } ], "source": [ "# clean up the formatting and import orders by running isort\n", - "! isort {reference_p}" + "! isort {reference_p}\n", + "\n", + "# remove duplicate comments created by merging multiple files \n", + "\n", + "def remove_duplicate_comments(file):\n", + " with open(file, encoding=\"utf-8\") as f:\n", + " lines = f.readlines()\n", + "\n", + " comments = {}\n", + " with open(file, \"w\", encoding=\"utf-8\") as f:\n", + " for line in lines:\n", + " if line.startswith(\"# MCU:\") or line.startswith(\"# Stubber\"):\n", + " if line in comments:\n", + " continue\n", + " comments[line] = True\n", + " f.write(line)\n", + "\n", + "\n", + "for file in reference_p.rglob(\"*.pyi\"):\n", + " remove_duplicate_comments(file)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1225,9 +1480,6 @@ "WARNING: there is a new pyright version available (v1.1.388 -> v1.1.389).\n", "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`\n", "\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\bluetooth\\__init__.pyi:\u001b[33m339\u001b[39m:\u001b[33m80\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_IRQ\" appears only once in generic function signature\n", - "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\espnow\\__init__.pyi:\u001b[33m468\u001b[39m:\u001b[33m35\u001b[39m - \u001b[34minformation\u001b[39m: \"value\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi\n", @@ -1238,9 +1490,6 @@ " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\io\\__init__.pyi:\u001b[33m224\u001b[39m:\u001b[33m73\u001b[39m - \u001b[34minformation\u001b[39m: \"FileIO\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\TimerWiPy.pyi:\u001b[33m48\u001b[39m:\u001b[33m58\u001b[39m - \u001b[34minformation\u001b[39m: \"POSITIVE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\machine\\UART.pyi:\u001b[33m460\u001b[39m:\u001b[33m10\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_IRQ\" appears only once in generic function signature\n", - "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m44\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\openamp\\__init__.pyi:\u001b[33m56\u001b[39m:\u001b[33m68\u001b[39m - \u001b[34minformation\u001b[39m: \"ENDPOINT_ADDR_ANY\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", @@ -1249,9 +1498,6 @@ " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\pyb\\DAC.pyi:\u001b[33m72\u001b[39m:\u001b[33m12\u001b[39m - \u001b[34minformation\u001b[39m: Unsupported escape sequence in string literal\u001b[90m (reportInvalidStringEscapeSequence)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\random\\__init__.pyi:\u001b[33m117\u001b[39m:\u001b[33m7\u001b[39m - \u001b[36mwarning\u001b[39m: Type variable \"_T\" used in generic Protocol \"Subscriptable\" should be covariant\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", - "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi\n", - " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\rp2\\PIO.pyi:\u001b[33m108\u001b[39m:\u001b[33m95\u001b[39m - \u001b[36mwarning\u001b[39m: TypeVar \"_IRQ\" appears only once in generic function signature\n", - "   Use \"object\" instead\u001b[90m (reportInvalidTypeVarUse)\u001b[39m\n", "d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m59\u001b[39m:\u001b[33m14\u001b[39m - \u001b[34minformation\u001b[39m: \"SWAP_NONE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m60\u001b[39m:\u001b[33m15\u001b[39m - \u001b[34minformation\u001b[39m: \"ROUTE_PLAYBACK_RECORD\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", @@ -1263,7 +1509,7 @@ " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m68\u001b[39m:\u001b[33m21\u001b[39m - \u001b[34minformation\u001b[39m: \"WM8960_I2C_ADDR\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m98\u001b[39m:\u001b[33m50\u001b[39m - \u001b[34minformation\u001b[39m: \"MUTE_FAST\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", " d:\\mypython\\micropython-stubber\\scratch\\micropython-reference\\wm8960\\__init__.pyi:\u001b[33m152\u001b[39m:\u001b[33m38\u001b[39m - \u001b[34minformation\u001b[39m: \"ALC_MODE\" is not defined\u001b[90m (reportUndefinedVariable)\u001b[39m\n", - "0 errors, 4 warnings, 21 informations \n" + "0 errors, 1 warning, 21 informations \n" ] } ], diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 17ad68ae..e4339d50 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -283,7 +283,7 @@ class Fix: + [ "from _mpy_shed import IOBase", ], - "lcd160cr": ANY_BUF + ["from machine.SPI import SPI"], # uses SPI + "lcd160cr": ANY_BUF + ["from pyb import SPI"], # uses SPI # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such "machine.ADC": [ "from .Pin import Pin", @@ -306,7 +306,8 @@ class Fix: "from _mpy_shed import _IRQ", ], # uses Pin "micropython": [ - "from typing import Tuple, Final, TypeVar", + "from typing import Tuple, Final", + "from typing_extensions import TypeVar", '_T = TypeVar("_T")', '_F = TypeVar("_F", bound=Callable[..., Any])', 'Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) # constant', @@ -346,7 +347,14 @@ class Fix: "from abc import ABC, abstractmethod", "from .Pin import Pin", ], # uses Pin - # "rp2": ["from .PIO import PIO"], # + "rp2": [ + # import classess from _rp2 + "from _rp2.DMA import DMA as DMA", + "from _rp2.Flash import Flash as Flash", + "from _rp2.StateMachine import StateMachine as StateMachine", + "from _rp2.PIO import PIO as PIO", + "from _rp2.PIOASMEmit import PIOASMEmit", + ], # "_rp2.DMA": ["from _mpy_shed import _IRQ"], "_rp2.PIO": ["from _mpy_shed import _IRQ"], "rp2.PIO": ["from _mpy_shed import _IRQ"], diff --git a/verify-reference.ipynb b/verify-reference.ipynb new file mode 100644 index 00000000..14de2add --- /dev/null +++ b/verify-reference.ipynb @@ -0,0 +1,6037 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "tests to use @overloads in a stub package \n", + "\n", + "Version \n", + "Requirements:\n", + " - [x] create board stubs of same version \n", + " - [x] samd seeed_wio_terminal\n", + " - [x] create docstubs\n", + " - [ ] Integrate params and @overloads from reference stubs\n", + " - [ ] Need additional fixup \n", + " - [x] merge with board stubs \n", + " - [x] create stub package port\n", + " - [x] create stub package port + board\n", + "\n", + " \n", + "FIXME: \n", + " - [ ] Need additional cleanup after building a package \n", + " - [ ] add _mpy_shed to micropython-stdlib-stubs package or as a independent package micropython-typeshed ?\n", + " - [ ] aadd _rp2 module to all builds of the rp2 port \n", + "\n", + "\n", + " \n", + "- [ ] run test \n", + "- [ ] manual inspection on resolving the stubs\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# set parameters\n", + "from pathlib import Path\n", + "\n", + "version = \"v1.24.0\"\n", + "flat_version = version.replace(\".\", \"_\")\n", + "\n", + "mps_p = Path(\"./repos/micropython-stubs\")\n", + "# Destination\n", + "reference_p = mps_p / \"micropython-reference\"\n", + "\n", + "docstubs_p = mps_p / f\"stubs/micropython-{flat_version}-docstubs\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18:04:22 | ℹ️ micropython-stubber 1.23.2a0\n", + "18:04:22 | ℹ️ fetch updates\n", + "18:04:24 | ℹ️ Switching to v1.24.0\n", + "18:04:31 | ℹ️ repos\\micropython v1.24.0-dirty\n", + "18:04:31 | ℹ️ repos\\micropython-lib v1.24.0\n", + "18:04:31 | ℹ️ repos\\micropython\\lib\\micropython-lib v1.24.0\n", + "18:04:31 | ℹ️ Get docstubs for MicroPython v1.24.0\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\array\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\asyncio\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\binascii\\__init__.py\n", + "i\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\bluetooth\\__init__.p\n", + "yi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\btree\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\cmath\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\collections\\__init__\n", + ".pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\cryptolib\\__init__.p\n", + "yi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\deflate\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\errno\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\esp\\__init__.pyi\n", + "18:04:31 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\esp32\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\espnow\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\framebuf\\__init__.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\gc\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\gzip\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\hashlib\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\heapq\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\io\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\json\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\lcd160cr\\__init__.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\math\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\micropython\\__init__\n", + ".pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\neopixel\\__init__.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\openamp\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\os\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\platform\\__init__.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\random\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\select\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\stm\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\sys\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\time\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uctypes\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\vfs\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\wipy\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\wm8960\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.py\n", + "i\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi\n", + "18:04:32 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\_thread\\__init__.pyi\n", + "18:04:32 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "18:04:35 | ℹ️ Running autoflake on: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\n", + "18:04:36 | ℹ️ ::group:: Done\n" + ] + } + ], + "source": [ + "! stubber docstubs --version {version}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_runner.py\", line 143, in transform_module\n", + " output_tree = transformer.transform_module(input_tree)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_command.py\", line 87, in transform_module\n", + " tree = self._instantiate_and_run(transform, tree)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_command.py\", line 57, in _instantiate_and_run\n", + " return inst.transform_module(tree)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_codemod.py\", line 108, in transform_module\n", + " return self.transform_module_impl(tree_with_metadata)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_visitor.py\", line 32, in transform_module_impl\n", + " return tree.visit(self)\n", + " ^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_nodes\\module.py\", line 89, in visit\n", + " result = super(Module, self).visit(visitor)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_nodes\\base.py\", line 236, in visit\n", + " leave_result = visitor.on_leave(self, with_updated_children)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\matchers\\_visitors.py\", line 519, in on_leave\n", + " retval = CSTTransformer.on_leave(self, original_node, updated_node)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_visitors.py\", line 71, in on_leave\n", + " updated_node = leave_func(original_node, updated_node)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\visitors\\_add_imports.py\", line 431, in leave_Module\n", + " *[\n", + " ^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\visitors\\_add_imports.py\", line 432, in \n", + " parse_statement(\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_parser\\entrypoints.py\", line 138, in parse_statement\n", + " result = _parse(\n", + " ^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_parser\\entrypoints.py\", line 55, in _parse\n", + " return parse(source_str)\n", + " ^^^^^^^^^^^^^^^^^\n", + "libcst._exceptions.ParserSyntaxError: Syntax Error @ 1:1.\n", + "parser error: error at 1:32: expected one of ;, NEWLINE\n", + "\n", + "from _collections_abc import *, __all__ as __all__\n", + "^\n", + "\n", + "Traceback (most recent call last):\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_runner.py\", line 143, in transform_module\n", + " output_tree = transformer.transform_module(input_tree)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_command.py\", line 87, in transform_module\n", + " tree = self._instantiate_and_run(transform, tree)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_command.py\", line 57, in _instantiate_and_run\n", + " return inst.transform_module(tree)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_codemod.py\", line 108, in transform_module\n", + " return self.transform_module_impl(tree_with_metadata)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\_visitor.py\", line 32, in transform_module_impl\n", + " return tree.visit(self)\n", + " ^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_nodes\\module.py\", line 89, in visit\n", + " result = super(Module, self).visit(visitor)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_nodes\\base.py\", line 236, in visit\n", + " leave_result = visitor.on_leave(self, with_updated_children)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\matchers\\_visitors.py\", line 519, in on_leave\n", + " retval = CSTTransformer.on_leave(self, original_node, updated_node)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_visitors.py\", line 71, in on_leave\n", + " updated_node = leave_func(original_node, updated_node)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\visitors\\_add_imports.py\", line 431, in leave_Module\n", + " *[\n", + " ^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\codemod\\visitors\\_add_imports.py\", line 432, in \n", + " parse_statement(\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_parser\\entrypoints.py\", line 138, in parse_statement\n", + " result = _parse(\n", + " ^^^^^^^\n", + " File \"D:\\mypython\\micropython-stubber\\.venv\\Lib\\site-packages\\libcst\\_parser\\entrypoints.py\", line 55, in _parse\n", + " return parse(source_str)\n", + " ^^^^^^^^^^^^^^^^^\n", + "libcst._exceptions.ParserSyntaxError: Syntax Error @ 1:1.\n", + "parser error: error at 1:32: expected one of ;, NEWLINE\n", + "\n", + "from _collections_abc import *, __all__ as __all__, dict_items, dict_keys, dict_values\n", + "^\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18:04:43 | ℹ️ micropython-stubber 1.23.2a0\n", + "18:04:43 | ℹ️ Enriching \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs with \n", + "repos\\micropython-stubs\\micropython-reference\n", + "18:04:43 | ℹ️ Enrich folder \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs.\n", + "18:04:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\_thread\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_thread\\__init__.pyi\n", + "18:04:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\array\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\uarray.pyi\n", + "18:04:43 | ℹ️ add: from array import *\n", + "18:04:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\array\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\array\\__init__.pyi\n", + "18:04:43 | ℹ️ Change __getitem__ to @overload\n", + "18:04:43 | ℹ️ Change __setitem__ to @overload\n", + "18:04:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\asyncio\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\asyncio\\__init__.pyi\n", + "18:04:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\binascii\\__init__.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\ubinascii.pyi\n", + "18:04:44 | ℹ️ add: from binascii import *\n", + "18:04:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\binascii\\__init__.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\binascii\\__init__.pyi\n", + "18:04:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\bluetooth\\__init__.p\n", + "yi from repos\\micropython-stubs\\micropython-reference\\bluetooth\\__init__.pyi\n", + "18:04:44 | ℹ️ Change active to @overload\n", + "18:04:44 | ℹ️ Change config to @overload\n", + "18:04:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\btree\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\btree\\__init__.pyi\n", + "18:04:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\cmath\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\cmath\\__init__.pyi\n", + "18:04:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\collections\\__init__\n", + ".pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\collections\\__init__.pyi\n", + "18:04:44 | ℹ️ Change __init__ to @overload\n", + "18:04:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\collections\\__init__\n", + ".pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_mpy_shed\\collections\\abc.pyi\n", + "18:04:45 | ℹ️ add: from _collections_abc import *\n", + "18:04:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\collections\\__init__\n", + ".pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_mpy_shed\\collections\\__init__.py\n", + "i\n", + "18:04:45 | ℹ️ Change __init__ to @overload\n", + "18:04:45 | ℹ️ add: from _collections_abc import *\n", + "18:04:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\cryptolib\\__init__.p\n", + "yi from repos\\micropython-stubs\\micropython-reference\\cryptolib\\__init__.pyi\n", + "18:04:46 | ℹ️ Change __init__ to @overload\n", + "18:04:46 | ℹ️ Change encrypt to @overload\n", + "18:04:46 | ℹ️ Change decrypt to @overload\n", + "18:04:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\deflate\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\deflate\\__init__.pyi\n", + "18:04:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\errno\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\errno\\__init__.pyi\n", + "18:04:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\esp\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\esp\\__init__.pyi\n", + "18:04:46 | ℹ️ Change sleep_type to @overload\n", + "18:04:46 | ℹ️ Change flash_read to @overload\n", + "18:04:46 | ℹ️ Change set_native_code_location to @overload\n", + "18:04:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\esp32\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\esp32\\__init__.pyi\n", + "18:04:47 | ℹ️ Change write_pulses to @overload\n", + "18:04:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\espnow\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\espnow\\__init__.pyi\n", + "18:04:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\framebuf\\__init__.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\framebuf\\__init__.pyi\n", + "18:04:48 | ℹ️ Change pixel to @overload\n", + "18:04:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\gc\\__init__.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\gc\\__init__.pyi\n", + "18:04:48 | ℹ️ Change threshold to @overload\n", + "18:04:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\gzip\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\gzip\\__init__.pyi\n", + "18:04:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\hashlib\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\hashlib\\__init__.pyi\n", + "18:04:48 | ℹ️ Change __init__ to @overload\n", + "18:04:48 | ℹ️ Change __init__ to @overload\n", + "18:04:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\heapq\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\heapq\\__init__.pyi\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\io\\__init__.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\uio.pyi\n", + "18:04:49 | ℹ️ add: from io import *\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\io\\__init__.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\io\\__init__.pyi\n", + "18:04:49 | ℹ️ Change __init__ to @overload\n", + "18:04:49 | ℹ️ Change __init__ to @overload\n", + "18:04:49 | ℹ️ Change open to @overload\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\json\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\ujson.pyi\n", + "18:04:49 | ℹ️ add: from json import *\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\json\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\json\\__init__.pyi\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\lcd160cr\\__init__.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\lcd160cr\\__init__.pyi\n", + "18:04:49 | ℹ️ Change __init__ to @overload\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:04:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:04:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:04:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:04:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:04:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:04:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:04:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:04:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:04:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:04:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:04:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:04:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:04:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:04:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:04:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:04:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:04:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:04:52 | ℹ️ Change freq to @overload\n", + "18:04:52 | ℹ️ Change lightsleep to @overload\n", + "18:04:53 | ℹ️ Change deepsleep to @overload\n", + "18:04:53 | ℹ️ add: from ADC import *\n", + "18:04:53 | ℹ️ add: from ADCBlock import *\n", + "18:04:53 | ℹ️ add: from I2C import *\n", + "18:04:53 | ℹ️ add: from I2S import *\n", + "18:04:53 | ℹ️ add: from Pin import *\n", + "18:04:53 | ℹ️ add: from PWM import *\n", + "18:04:53 | ℹ️ add: from RTC import *\n", + "18:04:53 | ℹ️ add: from SD import *\n", + "18:04:53 | ℹ️ add: from SDCard import *\n", + "18:04:53 | ℹ️ add: from Signal import *\n", + "18:04:53 | ℹ️ add: from SPI import *\n", + "18:04:53 | ℹ️ add: from Timer import *\n", + "18:04:53 | ℹ️ add: from UART import *\n", + "18:04:53 | ℹ️ add: from USBDevice import *\n", + "18:04:53 | ℹ️ add: from WDT import *\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:04:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:04:54 | ℹ️ add: from ADC import *\n", + "18:04:54 | ℹ️ add: from ADCBlock import *\n", + "18:04:54 | ℹ️ add: from I2C import *\n", + "18:04:54 | ℹ️ add: from I2S import *\n", + "18:04:54 | ℹ️ add: from Pin import *\n", + "18:04:54 | ℹ️ add: from PWM import *\n", + "18:04:54 | ℹ️ add: from RTC import *\n", + "18:04:54 | ℹ️ add: from SD import *\n", + "18:04:54 | ℹ️ add: from SDCard import *\n", + "18:04:54 | ℹ️ add: from Signal import *\n", + "18:04:54 | ℹ️ add: from SPI import *\n", + "18:04:54 | ℹ️ add: from Timer import *\n", + "18:04:54 | ℹ️ add: from UART import *\n", + "18:04:54 | ℹ️ add: from USBDevice import *\n", + "18:04:54 | ℹ️ add: from WDT import *\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:04:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:04:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:04:56 | ℹ️ add: from ADC import *\n", + "18:04:56 | ℹ️ add: from ADCBlock import *\n", + "18:04:56 | ℹ️ add: from I2C import *\n", + "18:04:56 | ℹ️ add: from I2S import *\n", + "18:04:56 | ℹ️ add: from Pin import *\n", + "18:04:56 | ℹ️ add: from PWM import *\n", + "18:04:56 | ℹ️ add: from RTC import *\n", + "18:04:56 | ℹ️ add: from SD import *\n", + "18:04:56 | ℹ️ add: from SDCard import *\n", + "18:04:56 | ℹ️ add: from Signal import *\n", + "18:04:56 | ℹ️ add: from SPI import *\n", + "18:04:56 | ℹ️ add: from Timer import *\n", + "18:04:56 | ℹ️ add: from UART import *\n", + "18:04:56 | ℹ️ add: from USBDevice import *\n", + "18:04:56 | ℹ️ add: from WDT import *\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:04:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:04:57 | ℹ️ add: from ADC import *\n", + "18:04:57 | ℹ️ add: from ADCBlock import *\n", + "18:04:57 | ℹ️ add: from I2C import *\n", + "18:04:57 | ℹ️ add: from I2S import *\n", + "18:04:57 | ℹ️ add: from Pin import *\n", + "18:04:57 | ℹ️ add: from PWM import *\n", + "18:04:57 | ℹ️ add: from RTC import *\n", + "18:04:57 | ℹ️ add: from SD import *\n", + "18:04:57 | ℹ️ add: from SDCard import *\n", + "18:04:57 | ℹ️ add: from Signal import *\n", + "18:04:57 | ℹ️ add: from SPI import *\n", + "18:04:57 | ℹ️ add: from Timer import *\n", + "18:04:57 | ℹ️ add: from UART import *\n", + "18:04:57 | ℹ️ add: from USBDevice import *\n", + "18:04:57 | ℹ️ add: from WDT import *\n", + "18:04:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:04:58 | ℹ️ Change __init__ to @overload\n", + "18:04:58 | ℹ️ Change init to @overload\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:04:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:04:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:00 | ℹ️ add: from ADC import *\n", + "18:05:00 | ℹ️ add: from ADCBlock import *\n", + "18:05:00 | ℹ️ add: from I2C import *\n", + "18:05:00 | ℹ️ add: from I2S import *\n", + "18:05:00 | ℹ️ add: from Pin import *\n", + "18:05:00 | ℹ️ add: from PWM import *\n", + "18:05:00 | ℹ️ add: from RTC import *\n", + "18:05:00 | ℹ️ add: from SD import *\n", + "18:05:00 | ℹ️ add: from SDCard import *\n", + "18:05:00 | ℹ️ add: from Signal import *\n", + "18:05:00 | ℹ️ add: from SPI import *\n", + "18:05:00 | ℹ️ add: from Timer import *\n", + "18:05:00 | ℹ️ add: from UART import *\n", + "18:05:00 | ℹ️ add: from USBDevice import *\n", + "18:05:00 | ℹ️ add: from WDT import *\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:02 | ℹ️ add: from ADC import *\n", + "18:05:02 | ℹ️ add: from ADCBlock import *\n", + "18:05:02 | ℹ️ add: from I2C import *\n", + "18:05:02 | ℹ️ add: from I2S import *\n", + "18:05:02 | ℹ️ add: from Pin import *\n", + "18:05:02 | ℹ️ add: from PWM import *\n", + "18:05:02 | ℹ️ add: from RTC import *\n", + "18:05:02 | ℹ️ add: from SD import *\n", + "18:05:02 | ℹ️ add: from SDCard import *\n", + "18:05:02 | ℹ️ add: from Signal import *\n", + "18:05:02 | ℹ️ add: from SPI import *\n", + "18:05:02 | ℹ️ add: from Timer import *\n", + "18:05:02 | ℹ️ add: from UART import *\n", + "18:05:02 | ℹ️ add: from USBDevice import *\n", + "18:05:02 | ℹ️ add: from WDT import *\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:03 | ℹ️ Change value to @overload\n", + "18:05:03 | ℹ️ Change __call__ to @overload\n", + "18:05:03 | ℹ️ Change mode to @overload\n", + "18:05:03 | ℹ️ Change pull to @overload\n", + "18:05:03 | ℹ️ Change drive to @overload\n", + "18:05:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:05 | ℹ️ add: from ADC import *\n", + "18:05:05 | ℹ️ add: from ADCBlock import *\n", + "18:05:05 | ℹ️ add: from I2C import *\n", + "18:05:05 | ℹ️ add: from I2S import *\n", + "18:05:05 | ℹ️ add: from Pin import *\n", + "18:05:05 | ℹ️ add: from PWM import *\n", + "18:05:05 | ℹ️ add: from RTC import *\n", + "18:05:05 | ℹ️ add: from SD import *\n", + "18:05:05 | ℹ️ add: from SDCard import *\n", + "18:05:05 | ℹ️ add: from Signal import *\n", + "18:05:05 | ℹ️ add: from SPI import *\n", + "18:05:05 | ℹ️ add: from Timer import *\n", + "18:05:05 | ℹ️ add: from UART import *\n", + "18:05:05 | ℹ️ add: from USBDevice import *\n", + "18:05:05 | ℹ️ add: from WDT import *\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:05 | ℹ️ Change freq to @overload\n", + "18:05:05 | ℹ️ Change duty_u16 to @overload\n", + "18:05:05 | ℹ️ Change duty_ns to @overload\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:06 | ℹ️ add: from ADC import *\n", + "18:05:06 | ℹ️ add: from ADCBlock import *\n", + "18:05:06 | ℹ️ add: from I2C import *\n", + "18:05:06 | ℹ️ add: from I2S import *\n", + "18:05:06 | ℹ️ add: from Pin import *\n", + "18:05:06 | ℹ️ add: from PWM import *\n", + "18:05:06 | ℹ️ add: from RTC import *\n", + "18:05:06 | ℹ️ add: from SD import *\n", + "18:05:06 | ℹ️ add: from SDCard import *\n", + "18:05:06 | ℹ️ add: from Signal import *\n", + "18:05:06 | ℹ️ add: from SPI import *\n", + "18:05:06 | ℹ️ add: from Timer import *\n", + "18:05:06 | ℹ️ add: from UART import *\n", + "18:05:06 | ℹ️ add: from USBDevice import *\n", + "18:05:06 | ℹ️ add: from WDT import *\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:08 | ℹ️ Change __init__ to @overload\n", + "18:05:08 | ℹ️ Change init to @overload\n", + "18:05:08 | ℹ️ Change alarm to @overload\n", + "18:05:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:10 | ℹ️ add: from ADC import *\n", + "18:05:10 | ℹ️ add: from ADCBlock import *\n", + "18:05:10 | ℹ️ add: from I2C import *\n", + "18:05:10 | ℹ️ add: from I2S import *\n", + "18:05:10 | ℹ️ add: from Pin import *\n", + "18:05:10 | ℹ️ add: from PWM import *\n", + "18:05:10 | ℹ️ add: from RTC import *\n", + "18:05:10 | ℹ️ add: from SD import *\n", + "18:05:10 | ℹ️ add: from SDCard import *\n", + "18:05:10 | ℹ️ add: from Signal import *\n", + "18:05:10 | ℹ️ add: from SPI import *\n", + "18:05:10 | ℹ️ add: from Timer import *\n", + "18:05:10 | ℹ️ add: from UART import *\n", + "18:05:10 | ℹ️ add: from USBDevice import *\n", + "18:05:10 | ℹ️ add: from WDT import *\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:11 | ℹ️ add: from ADC import *\n", + "18:05:11 | ℹ️ add: from ADCBlock import *\n", + "18:05:11 | ℹ️ add: from I2C import *\n", + "18:05:11 | ℹ️ add: from I2S import *\n", + "18:05:11 | ℹ️ add: from Pin import *\n", + "18:05:11 | ℹ️ add: from PWM import *\n", + "18:05:11 | ℹ️ add: from RTC import *\n", + "18:05:11 | ℹ️ add: from SD import *\n", + "18:05:11 | ℹ️ add: from SDCard import *\n", + "18:05:11 | ℹ️ add: from Signal import *\n", + "18:05:11 | ℹ️ add: from SPI import *\n", + "18:05:11 | ℹ️ add: from Timer import *\n", + "18:05:11 | ℹ️ add: from UART import *\n", + "18:05:11 | ℹ️ add: from USBDevice import *\n", + "18:05:11 | ℹ️ add: from WDT import *\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:13 | ℹ️ add: from ADC import *\n", + "18:05:13 | ℹ️ add: from ADCBlock import *\n", + "18:05:13 | ℹ️ add: from I2C import *\n", + "18:05:13 | ℹ️ add: from I2S import *\n", + "18:05:13 | ℹ️ add: from Pin import *\n", + "18:05:13 | ℹ️ add: from PWM import *\n", + "18:05:13 | ℹ️ add: from RTC import *\n", + "18:05:13 | ℹ️ add: from SD import *\n", + "18:05:13 | ℹ️ add: from SDCard import *\n", + "18:05:13 | ℹ️ add: from Signal import *\n", + "18:05:13 | ℹ️ add: from SPI import *\n", + "18:05:13 | ℹ️ add: from Timer import *\n", + "18:05:13 | ℹ️ add: from UART import *\n", + "18:05:13 | ℹ️ add: from USBDevice import *\n", + "18:05:13 | ℹ️ add: from WDT import *\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:14 | ℹ️ Change __init__ to @overload\n", + "18:05:14 | ℹ️ Change value to @overload\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:15 | ℹ️ add: from ADC import *\n", + "18:05:15 | ℹ️ add: from ADCBlock import *\n", + "18:05:15 | ℹ️ add: from I2C import *\n", + "18:05:15 | ℹ️ add: from I2S import *\n", + "18:05:15 | ℹ️ add: from Pin import *\n", + "18:05:15 | ℹ️ add: from PWM import *\n", + "18:05:15 | ℹ️ add: from RTC import *\n", + "18:05:15 | ℹ️ add: from SD import *\n", + "18:05:15 | ℹ️ add: from SDCard import *\n", + "18:05:15 | ℹ️ add: from Signal import *\n", + "18:05:15 | ℹ️ add: from SPI import *\n", + "18:05:15 | ℹ️ add: from Timer import *\n", + "18:05:15 | ℹ️ add: from UART import *\n", + "18:05:15 | ℹ️ add: from USBDevice import *\n", + "18:05:15 | ℹ️ add: from WDT import *\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:17 | ℹ️ Change __init__ to @overload\n", + "18:05:17 | ℹ️ Change init to @overload\n", + "18:05:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:18 | ℹ️ add: from ADC import *\n", + "18:05:18 | ℹ️ add: from ADCBlock import *\n", + "18:05:18 | ℹ️ add: from I2C import *\n", + "18:05:18 | ℹ️ add: from I2S import *\n", + "18:05:18 | ℹ️ add: from Pin import *\n", + "18:05:18 | ℹ️ add: from PWM import *\n", + "18:05:18 | ℹ️ add: from RTC import *\n", + "18:05:18 | ℹ️ add: from SD import *\n", + "18:05:18 | ℹ️ add: from SDCard import *\n", + "18:05:18 | ℹ️ add: from Signal import *\n", + "18:05:18 | ℹ️ add: from SPI import *\n", + "18:05:18 | ℹ️ add: from Timer import *\n", + "18:05:18 | ℹ️ add: from UART import *\n", + "18:05:18 | ℹ️ add: from USBDevice import *\n", + "18:05:18 | ℹ️ add: from WDT import *\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:19 | ℹ️ Change __init__ to @overload\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:20 | ℹ️ add: from ADC import *\n", + "18:05:20 | ℹ️ add: from ADCBlock import *\n", + "18:05:20 | ℹ️ add: from I2C import *\n", + "18:05:20 | ℹ️ add: from I2S import *\n", + "18:05:20 | ℹ️ add: from Pin import *\n", + "18:05:20 | ℹ️ add: from PWM import *\n", + "18:05:20 | ℹ️ add: from RTC import *\n", + "18:05:20 | ℹ️ add: from SD import *\n", + "18:05:20 | ℹ️ add: from SDCard import *\n", + "18:05:20 | ℹ️ add: from Signal import *\n", + "18:05:20 | ℹ️ add: from SPI import *\n", + "18:05:20 | ℹ️ add: from Timer import *\n", + "18:05:20 | ℹ️ add: from UART import *\n", + "18:05:20 | ℹ️ add: from USBDevice import *\n", + "18:05:20 | ℹ️ add: from WDT import *\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:21 | ℹ️ add: from ADC import *\n", + "18:05:21 | ℹ️ add: from ADCBlock import *\n", + "18:05:21 | ℹ️ add: from I2C import *\n", + "18:05:21 | ℹ️ add: from I2S import *\n", + "18:05:21 | ℹ️ add: from Pin import *\n", + "18:05:21 | ℹ️ add: from PWM import *\n", + "18:05:21 | ℹ️ add: from RTC import *\n", + "18:05:21 | ℹ️ add: from SD import *\n", + "18:05:21 | ℹ️ add: from SDCard import *\n", + "18:05:21 | ℹ️ add: from Signal import *\n", + "18:05:21 | ℹ️ add: from SPI import *\n", + "18:05:21 | ℹ️ add: from Timer import *\n", + "18:05:21 | ℹ️ add: from UART import *\n", + "18:05:21 | ℹ️ add: from USBDevice import *\n", + "18:05:21 | ℹ️ add: from WDT import *\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:23 | ℹ️ Change __init__ to @overload\n", + "18:05:23 | ℹ️ Change init to @overload\n", + "18:05:23 | ℹ️ Change read to @overload\n", + "18:05:23 | ℹ️ Change readinto to @overload\n", + "18:05:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:24 | ℹ️ add: from ADC import *\n", + "18:05:24 | ℹ️ add: from ADCBlock import *\n", + "18:05:24 | ℹ️ add: from I2C import *\n", + "18:05:24 | ℹ️ add: from I2S import *\n", + "18:05:24 | ℹ️ add: from Pin import *\n", + "18:05:24 | ℹ️ add: from PWM import *\n", + "18:05:24 | ℹ️ add: from RTC import *\n", + "18:05:24 | ℹ️ add: from SD import *\n", + "18:05:24 | ℹ️ add: from SDCard import *\n", + "18:05:24 | ℹ️ add: from Signal import *\n", + "18:05:24 | ℹ️ add: from SPI import *\n", + "18:05:24 | ℹ️ add: from Timer import *\n", + "18:05:24 | ℹ️ add: from UART import *\n", + "18:05:24 | ℹ️ add: from USBDevice import *\n", + "18:05:24 | ℹ️ add: from WDT import *\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:26 | ℹ️ add: from ADC import *\n", + "18:05:26 | ℹ️ add: from ADCBlock import *\n", + "18:05:26 | ℹ️ add: from I2C import *\n", + "18:05:26 | ℹ️ add: from I2S import *\n", + "18:05:26 | ℹ️ add: from Pin import *\n", + "18:05:26 | ℹ️ add: from PWM import *\n", + "18:05:26 | ℹ️ add: from RTC import *\n", + "18:05:26 | ℹ️ add: from SD import *\n", + "18:05:26 | ℹ️ add: from SDCard import *\n", + "18:05:26 | ℹ️ add: from Signal import *\n", + "18:05:26 | ℹ️ add: from SPI import *\n", + "18:05:26 | ℹ️ add: from Timer import *\n", + "18:05:26 | ℹ️ add: from UART import *\n", + "18:05:26 | ℹ️ add: from USBDevice import *\n", + "18:05:26 | ℹ️ add: from WDT import *\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADC.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCBlock.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\ADCWiPy.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2C.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\I2S.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Pin.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\PWM.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\RTC.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SD.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SDCard.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Signal.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\SPI.pyi\n", + "18:05:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\Timer.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\TimerWiPy.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\UART.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\USBDevice.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\WDT.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\machine\\__init__.pyi\n", + "18:05:27 | ℹ️ add: from ADC import *\n", + "18:05:27 | ℹ️ add: from ADCBlock import *\n", + "18:05:27 | ℹ️ add: from I2C import *\n", + "18:05:27 | ℹ️ add: from I2S import *\n", + "18:05:27 | ℹ️ add: from Pin import *\n", + "18:05:27 | ℹ️ add: from PWM import *\n", + "18:05:27 | ℹ️ add: from RTC import *\n", + "18:05:27 | ℹ️ add: from SD import *\n", + "18:05:27 | ℹ️ add: from SDCard import *\n", + "18:05:27 | ℹ️ add: from Signal import *\n", + "18:05:27 | ℹ️ add: from SPI import *\n", + "18:05:27 | ℹ️ add: from Timer import *\n", + "18:05:27 | ℹ️ add: from UART import *\n", + "18:05:27 | ℹ️ add: from USBDevice import *\n", + "18:05:27 | ℹ️ add: from WDT import *\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\math\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\math\\__init__.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\micropython\\__init__\n", + ".pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\micropython\\__init__.pyi\n", + "18:05:27 | ℹ️ Change opt_level to @overload\n", + "18:05:27 | ℹ️ Change mem_info to @overload\n", + "18:05:27 | ℹ️ Change qstr_info to @overload\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\neopixel\\__init__.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\neopixel\\__init__.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\LAN.pyi\n", + "18:05:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\PPP.pyi\n", + "18:05:28 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WIZNET5K.pyi\n", + "18:05:28 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLAN.pyi\n", + "18:05:28 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLANWiPy.pyi\n", + "18:05:28 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\__init__.pyi\n", + "18:05:28 | ℹ️ Change active to @overload\n", + "18:05:28 | ℹ️ Change connect to @overload\n", + "18:05:28 | ℹ️ Change status to @overload\n", + "18:05:28 | ℹ️ Change ifconfig to @overload\n", + "18:05:28 | ℹ️ Change config to @overload\n", + "18:05:28 | ℹ️ add: from LAN import *\n", + "18:05:28 | ℹ️ add: from PPP import *\n", + "18:05:28 | ℹ️ add: from WIZNET5K import *\n", + "18:05:28 | ℹ️ add: from WLAN import *\n", + "18:05:28 | ℹ️ add: from WLANWiPy import *\n", + "18:05:28 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\LAN.pyi\n", + "18:05:28 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\PPP.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\WIZNET5K.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\WLAN.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\WLANWiPy.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\__init__.pyi\n", + "18:05:29 | ℹ️ add: from LAN import *\n", + "18:05:29 | ℹ️ add: from PPP import *\n", + "18:05:29 | ℹ️ add: from WIZNET5K import *\n", + "18:05:29 | ℹ️ add: from WLAN import *\n", + "18:05:29 | ℹ️ add: from WLANWiPy import *\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\LAN.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\PPP.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\WIZNET5K.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\WLAN.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\WLANWiPy.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\network\\__init__.pyi\n", + "18:05:29 | ℹ️ add: from LAN import *\n", + "18:05:29 | ℹ️ add: from PPP import *\n", + "18:05:29 | ℹ️ add: from WIZNET5K import *\n", + "18:05:29 | ℹ️ add: from WLAN import *\n", + "18:05:29 | ℹ️ add: from WLANWiPy import *\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\LAN.pyi\n", + "18:05:29 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\PPP.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WIZNET5K.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLAN.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLANWiPy.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\__init__.pyi\n", + "18:05:30 | ℹ️ add: from LAN import *\n", + "18:05:30 | ℹ️ add: from PPP import *\n", + "18:05:30 | ℹ️ add: from WIZNET5K import *\n", + "18:05:30 | ℹ️ add: from WLAN import *\n", + "18:05:30 | ℹ️ add: from WLANWiPy import *\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\network\\LAN.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\network\\PPP.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WIZNET5K.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLAN.pyi\n", + "18:05:30 | ℹ️ Change active to @overload\n", + "18:05:30 | ℹ️ Change status to @overload\n", + "18:05:30 | ℹ️ Change ifconfig to @overload\n", + "18:05:30 | ℹ️ Change config to @overload\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLANWiPy.pyi\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\network\\__init__.pyi\n", + "18:05:30 | ℹ️ add: from LAN import *\n", + "18:05:30 | ℹ️ add: from PPP import *\n", + "18:05:30 | ℹ️ add: from WIZNET5K import *\n", + "18:05:30 | ℹ️ add: from WLAN import *\n", + "18:05:30 | ℹ️ add: from WLANWiPy import *\n", + "18:05:30 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\LAN.pyi\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\PPP.pyi\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WIZNET5K.pyi\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLAN.pyi\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\WLANWiPy.pyi\n", + "18:05:31 | ℹ️ Change __init__ to @overload\n", + "18:05:31 | ℹ️ Change mode to @overload\n", + "18:05:31 | ℹ️ Change ssid to @overload\n", + "18:05:31 | ℹ️ Change auth to @overload\n", + "18:05:31 | ℹ️ Change channel to @overload\n", + "18:05:31 | ℹ️ Change antenna to @overload\n", + "18:05:31 | ℹ️ Change mac to @overload\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\network\\__init__.pyi\n", + "18:05:31 | ℹ️ add: from LAN import *\n", + "18:05:31 | ℹ️ add: from PPP import *\n", + "18:05:31 | ℹ️ add: from WIZNET5K import *\n", + "18:05:31 | ℹ️ add: from WLAN import *\n", + "18:05:31 | ℹ️ add: from WLANWiPy import *\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\openamp\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\openamp\\__init__.pyi\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\os\\__init__.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\uos.pyi\n", + "18:05:31 | ℹ️ add: from os import *\n", + "18:05:31 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\os\\__init__.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\os\\__init__.pyi\n", + "18:05:31 | ℹ️ add: from stdlib.os import *\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\platform\\__init__.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\platform\\__init__.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:32 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:33 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:33 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:33 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:33 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:33 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:33 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:34 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:34 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:34 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:34 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:34 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:35 | ℹ️ Change freq to @overload\n", + "18:05:35 | ℹ️ Change hid to @overload\n", + "18:05:35 | ℹ️ Change info to @overload\n", + "18:05:35 | ℹ️ Change mount to @overload\n", + "18:05:35 | ℹ️ Change repl_uart to @overload\n", + "18:05:35 | ℹ️ Change usb_mode to @overload\n", + "18:05:35 | ℹ️ add: from Accel import *\n", + "18:05:35 | ℹ️ add: from ADC import *\n", + "18:05:35 | ℹ️ add: from CAN import *\n", + "18:05:35 | ℹ️ add: from DAC import *\n", + "18:05:35 | ℹ️ add: from ExtInt import *\n", + "18:05:35 | ℹ️ add: from Flash import *\n", + "18:05:35 | ℹ️ add: from I2C import *\n", + "18:05:35 | ℹ️ add: from LCD import *\n", + "18:05:35 | ℹ️ add: from LED import *\n", + "18:05:35 | ℹ️ add: from Pin import *\n", + "18:05:35 | ℹ️ add: from RTC import *\n", + "18:05:35 | ℹ️ add: from Servo import *\n", + "18:05:35 | ℹ️ add: from SPI import *\n", + "18:05:35 | ℹ️ add: from Switch import *\n", + "18:05:35 | ℹ️ add: from Timer import *\n", + "18:05:35 | ℹ️ add: from UART import *\n", + "18:05:35 | ℹ️ add: from USB_HID import *\n", + "18:05:35 | ℹ️ add: from USB_VCP import *\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:35 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:36 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:37 | ℹ️ add: from Accel import *\n", + "18:05:37 | ℹ️ add: from ADC import *\n", + "18:05:37 | ℹ️ add: from CAN import *\n", + "18:05:37 | ℹ️ add: from DAC import *\n", + "18:05:37 | ℹ️ add: from ExtInt import *\n", + "18:05:37 | ℹ️ add: from Flash import *\n", + "18:05:37 | ℹ️ add: from I2C import *\n", + "18:05:37 | ℹ️ add: from LCD import *\n", + "18:05:37 | ℹ️ add: from LED import *\n", + "18:05:37 | ℹ️ add: from Pin import *\n", + "18:05:37 | ℹ️ add: from RTC import *\n", + "18:05:37 | ℹ️ add: from Servo import *\n", + "18:05:37 | ℹ️ add: from SPI import *\n", + "18:05:37 | ℹ️ add: from Switch import *\n", + "18:05:37 | ℹ️ add: from Timer import *\n", + "18:05:37 | ℹ️ add: from UART import *\n", + "18:05:37 | ℹ️ add: from USB_HID import *\n", + "18:05:37 | ℹ️ add: from USB_VCP import *\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:37 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:38 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:39 | ℹ️ add: from Accel import *\n", + "18:05:39 | ℹ️ add: from ADC import *\n", + "18:05:39 | ℹ️ add: from CAN import *\n", + "18:05:39 | ℹ️ add: from DAC import *\n", + "18:05:39 | ℹ️ add: from ExtInt import *\n", + "18:05:39 | ℹ️ add: from Flash import *\n", + "18:05:39 | ℹ️ add: from I2C import *\n", + "18:05:39 | ℹ️ add: from LCD import *\n", + "18:05:39 | ℹ️ add: from LED import *\n", + "18:05:39 | ℹ️ add: from Pin import *\n", + "18:05:39 | ℹ️ add: from RTC import *\n", + "18:05:39 | ℹ️ add: from Servo import *\n", + "18:05:39 | ℹ️ add: from SPI import *\n", + "18:05:39 | ℹ️ add: from Switch import *\n", + "18:05:39 | ℹ️ add: from Timer import *\n", + "18:05:39 | ℹ️ add: from UART import *\n", + "18:05:39 | ℹ️ add: from USB_HID import *\n", + "18:05:39 | ℹ️ add: from USB_VCP import *\n", + "18:05:39 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:39 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:39 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:39 | ℹ️ Change info to @overload\n", + "18:05:39 | ℹ️ Change setfilter to @overload\n", + "18:05:39 | ℹ️ Change recv to @overload\n", + "18:05:39 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:39 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:40 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:40 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:40 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:40 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:40 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:41 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:41 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:41 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:41 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:41 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:41 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:42 | ℹ️ add: from Accel import *\n", + "18:05:42 | ℹ️ add: from ADC import *\n", + "18:05:42 | ℹ️ add: from CAN import *\n", + "18:05:42 | ℹ️ add: from DAC import *\n", + "18:05:42 | ℹ️ add: from ExtInt import *\n", + "18:05:42 | ℹ️ add: from Flash import *\n", + "18:05:42 | ℹ️ add: from I2C import *\n", + "18:05:42 | ℹ️ add: from LCD import *\n", + "18:05:42 | ℹ️ add: from LED import *\n", + "18:05:42 | ℹ️ add: from Pin import *\n", + "18:05:42 | ℹ️ add: from RTC import *\n", + "18:05:42 | ℹ️ add: from Servo import *\n", + "18:05:42 | ℹ️ add: from SPI import *\n", + "18:05:42 | ℹ️ add: from Switch import *\n", + "18:05:42 | ℹ️ add: from Timer import *\n", + "18:05:42 | ℹ️ add: from UART import *\n", + "18:05:42 | ℹ️ add: from USB_HID import *\n", + "18:05:42 | ℹ️ add: from USB_VCP import *\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:42 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:43 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:44 | ℹ️ add: from Accel import *\n", + "18:05:44 | ℹ️ add: from ADC import *\n", + "18:05:44 | ℹ️ add: from CAN import *\n", + "18:05:44 | ℹ️ add: from DAC import *\n", + "18:05:44 | ℹ️ add: from ExtInt import *\n", + "18:05:44 | ℹ️ add: from Flash import *\n", + "18:05:44 | ℹ️ add: from I2C import *\n", + "18:05:44 | ℹ️ add: from LCD import *\n", + "18:05:44 | ℹ️ add: from LED import *\n", + "18:05:44 | ℹ️ add: from Pin import *\n", + "18:05:44 | ℹ️ add: from RTC import *\n", + "18:05:44 | ℹ️ add: from Servo import *\n", + "18:05:44 | ℹ️ add: from SPI import *\n", + "18:05:44 | ℹ️ add: from Switch import *\n", + "18:05:44 | ℹ️ add: from Timer import *\n", + "18:05:44 | ℹ️ add: from UART import *\n", + "18:05:44 | ℹ️ add: from USB_HID import *\n", + "18:05:44 | ℹ️ add: from USB_VCP import *\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:44 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:45 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:46 | ℹ️ add: from Accel import *\n", + "18:05:46 | ℹ️ add: from ADC import *\n", + "18:05:46 | ℹ️ add: from CAN import *\n", + "18:05:46 | ℹ️ add: from DAC import *\n", + "18:05:46 | ℹ️ add: from ExtInt import *\n", + "18:05:46 | ℹ️ add: from Flash import *\n", + "18:05:46 | ℹ️ add: from I2C import *\n", + "18:05:46 | ℹ️ add: from LCD import *\n", + "18:05:46 | ℹ️ add: from LED import *\n", + "18:05:46 | ℹ️ add: from Pin import *\n", + "18:05:46 | ℹ️ add: from RTC import *\n", + "18:05:46 | ℹ️ add: from Servo import *\n", + "18:05:46 | ℹ️ add: from SPI import *\n", + "18:05:46 | ℹ️ add: from Switch import *\n", + "18:05:46 | ℹ️ add: from Timer import *\n", + "18:05:46 | ℹ️ add: from UART import *\n", + "18:05:46 | ℹ️ add: from USB_HID import *\n", + "18:05:46 | ℹ️ add: from USB_VCP import *\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:46 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:47 | ℹ️ Change __init__ to @overload\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:47 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:48 | ℹ️ add: from Accel import *\n", + "18:05:48 | ℹ️ add: from ADC import *\n", + "18:05:48 | ℹ️ add: from CAN import *\n", + "18:05:48 | ℹ️ add: from DAC import *\n", + "18:05:48 | ℹ️ add: from ExtInt import *\n", + "18:05:48 | ℹ️ add: from Flash import *\n", + "18:05:48 | ℹ️ add: from I2C import *\n", + "18:05:48 | ℹ️ add: from LCD import *\n", + "18:05:48 | ℹ️ add: from LED import *\n", + "18:05:48 | ℹ️ add: from Pin import *\n", + "18:05:48 | ℹ️ add: from RTC import *\n", + "18:05:48 | ℹ️ add: from Servo import *\n", + "18:05:48 | ℹ️ add: from SPI import *\n", + "18:05:48 | ℹ️ add: from Switch import *\n", + "18:05:48 | ℹ️ add: from Timer import *\n", + "18:05:48 | ℹ️ add: from UART import *\n", + "18:05:48 | ℹ️ add: from USB_HID import *\n", + "18:05:48 | ℹ️ add: from USB_VCP import *\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:48 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:49 | ℹ️ Change mem_read to @overload\n", + "18:05:49 | ℹ️ Change recv to @overload\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:49 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:50 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:51 | ℹ️ add: from Accel import *\n", + "18:05:51 | ℹ️ add: from ADC import *\n", + "18:05:51 | ℹ️ add: from CAN import *\n", + "18:05:51 | ℹ️ add: from DAC import *\n", + "18:05:51 | ℹ️ add: from ExtInt import *\n", + "18:05:51 | ℹ️ add: from Flash import *\n", + "18:05:51 | ℹ️ add: from I2C import *\n", + "18:05:51 | ℹ️ add: from LCD import *\n", + "18:05:51 | ℹ️ add: from LED import *\n", + "18:05:51 | ℹ️ add: from Pin import *\n", + "18:05:51 | ℹ️ add: from RTC import *\n", + "18:05:51 | ℹ️ add: from Servo import *\n", + "18:05:51 | ℹ️ add: from SPI import *\n", + "18:05:51 | ℹ️ add: from Switch import *\n", + "18:05:51 | ℹ️ add: from Timer import *\n", + "18:05:51 | ℹ️ add: from UART import *\n", + "18:05:51 | ℹ️ add: from USB_HID import *\n", + "18:05:51 | ℹ️ add: from USB_VCP import *\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:51 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:52 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:53 | ℹ️ add: from Accel import *\n", + "18:05:53 | ℹ️ add: from ADC import *\n", + "18:05:53 | ℹ️ add: from CAN import *\n", + "18:05:53 | ℹ️ add: from DAC import *\n", + "18:05:53 | ℹ️ add: from ExtInt import *\n", + "18:05:53 | ℹ️ add: from Flash import *\n", + "18:05:53 | ℹ️ add: from I2C import *\n", + "18:05:53 | ℹ️ add: from LCD import *\n", + "18:05:53 | ℹ️ add: from LED import *\n", + "18:05:53 | ℹ️ add: from Pin import *\n", + "18:05:53 | ℹ️ add: from RTC import *\n", + "18:05:53 | ℹ️ add: from Servo import *\n", + "18:05:53 | ℹ️ add: from SPI import *\n", + "18:05:53 | ℹ️ add: from Switch import *\n", + "18:05:53 | ℹ️ add: from Timer import *\n", + "18:05:53 | ℹ️ add: from UART import *\n", + "18:05:53 | ℹ️ add: from USB_HID import *\n", + "18:05:53 | ℹ️ add: from USB_VCP import *\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:53 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:54 | ℹ️ Change intensity to @overload\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:54 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:55 | ℹ️ add: from Accel import *\n", + "18:05:55 | ℹ️ add: from ADC import *\n", + "18:05:55 | ℹ️ add: from CAN import *\n", + "18:05:55 | ℹ️ add: from DAC import *\n", + "18:05:55 | ℹ️ add: from ExtInt import *\n", + "18:05:55 | ℹ️ add: from Flash import *\n", + "18:05:55 | ℹ️ add: from I2C import *\n", + "18:05:55 | ℹ️ add: from LCD import *\n", + "18:05:55 | ℹ️ add: from LED import *\n", + "18:05:55 | ℹ️ add: from Pin import *\n", + "18:05:55 | ℹ️ add: from RTC import *\n", + "18:05:55 | ℹ️ add: from Servo import *\n", + "18:05:55 | ℹ️ add: from SPI import *\n", + "18:05:55 | ℹ️ add: from Switch import *\n", + "18:05:55 | ℹ️ add: from Timer import *\n", + "18:05:55 | ℹ️ add: from UART import *\n", + "18:05:55 | ℹ️ add: from USB_HID import *\n", + "18:05:55 | ℹ️ add: from USB_VCP import *\n", + "18:05:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:55 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:56 | ℹ️ Change debug to @overload\n", + "18:05:56 | ℹ️ Change dict to @overload\n", + "18:05:56 | ℹ️ Change mapper to @overload\n", + "18:05:56 | ℹ️ Change value to @overload\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:56 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:57 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:57 | ℹ️ add: from Accel import *\n", + "18:05:57 | ℹ️ add: from ADC import *\n", + "18:05:57 | ℹ️ add: from CAN import *\n", + "18:05:57 | ℹ️ add: from DAC import *\n", + "18:05:57 | ℹ️ add: from ExtInt import *\n", + "18:05:57 | ℹ️ add: from Flash import *\n", + "18:05:57 | ℹ️ add: from I2C import *\n", + "18:05:57 | ℹ️ add: from LCD import *\n", + "18:05:57 | ℹ️ add: from LED import *\n", + "18:05:57 | ℹ️ add: from Pin import *\n", + "18:05:57 | ℹ️ add: from RTC import *\n", + "18:05:57 | ℹ️ add: from Servo import *\n", + "18:05:57 | ℹ️ add: from SPI import *\n", + "18:05:57 | ℹ️ add: from Switch import *\n", + "18:05:57 | ℹ️ add: from Timer import *\n", + "18:05:57 | ℹ️ add: from UART import *\n", + "18:05:57 | ℹ️ add: from USB_HID import *\n", + "18:05:57 | ℹ️ add: from USB_VCP import *\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:05:58 | ℹ️ Change calibration to @overload\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:05:58 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:05:59 | ℹ️ add: from Accel import *\n", + "18:05:59 | ℹ️ add: from ADC import *\n", + "18:05:59 | ℹ️ add: from CAN import *\n", + "18:05:59 | ℹ️ add: from DAC import *\n", + "18:05:59 | ℹ️ add: from ExtInt import *\n", + "18:05:59 | ℹ️ add: from Flash import *\n", + "18:05:59 | ℹ️ add: from I2C import *\n", + "18:05:59 | ℹ️ add: from LCD import *\n", + "18:05:59 | ℹ️ add: from LED import *\n", + "18:05:59 | ℹ️ add: from Pin import *\n", + "18:05:59 | ℹ️ add: from RTC import *\n", + "18:05:59 | ℹ️ add: from Servo import *\n", + "18:05:59 | ℹ️ add: from SPI import *\n", + "18:05:59 | ℹ️ add: from Switch import *\n", + "18:05:59 | ℹ️ add: from Timer import *\n", + "18:05:59 | ℹ️ add: from UART import *\n", + "18:05:59 | ℹ️ add: from USB_HID import *\n", + "18:05:59 | ℹ️ add: from USB_VCP import *\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:05:59 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:00 | ℹ️ Change angle to @overload\n", + "18:06:00 | ℹ️ Change speed to @overload\n", + "18:06:00 | ℹ️ Change calibration to @overload\n", + "18:06:00 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:01 | ℹ️ add: from Accel import *\n", + "18:06:01 | ℹ️ add: from ADC import *\n", + "18:06:01 | ℹ️ add: from CAN import *\n", + "18:06:01 | ℹ️ add: from DAC import *\n", + "18:06:01 | ℹ️ add: from ExtInt import *\n", + "18:06:01 | ℹ️ add: from Flash import *\n", + "18:06:01 | ℹ️ add: from I2C import *\n", + "18:06:01 | ℹ️ add: from LCD import *\n", + "18:06:01 | ℹ️ add: from LED import *\n", + "18:06:01 | ℹ️ add: from Pin import *\n", + "18:06:01 | ℹ️ add: from RTC import *\n", + "18:06:01 | ℹ️ add: from Servo import *\n", + "18:06:01 | ℹ️ add: from SPI import *\n", + "18:06:01 | ℹ️ add: from Switch import *\n", + "18:06:01 | ℹ️ add: from Timer import *\n", + "18:06:01 | ℹ️ add: from UART import *\n", + "18:06:01 | ℹ️ add: from USB_HID import *\n", + "18:06:01 | ℹ️ add: from USB_VCP import *\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:06:01 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:02 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:03 | ℹ️ Change __init__ to @overload\n", + "18:06:03 | ℹ️ Change init to @overload\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:03 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:04 | ℹ️ add: from Accel import *\n", + "18:06:04 | ℹ️ add: from ADC import *\n", + "18:06:04 | ℹ️ add: from CAN import *\n", + "18:06:04 | ℹ️ add: from DAC import *\n", + "18:06:04 | ℹ️ add: from ExtInt import *\n", + "18:06:04 | ℹ️ add: from Flash import *\n", + "18:06:04 | ℹ️ add: from I2C import *\n", + "18:06:04 | ℹ️ add: from LCD import *\n", + "18:06:04 | ℹ️ add: from LED import *\n", + "18:06:04 | ℹ️ add: from Pin import *\n", + "18:06:04 | ℹ️ add: from RTC import *\n", + "18:06:04 | ℹ️ add: from Servo import *\n", + "18:06:04 | ℹ️ add: from SPI import *\n", + "18:06:04 | ℹ️ add: from Switch import *\n", + "18:06:04 | ℹ️ add: from Timer import *\n", + "18:06:04 | ℹ️ add: from UART import *\n", + "18:06:04 | ℹ️ add: from USB_HID import *\n", + "18:06:04 | ℹ️ add: from USB_VCP import *\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:04 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:05 | ℹ️ add: from Accel import *\n", + "18:06:05 | ℹ️ add: from ADC import *\n", + "18:06:05 | ℹ️ add: from CAN import *\n", + "18:06:05 | ℹ️ add: from DAC import *\n", + "18:06:05 | ℹ️ add: from ExtInt import *\n", + "18:06:05 | ℹ️ add: from Flash import *\n", + "18:06:05 | ℹ️ add: from I2C import *\n", + "18:06:05 | ℹ️ add: from LCD import *\n", + "18:06:05 | ℹ️ add: from LED import *\n", + "18:06:05 | ℹ️ add: from Pin import *\n", + "18:06:05 | ℹ️ add: from RTC import *\n", + "18:06:05 | ℹ️ add: from Servo import *\n", + "18:06:05 | ℹ️ add: from SPI import *\n", + "18:06:05 | ℹ️ add: from Switch import *\n", + "18:06:05 | ℹ️ add: from Timer import *\n", + "18:06:05 | ℹ️ add: from UART import *\n", + "18:06:05 | ℹ️ add: from USB_HID import *\n", + "18:06:05 | ℹ️ add: from USB_VCP import *\n", + "18:06:05 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:06 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:07 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:07 | ℹ️ Change __init__ to @overload\n", + "18:06:07 | ℹ️ Change init to @overload\n", + "18:06:07 | ℹ️ Change channel to @overload\n", + "18:06:07 | ℹ️ Change counter to @overload\n", + "18:06:07 | ℹ️ Change freq to @overload\n", + "18:06:07 | ℹ️ Change period to @overload\n", + "18:06:07 | ℹ️ Change prescaler to @overload\n", + "18:06:07 | ℹ️ Change capture to @overload\n", + "18:06:07 | ℹ️ Change compare to @overload\n", + "18:06:07 | ℹ️ Change pulse_width to @overload\n", + "18:06:07 | ℹ️ Change pulse_width_percent to @overload\n", + "18:06:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:08 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:08 | ℹ️ add: from Accel import *\n", + "18:06:08 | ℹ️ add: from ADC import *\n", + "18:06:08 | ℹ️ add: from CAN import *\n", + "18:06:08 | ℹ️ add: from DAC import *\n", + "18:06:08 | ℹ️ add: from ExtInt import *\n", + "18:06:08 | ℹ️ add: from Flash import *\n", + "18:06:08 | ℹ️ add: from I2C import *\n", + "18:06:08 | ℹ️ add: from LCD import *\n", + "18:06:08 | ℹ️ add: from LED import *\n", + "18:06:08 | ℹ️ add: from Pin import *\n", + "18:06:08 | ℹ️ add: from RTC import *\n", + "18:06:08 | ℹ️ add: from Servo import *\n", + "18:06:08 | ℹ️ add: from SPI import *\n", + "18:06:08 | ℹ️ add: from Switch import *\n", + "18:06:08 | ℹ️ add: from Timer import *\n", + "18:06:08 | ℹ️ add: from UART import *\n", + "18:06:08 | ℹ️ add: from USB_HID import *\n", + "18:06:08 | ℹ️ add: from USB_VCP import *\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:09 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:10 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:11 | ℹ️ Change __init__ to @overload\n", + "18:06:11 | ℹ️ Change read to @overload\n", + "18:06:11 | ℹ️ Change readinto to @overload\n", + "18:06:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:11 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:12 | ℹ️ add: from Accel import *\n", + "18:06:12 | ℹ️ add: from ADC import *\n", + "18:06:12 | ℹ️ add: from CAN import *\n", + "18:06:12 | ℹ️ add: from DAC import *\n", + "18:06:12 | ℹ️ add: from ExtInt import *\n", + "18:06:12 | ℹ️ add: from Flash import *\n", + "18:06:12 | ℹ️ add: from I2C import *\n", + "18:06:12 | ℹ️ add: from LCD import *\n", + "18:06:12 | ℹ️ add: from LED import *\n", + "18:06:12 | ℹ️ add: from Pin import *\n", + "18:06:12 | ℹ️ add: from RTC import *\n", + "18:06:12 | ℹ️ add: from Servo import *\n", + "18:06:12 | ℹ️ add: from SPI import *\n", + "18:06:12 | ℹ️ add: from Switch import *\n", + "18:06:12 | ℹ️ add: from Timer import *\n", + "18:06:12 | ℹ️ add: from UART import *\n", + "18:06:12 | ℹ️ add: from USB_HID import *\n", + "18:06:12 | ℹ️ add: from USB_VCP import *\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:12 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:13 | ℹ️ Change recv to @overload\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:13 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:13 | ℹ️ add: from Accel import *\n", + "18:06:13 | ℹ️ add: from ADC import *\n", + "18:06:13 | ℹ️ add: from CAN import *\n", + "18:06:13 | ℹ️ add: from DAC import *\n", + "18:06:13 | ℹ️ add: from ExtInt import *\n", + "18:06:13 | ℹ️ add: from Flash import *\n", + "18:06:13 | ℹ️ add: from I2C import *\n", + "18:06:13 | ℹ️ add: from LCD import *\n", + "18:06:13 | ℹ️ add: from LED import *\n", + "18:06:13 | ℹ️ add: from Pin import *\n", + "18:06:13 | ℹ️ add: from RTC import *\n", + "18:06:13 | ℹ️ add: from Servo import *\n", + "18:06:13 | ℹ️ add: from SPI import *\n", + "18:06:13 | ℹ️ add: from Switch import *\n", + "18:06:13 | ℹ️ add: from Timer import *\n", + "18:06:13 | ℹ️ add: from UART import *\n", + "18:06:13 | ℹ️ add: from USB_HID import *\n", + "18:06:13 | ℹ️ add: from USB_VCP import *\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Accel.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ADC.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\CAN.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\DAC.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\ExtInt.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Flash.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\I2C.pyi\n", + "18:06:14 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LCD.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\LED.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Pin.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\RTC.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Servo.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\SPI.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Switch.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\Timer.pyi\n", + "18:06:15 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\UART.pyi\n", + "18:06:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_HID.pyi\n", + "18:06:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\USB_VCP.pyi\n", + "18:06:16 | ℹ️ Change read to @overload\n", + "18:06:16 | ℹ️ Change readinto to @overload\n", + "18:06:16 | ℹ️ Change recv to @overload\n", + "18:06:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi from\n", + "repos\\micropython-stubs\\micropython-reference\\pyb\\__init__.pyi\n", + "18:06:16 | ℹ️ add: from Accel import *\n", + "18:06:16 | ℹ️ add: from ADC import *\n", + "18:06:16 | ℹ️ add: from CAN import *\n", + "18:06:16 | ℹ️ add: from DAC import *\n", + "18:06:16 | ℹ️ add: from ExtInt import *\n", + "18:06:16 | ℹ️ add: from Flash import *\n", + "18:06:16 | ℹ️ add: from I2C import *\n", + "18:06:16 | ℹ️ add: from LCD import *\n", + "18:06:16 | ℹ️ add: from LED import *\n", + "18:06:16 | ℹ️ add: from Pin import *\n", + "18:06:16 | ℹ️ add: from RTC import *\n", + "18:06:16 | ℹ️ add: from Servo import *\n", + "18:06:16 | ℹ️ add: from SPI import *\n", + "18:06:16 | ℹ️ add: from Switch import *\n", + "18:06:16 | ℹ️ add: from Timer import *\n", + "18:06:16 | ℹ️ add: from UART import *\n", + "18:06:16 | ℹ️ add: from USB_HID import *\n", + "18:06:16 | ℹ️ add: from USB_VCP import *\n", + "18:06:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\random\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\random\\__init__.pyi\n", + "18:06:16 | ℹ️ Change randrange to @overload\n", + "18:06:16 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\rp2\\__init__.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\DMA.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\Flash.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\irq.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\PIO.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\PIOASMEmit.py\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\StateMachine.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\__init__.pyi\n", + "18:06:17 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\rp2\\__init__.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\DMA.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\Flash.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\irq.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\PIO.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\PIOASMEmit.py\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\StateMachine.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\DMA.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\__init__.pyi\n", + "18:06:18 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\rp2\\__init__.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\DMA.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\Flash.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\irq.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\PIO.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\PIOASMEmit.py\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\StateMachine.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\Flash.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\__init__.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\rp2\\__init__.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\DMA.pyi\n", + "18:06:19 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\Flash.pyi\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\irq.pyi\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\PIO.pyi\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\PIOASMEmit.py\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\StateMachine.pyi\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\PIO.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\_rp2\\__init__.pyi\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\rp2\\__init__.pyi\n", + "18:06:20 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\DMA.pyi\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\Flash.pyi\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\irq.pyi\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\PIO.pyi\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\PIOASMEmit.py\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\StateMachine.pyi\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\StateMachine.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\_rp2\\__init__.pyi\n", + "18:06:21 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\select\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\uselect.pyi\n", + "18:06:21 | ℹ️ add: from select import *\n", + "18:06:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\select\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\select\\__init__.pyi\n", + "18:06:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\usocket.pyi\n", + "18:06:22 | ℹ️ add: from socket import *\n", + "18:06:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\socket\\__init__.pyi\n", + "18:06:22 | ℹ️ Change makefile to @overload\n", + "18:06:22 | ℹ️ Change read to @overload\n", + "18:06:22 | ℹ️ Change readinto to @overload\n", + "18:06:22 | ℹ️ add: from stdlib.socket import *\n", + "18:06:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\ussl.pyi\n", + "18:06:22 | ℹ️ add: from ssl import *\n", + "18:06:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\ssl\\__init__.pyi\n", + "18:06:22 | ℹ️ add: from stdlib.ssl import *\n", + "18:06:22 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\stm\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\stm\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\ustruct.pyi\n", + "18:06:23 | ℹ️ add: from struct import *\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\struct\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\sys\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\sys\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\time\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\utime.pyi\n", + "18:06:23 | ℹ️ add: from time import *\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\time\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\time\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uarray.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\uarray.pyi\n", + "18:06:23 | ℹ️ add: from array import *\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uarray.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\array\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ubinascii.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\ubinascii.pyi\n", + "18:06:23 | ℹ️ add: from binascii import *\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ubinascii.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\binascii\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uctypes\\__init__.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\uctypes\\__init__.pyi\n", + "18:06:23 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uio.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\uio.pyi\n", + "18:06:24 | ℹ️ add: from io import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uio.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\io\\__init__.pyi\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ujson.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\ujson.pyi\n", + "18:06:24 | ℹ️ add: from json import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ujson.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\json\\__init__.pyi\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uos.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\uos.pyi\n", + "18:06:24 | ℹ️ add: from os import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uos.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\os\\__init__.pyi\n", + "18:06:24 | ℹ️ add: from stdlib.os import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uselect.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\uselect.pyi\n", + "18:06:24 | ℹ️ add: from select import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uselect.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\select\\__init__.pyi\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\usocket.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\usocket.pyi\n", + "18:06:24 | ℹ️ add: from socket import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\usocket.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\socket\\__init__.pyi\n", + "18:06:24 | ℹ️ add: from stdlib.socket import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ussl.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\ussl.pyi\n", + "18:06:24 | ℹ️ add: from ssl import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ussl.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\ssl\\__init__.pyi\n", + "18:06:24 | ℹ️ add: from stdlib.ssl import *\n", + "18:06:24 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ustruct.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\ustruct.pyi\n", + "18:06:25 | ℹ️ add: from struct import *\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ustruct.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\struct\\__init__.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\utime.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\utime.pyi\n", + "18:06:25 | ℹ️ add: from time import *\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\utime.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\time\\__init__.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uzlib.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\uzlib.pyi\n", + "18:06:25 | ℹ️ add: from zlib import *\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uzlib.pyi from \n", + "repos\\micropython-stubs\\micropython-reference\\zlib\\__init__.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\vfs\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\vfs\\__init__.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\wipy\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\wipy\\__init__.pyi\n", + "18:06:25 | ℹ️ Change heartbeat to @overload\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\wm8960\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\wm8960\\__init__.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\FlashArea.pyi\n", + "18:06:25 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\zsensor.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\__init__.pyi\n", + "18:06:26 | ℹ️ add: from DiskAccess import *\n", + "18:06:26 | ℹ️ add: from FlashArea import *\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\zephyr\\FlashArea.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\zephyr\\zsensor.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.py\n", + "i from repos\\micropython-stubs\\micropython-reference\\zephyr\\__init__.pyi\n", + "18:06:26 | ℹ️ add: from DiskAccess import *\n", + "18:06:26 | ℹ️ add: from FlashArea import *\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\FlashArea.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\zsensor.pyi\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\__init__.pyi\n", + "18:06:26 | ℹ️ add: from DiskAccess import *\n", + "18:06:26 | ℹ️ add: from FlashArea import *\n", + "18:06:26 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\DiskAccess.pyi\n", + "18:06:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\FlashArea.pyi\n", + "18:06:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\zsensor.pyi\n", + "18:06:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zephyr\\__init__.pyi\n", + "18:06:27 | ℹ️ add: from DiskAccess import *\n", + "18:06:27 | ℹ️ add: from FlashArea import *\n", + "18:06:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\uzlib.pyi\n", + "18:06:27 | ℹ️ add: from zlib import *\n", + "18:06:27 | ℹ️ Merge \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi \n", + "from repos\\micropython-stubs\\micropython-reference\\zlib\\__init__.pyi\n" + ] + } + ], + "source": [ + "# Integrate params and @overloads from reference stubs into the doc-stubs \n", + "! stubber enrich --params-only --stubs {docstubs_p} --docstubs {reference_p}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], + "source": [ + "### sanity check on formatting\n", + "! ruff check {docstubs_p} --ignore F4 --ignore UP0 --ignore F811 " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# remove the DMA, Flash , PIO and StateMachine classes from rp2 as they are in _rp2.**\n", + "\n", + "for stem in [\"DMA\", \"Flash\", \"PIO\", \"StateMachine\"]:\n", + " file = docstubs_p / f\"rp2/{stem}.pyi\"\n", + " if file.exists():\n", + " file.unlink()\n", + " print(f\"Removed {file}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# clean up duplicate typevar definitions\n", + "\n", + "rp2_comment_hack = [\n", + " \"from _rp2.DMA import DMA as DMA\",\n", + " \"from _rp2.Flash import Flash as Flash\",\n", + " \"from _rp2.PIO import PIO as PIO\",\n", + " \"from _rp2.StateMachine import StateMachine as StateMachine\",\n", + "]\n", + "\n", + "\n", + "def remove_duplicates(file):\n", + " with open(file, encoding=\"utf-8\") as f:\n", + " lines = f.readlines()\n", + "\n", + " typevars = {}\n", + " comments = {}\n", + " with open(file, \"w\", encoding=\"utf-8\") as f:\n", + " for line in lines:\n", + " if line.startswith(\"# MCU:\") or line.startswith(\"# Stubber\"):\n", + " if line in comments:\n", + " continue\n", + " comments[line] = True\n", + " # Remove AnyReadableBuf and AnyWritableBuf from io.pyi and uio.pyi\n", + " if file.name in [\"io.pyi\", \"uio.pyi\"]:\n", + " if line.startswith(\"AnyReadableBuf = TypeVar\") or line.startswith(\n", + " \"AnyWritableBuf = TypeVar\"\n", + " ):\n", + " continue\n", + " if file.name in [\"rp2.pyi\"]:\n", + " if line.strip() in rp2_comment_hack:\n", + " line = f\"# {line}\"\n", + " # Ugly hack to fix TypeVar imported from typing_extensions AND typing\n", + " if line == \"from typing_extensions import TypeVar\\n\":\n", + " line = \"from typing import TypeVar\\n\"\n", + " elif \": TypeVar\" in line:\n", + " if line in typevars:\n", + " continue\n", + " typevars[line] = True\n", + " f.write(line)\n", + "\n", + "\n", + "for file in docstubs_p.rglob(\"*.pyi\"):\n", + " remove_duplicates(file)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 4 errors (4 fixed, 0 remaining).\n" + ] + } + ], + "source": [ + "# Clean formatting and upgrade typing notation to 3.10\n", + " \n", + "! ruff check {docstubs_p} --fix --unsafe-fixes --ignore UP006 --ignore UP035 --ignore F405\n", + "\n", + "# to fix in the u* modules \n", + "# [ ] different imports of typevar\n", + "# [ ] Duplicate defenitions of AnyWritableBuffer" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uarray.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ubinascii.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uio.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ujson.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uos.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uselect.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\usocket.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ussl.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ustruct.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\utime.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uzlib.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\array\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\asyncio\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\binascii\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\bluetooth\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\btree\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\cmath\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\collections\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\cryptolib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\deflate\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\errno\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\esp\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\esp32\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\espnow\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\framebuf\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\gc\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\gzip\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\hashlib\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\heapq\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\io\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\json\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\lcd160cr\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCBlock.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\ADCWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2C.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\I2S.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Pin.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\PWM.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\RTC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SD.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SDCard.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Signal.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\SPI.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\Timer.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\TimerWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\UART.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\USBDevice.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\WDT.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\machine\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\math\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\micropython\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\neopixel\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\LAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\PPP.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WIZNET5K.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\WLANWiPy.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\network\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\openamp\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\os\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\platform\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Accel.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ADC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\CAN.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\DAC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\ExtInt.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Flash.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\I2C.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LCD.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\LED.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Pin.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\RTC.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Servo.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\SPI.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Switch.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\Timer.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\UART.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_HID.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\USB_VCP.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\pyb\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\random\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\rp2\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\select\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\socket\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\ssl\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\stm\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\struct\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\sys\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\time\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\uctypes\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\vfs\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\wipy\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\wm8960\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\DiskAccess.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\FlashArea.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\zsensor.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zephyr\\__init__.pyi\n", + "Fixing D:\\mypython\\micropython-stubber\\repos\\micropython-stubs\\stubs\\micropython-v1_24_0-docstubs\\zlib\\__init__.pyi\n" + ] + } + ], + "source": [ + "# run autoflake on all files - one by one to get the __init__.pyi files\n", + "for f in docstubs_p.rglob(\"*.pyi\"):\n", + " ! autoflake {f} --in --imports typing_extensions,_mpy_shed,_typeshed\n", + "\n", + "! isort {docstubs_p}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20:07:34 | ℹ️ micropython-stubber 1.23.2a0\n", + "20:07:34 | ℹ️ Build micropython ['v1.24.0'] ['samd'] ['seeed_wio_terminal', \n", + "'GENERIC']\n", + "20:07:34 | ℹ️ checking 2 possible board candidates\n", + "20:07:34 | ℹ️ Build: micropython-v1_24_0-samd-stubs\n", + "20:07:34 | ℹ️ - Update micropython-v1_24_0-samd-stubs\n", + "20:07:45 | ℹ️ Found changes to package sources: micropython-samd-stubs \n", + "1.24.0.post1 \n", + "20:07:48 | ℹ️ Build: micropython-v1_24_0-samd-seeed_wio_terminal-stubs\n", + "20:07:48 | ℹ️ - Update micropython-v1_24_0-samd-seeed_wio_terminal-stubs\n", + "20:07:50 | ℹ️ Found changes to package sources: \n", + "micropython-samd-seeed_wio_terminal-stubs 1.24.0.post1 \n", + "20:07:52 | ℹ️ Built 2 stub packages\n", + "result name version error path\n", + "-------- ----------------------------------------- ------------ ------- ---------------------------------------------------------------------------------\n", + "Build OK micropython-samd-stubs 1.24.0.post1 repos/micropython-stubs/publish/micropython-v1_24_0-samd-stubs\n", + "Build OK micropython-samd-seeed_wio_terminal-stubs 1.24.0.post1 repos/micropython-stubs/publish/micropython-v1_24_0-samd-seeed_wio_terminal-stubs\n" + ] + } + ], + "source": [ + "# ! stubber build --version {version} --port \"samd\" --board \"seeed_wio_terminal\" --board \"GENERIC\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All checks passed!\n" + ] + } + ], + "source": [ + "# ### sanity check on formatting\n", + "# stub_p = mps_p / f\"publish/micropython-{flat_version}-samd-seeed_wio_terminal-stubs\"\n", + "# ! ruff check {stub_p} --ignore F4 --ignore UP0 --ignore F811 " + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22:56:39 | ℹ️ micropython-stubber 1.23.2a0\n", + "22:56:39 | ℹ️ Log level set to TRACE\n", + "22:56:39 | ℹ️ Build micropython ['v1.24.0'] ['rp2'] ['RPI_PICO', 'GENERIC', \n", + "'RPI_PICO_W']\n", + "22:56:39 | ℹ️ checking 3 possible board candidates\n", + "22:56:39 | 🐞 No package found for micropython-rp2-stubs in database, creating \n", + "new package\n", + "22:56:39 | ℹ️ Build: micropython-v1_24_0-rp2-stubs\n", + "22:56:39 | ℹ️ - Update micropython-v1_24_0-rp2-stubs\n", + "22:56:39 | ✏️ repos/micropython-stubs/publish/micropython-v1_24_0-rp2-stubs\n", + "22:56:39 | 🐞 Copying Merged stubs from micropython-v1_24_0-rp2-RPI_PICO-merged\n", + "22:56:39 | 🐞 Copying Core stubs from micropython-core\n", + "22:56:39 | 🐞 poetry ['check', '-vvv'] starting\n", + "22:56:41 | ✏️ poetry ['check', '-vvv'] completed\n", + "22:56:41 | ✏️ changed = True | Stored: None | Current: \n", + "c936a20bfb12d9990748f282d07c66014a3867bc\n", + "22:56:41 | ℹ️ Found changes to package sources: micropython-rp2-stubs \n", + "1.24.0.post1 \n", + "22:56:41 | ✏️ Old hash None != New hash c936a20bfb12d9990748f282d07c66014a3867bc\n", + "22:56:41 | 🐞 micropython-rp2-stubs: bump version for 1.24.0.post1 to \n", + "1.24.0.post1 production\n", + "22:56:41 | ✏️ New hash: micropython-rp2-stubs 1.24.0.post1 None\n", + "22:56:41 | 🐞 poetry ['build', '-vvv'] starting\n", + "22:56:46 | ✏️ poetry ['build', '-vvv'] completed\n", + "22:56:46 | 🐞 No package found for micropython-rp2-rpi_pico-stubs in database, \n", + "creating new package\n", + "22:56:46 | ℹ️ Build: micropython-v1_24_0-rp2-rpi_pico-stubs\n", + "22:56:46 | ℹ️ - Update micropython-v1_24_0-rp2-rpi_pico-stubs\n", + "22:56:46 | ✏️ \n", + "repos/micropython-stubs/publish/micropython-v1_24_0-rp2-rpi_pico-stubs\n", + "22:56:46 | 🐞 Copying Merged stubs from micropython-v1_24_0-rp2-RPI_PICO-merged\n", + "22:56:46 | 🐞 Copying Core stubs from micropython-core\n", + "22:56:46 | 🐞 poetry ['check', '-vvv'] starting\n", + "22:56:48 | ✏️ poetry ['check', '-vvv'] completed\n", + "22:56:48 | ✏️ changed = True | Stored: None | Current: \n", + "3ec82261e8c9495b0e0d33a50d71f1d39b1d53ce\n", + "22:56:48 | ℹ️ Found changes to package sources: micropython-rp2-rpi_pico-stubs \n", + "1.24.0.post1 \n", + "22:56:48 | ✏️ Old hash None != New hash 3ec82261e8c9495b0e0d33a50d71f1d39b1d53ce\n", + "22:56:48 | 🐞 micropython-rp2-rpi_pico-stubs: bump version for 1.24.0.post1 to \n", + "1.24.0.post1 production\n", + "22:56:48 | ✏️ New hash: micropython-rp2-rpi_pico-stubs 1.24.0.post1 None\n", + "22:56:48 | 🐞 poetry ['build', '-vvv'] starting\n", + "22:56:50 | ✏️ poetry ['build', '-vvv'] completed\n", + "22:56:50 | 🐞 No package found for micropython-rp2-rpi_pico_w-stubs in \n", + "database, creating new package\n", + "22:56:50 | ℹ️ Build: micropython-v1_24_0-rp2-rpi_pico_w-stubs\n", + "22:56:50 | ℹ️ - Update micropython-v1_24_0-rp2-rpi_pico_w-stubs\n", + "22:56:50 | ✏️ \n", + "repos/micropython-stubs/publish/micropython-v1_24_0-rp2-rpi_pico_w-stubs\n", + "22:56:50 | 🐞 Copying Merged stubs from \n", + "micropython-v1_24_0-rp2-RPI_PICO_W-merged\n", + "22:56:50 | 🐞 Copying Core stubs from micropython-core\n", + "22:56:51 | 🐞 poetry ['check', '-vvv'] starting\n", + "22:56:52 | ✏️ poetry ['check', '-vvv'] completed\n", + "22:56:52 | ✏️ changed = True | Stored: None | Current: \n", + "91bbc2a946e1e14a0c0a9b6bc52de94219c69749\n", + "22:56:52 | ℹ️ Found changes to package sources: micropython-rp2-rpi_pico_w-stubs\n", + "1.24.0.post1 \n", + "22:56:52 | ✏️ Old hash None != New hash 91bbc2a946e1e14a0c0a9b6bc52de94219c69749\n", + "22:56:53 | 🐞 micropython-rp2-rpi_pico_w-stubs: bump version for 1.24.0.post1 \n", + "to 1.24.0.post1 production\n", + "22:56:53 | ✏️ New hash: micropython-rp2-rpi_pico_w-stubs 1.24.0.post1 None\n", + "22:56:53 | 🐞 poetry ['build', '-vvv'] starting\n", + "22:56:55 | ✏️ poetry ['build', '-vvv'] completed\n", + "22:56:55 | ℹ️ Built 3 stub packages\n", + "result name version error path\n", + "-------- -------------------------------- ------------ ------- ------------------------------------------------------------------------\n", + "Build OK micropython-rp2-stubs 1.24.0.post1 repos/micropython-stubs/publish/micropython-v1_24_0-rp2-stubs\n", + "Build OK micropython-rp2-rpi_pico-stubs 1.24.0.post1 repos/micropython-stubs/publish/micropython-v1_24_0-rp2-rpi_pico-stubs\n", + "Build OK micropython-rp2-rpi_pico_w-stubs 1.24.0.post1 repos/micropython-stubs/publish/micropython-v1_24_0-rp2-rpi_pico_w-stubs\n" + ] + } + ], + "source": [ + "! stubber -VV build --version {version} --port \"rp2\" --board \"RPI_PICO\" --board \"GENERIC\" --board \"RPI_PICO_W\"" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m============================= test session starts =============================\u001b[0m\n", + "platform win32 -- Python 3.11.9, pytest-7.4.4, pluggy-1.5.0 -- D:\\mypython\\micropython-stubber\\.venv\\Scripts\\python.exe\n", + "cachedir: .pytest_cache\n", + "hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase(WindowsPath('d:/mypython/micropython-stubber/.hypothesis/examples'))\n", + "metadata: {'Python': '3.11.9', 'Platform': 'Windows-10-10.0.26100-SP0', 'Packages': {'pytest': '7.4.4', 'pluggy': '1.5.0'}, 'Plugins': {'hypothesis': '6.108.10', 'github-actions-annotate-failures': '0.2.0', 'json-report': '1.5.0', 'metadata': '3.1.1', 'mock': '3.14.0'}}\n", + "rootdir: d:\\mypython\\micropython-stubber\\repos\\micropython-stubs\n", + "configfile: pyproject.toml\n", + "plugins: hypothesis-6.108.10, github-actions-annotate-failures-0.2.0, json-report-1.5.0, metadata-3.1.1, mock-3.14.0\n", + "\u001b[1mcollecting ... \u001b[0mcollected 628 items / 605 deselected / 23 selected\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rp2-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-micropython-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-stdlib-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-uasyncio-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-machine-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico-rp2-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico-micropython-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico-stdlib-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico-uasyncio-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico-machine-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-rp2-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-micropython-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-stdlib-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-uasyncio-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-machine-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-networking-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-bluetooth-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico_w-aioble-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico2-rp2-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico2-micropython-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico2-stdlib-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico2-uasyncio-pyright] \u001b[31mFAILED\u001b[0m\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::test_typecheck[local-v1.24.0-rp2-rpi_pico2-machine-pyright] \u001b[31mFAILED\u001b[0m\n", + "\n", + "================================== FAILURES ===================================\n", + "\u001b[31m\u001b[1m________________ test_typecheck[local-v1.24.0-rp2-rp2-pyright] ________________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2, rp2 v1.24.0 from local\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(11,30): No parameter named \"freq\"\n", + "\"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(4,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Pin, Pin)\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(3,4): \"country\" is not a known attribute of module \"rp2\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2', feature = 'rp2'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/check_rp2')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB02F10>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 3 errors and 0 warnings in 16 files.\n", + "E assert 2 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2, rp2 v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(11,30): No parameter named \"freq\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(4,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Pin, Pin)\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(3,4): \"country\" is not a known attribute of module \"rp2\"\n", + "\u001b[31m\u001b[1m____________ test_typecheck[local-v1.24.0-rp2-micropython-pyright] ____________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2, micropython v1.24.0 from local\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(22,28): Argument of type \"dict[str, Unknown]\" cannot be assigned to parameter \"struct\" of type \"struct | _descriptor\" in function \"sizeof\"\n", + "  Type \"dict[str, Unknown]\" is not assignable to type \"struct | _descriptor\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"struct\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"tuple[str, _property]\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2', feature = 'micropython'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_micropython')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904D431950>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 4 errors and 0 warnings in 11 files.\n", + "E assert 4 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2, micropython v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(22,28): Argument of type \"dict[str, Unknown]\" cannot be assigned to parameter \"struct\" of type \"struct | _descriptor\" in function \"sizeof\"\n", + "  Type \"dict[str, Unknown]\" is not assignable to type \"struct | _descriptor\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"struct\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"tuple[str, _property]\"\n", + "\u001b[31m\u001b[1m______________ test_typecheck[local-v1.24.0-rp2-stdlib-pyright] _______________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2, stdlib v1.24.0 from local\n", + "\"tests/quality_tests/feat_stdlib/check_io.py\"(11,9): \"BufferedWriter\" is not a known attribute of module \"io\"\n", + "\"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(2,15): \"IOBase\" is unknown import symbol\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(19,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(20,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(21,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(22,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(23,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,20): Argument of type \"exc\" cannot be assigned to parameter \"exc\" of type \"BaseException\" in function \"print_exception\"\n", + "  \"type[type]\" is not assignable to \"type[BaseException]\"\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2', feature = 'stdlib'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_stdlib')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DADF1D0>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 10 errors and 0 warnings in 25 files.\n", + "E assert 10 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2, stdlib v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_io.py\"(11,9): \"BufferedWriter\" is not a known attribute of module \"io\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(2,15): \"IOBase\" is unknown import symbol\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(19,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(20,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(21,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(22,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(23,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,20): Argument of type \"exc\" cannot be assigned to parameter \"exc\" of type \"BaseException\" in function \"print_exception\"\n", + "  \"type[type]\" is not assignable to \"type[BaseException]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\u001b[31m\u001b[1m_____________ test_typecheck[local-v1.24.0-rp2-uasyncio-pyright] ______________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2, uasyncio v1.24.0 from local\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Task[Unknown]\"\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(71,26): Cannot access attribute \"cancel\" for class \"Task[Unknown]\"\n", + "  Attribute \"cancel\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(116,26): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(168,36): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(32,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(34,22): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(56,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(65,18): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2', feature = 'uasyncio'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_uasyncio')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904C991690>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 7 errors and 0 warnings in 3 files.\n", + "E assert 6 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2, uasyncio v1.24.0 from local\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Task[Unknown]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(71,26): Cannot access attribute \"cancel\" for class \"Task[Unknown]\"\n", + "  Attribute \"cancel\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(116,26): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(168,36): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(32,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(34,22): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(56,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(65,18): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1m______________ test_typecheck[local-v1.24.0-rp2-machine-pyright] ______________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2, machine v1.24.0 from local\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(5,11): Argument of type \"Literal[2]\" cannot be assigned to parameter \"id\" of type \"Pin | str\" in function \"__init__\"\n", + "  Type \"Literal[2]\" is not assignable to type \"Pin | str\"\n", + "    \"Literal[2]\" is not assignable to \"Pin\"\n", + "    \"Literal[2]\" is not assignable to \"str\"\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(5,21): Cannot access attribute \"IN\" for class \"type[Signal]\"\n", + "  Attribute \"IN\" is unknown\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(6,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(7,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(12,0): Expected 1 more positional argument\n", + "\"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(5,6): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: ()\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(7,7): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[0], Literal[115200], Literal[10], Pin, Pin)\n", + "\"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(9,36): \"DEEPSLEEP_RESET\" is not a known attribute of module \"machine\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(32,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Literal[33], Literal[32])\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2', feature = 'machine'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_machine')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904D748310>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 9 errors and 0 warnings in 8 files.\n", + "E assert 8 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2, machine v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(5,11): Argument of type \"Literal[2]\" cannot be assigned to parameter \"id\" of type \"Pin | str\" in function \"__init__\"\n", + "  Type \"Literal[2]\" is not assignable to type \"Pin | str\"\n", + "    \"Literal[2]\" is not assignable to \"Pin\"\n", + "    \"Literal[2]\" is not assignable to \"str\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(5,21): Cannot access attribute \"IN\" for class \"type[Signal]\"\n", + "  Attribute \"IN\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(6,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(7,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(12,0): Expected 1 more positional argument\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(5,6): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: ()\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(7,7): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[0], Literal[115200], Literal[10], Pin, Pin)\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(9,36): \"DEEPSLEEP_RESET\" is not a known attribute of module \"machine\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(32,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Literal[33], Literal[32])\n", + "\u001b[31m\u001b[1m___________ test_typecheck[local-v1.24.0-rp2-rpi_pico-rp2-pyright] ____________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico, rp2 v1.24.0 from local\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(11,30): No parameter named \"freq\"\n", + "\"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(4,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Pin, Pin)\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(3,4): \"country\" is not a known attribute of module \"rp2\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico', feature = 'rp2'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/check_rp2')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904D758650>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 3 errors and 0 warnings in 16 files.\n", + "E assert 2 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico, rp2 v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(11,30): No parameter named \"freq\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(4,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Pin, Pin)\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(3,4): \"country\" is not a known attribute of module \"rp2\"\n", + "\u001b[31m\u001b[1m_______ test_typecheck[local-v1.24.0-rp2-rpi_pico-micropython-pyright] ________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico, micropython v1.24.0 from local\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(22,28): Argument of type \"dict[str, Unknown]\" cannot be assigned to parameter \"struct\" of type \"struct | _descriptor\" in function \"sizeof\"\n", + "  Type \"dict[str, Unknown]\" is not assignable to type \"struct | _descriptor\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"struct\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"tuple[str, _property]\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico', feature = 'micropython'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_micropython')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DAB8250>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 4 errors and 0 warnings in 11 files.\n", + "E assert 4 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico, micropython v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(22,28): Argument of type \"dict[str, Unknown]\" cannot be assigned to parameter \"struct\" of type \"struct | _descriptor\" in function \"sizeof\"\n", + "  Type \"dict[str, Unknown]\" is not assignable to type \"struct | _descriptor\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"struct\"\n", + "    \"dict[str, Unknown]\" is not assignable to \"tuple[str, _property]\"\n", + "\u001b[31m\u001b[1m__________ test_typecheck[local-v1.24.0-rp2-rpi_pico-stdlib-pyright] __________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico, stdlib v1.24.0 from local\n", + "\"tests/quality_tests/feat_stdlib/check_io.py\"(11,9): \"BufferedWriter\" is not a known attribute of module \"io\"\n", + "\"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(2,15): \"IOBase\" is unknown import symbol\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(19,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(20,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(21,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(22,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(23,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,20): Argument of type \"exc\" cannot be assigned to parameter \"exc\" of type \"BaseException\" in function \"print_exception\"\n", + "  \"type[type]\" is not assignable to \"type[BaseException]\"\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico', feature = 'stdlib'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_stdlib')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB26910>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 10 errors and 0 warnings in 25 files.\n", + "E assert 10 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico, stdlib v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_io.py\"(11,9): \"BufferedWriter\" is not a known attribute of module \"io\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(2,15): \"IOBase\" is unknown import symbol\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(19,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(20,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(21,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(22,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_uname.py\"(23,12): \"assert_type\" mismatch: expected \"str\" but received \"str | Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,20): Argument of type \"exc\" cannot be assigned to parameter \"exc\" of type \"BaseException\" in function \"print_exception\"\n", + "  \"type[type]\" is not assignable to \"type[BaseException]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\u001b[31m\u001b[1m_________ test_typecheck[local-v1.24.0-rp2-rpi_pico-uasyncio-pyright] _________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico, uasyncio v1.24.0 from local\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Task[Unknown]\"\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(71,26): Cannot access attribute \"cancel\" for class \"Task[Unknown]\"\n", + "  Attribute \"cancel\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(116,26): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(168,36): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(32,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(34,22): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(56,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(65,18): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico', feature = 'uasyncio'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_uasyncio')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DABA410>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 7 errors and 0 warnings in 3 files.\n", + "E assert 6 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico, uasyncio v1.24.0 from local\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Task[Unknown]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(71,26): Cannot access attribute \"cancel\" for class \"Task[Unknown]\"\n", + "  Attribute \"cancel\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(116,26): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(168,36): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(32,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(34,22): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(56,24): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(65,18): Object of type \"Generator[Unknown, None, None]\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1m_________ test_typecheck[local-v1.24.0-rp2-rpi_pico-machine-pyright] __________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico, machine v1.24.0 from local\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(5,11): Argument of type \"Literal[2]\" cannot be assigned to parameter \"id\" of type \"Pin | str\" in function \"__init__\"\n", + "  Type \"Literal[2]\" is not assignable to type \"Pin | str\"\n", + "    \"Literal[2]\" is not assignable to \"Pin\"\n", + "    \"Literal[2]\" is not assignable to \"str\"\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(5,21): Cannot access attribute \"IN\" for class \"type[Signal]\"\n", + "  Attribute \"IN\" is unknown\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(6,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(7,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(12,0): Expected 1 more positional argument\n", + "\"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(5,6): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: ()\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(7,7): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[0], Literal[115200], Literal[10], Pin, Pin)\n", + "\"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(9,36): \"DEEPSLEEP_RESET\" is not a known attribute of module \"machine\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(32,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Literal[33], Literal[32])\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico', feature = 'machine'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_machine')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DAECC50>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 9 errors and 0 warnings in 8 files.\n", + "E assert 8 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico, machine v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(5,11): Argument of type \"Literal[2]\" cannot be assigned to parameter \"id\" of type \"Pin | str\" in function \"__init__\"\n", + "  Type \"Literal[2]\" is not assignable to type \"Pin | str\"\n", + "    \"Literal[2]\" is not assignable to \"Pin\"\n", + "    \"Literal[2]\" is not assignable to \"str\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(5,21): Cannot access attribute \"IN\" for class \"type[Signal]\"\n", + "  Attribute \"IN\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(6,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(7,0): Object of type \"Signal\" is not callable\n", + "  Attribute \"__call__\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(12,0): Expected 1 more positional argument\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(5,6): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: ()\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(7,7): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[0], Literal[115200], Literal[10], Pin, Pin)\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(9,36): \"DEEPSLEEP_RESET\" is not a known attribute of module \"machine\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(32,8): No overloads for \"__init__\" match the provided arguments\n", + "  Argument types: (Literal[1], Literal[9600], Literal[33], Literal[32])\n", + "\u001b[31m\u001b[1m__________ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-rp2-pyright] ___________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, rp2 v1.24.0 from local\n", + "\"tests/quality_tests/check_rp2/check_neopixel.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_neopixel.py\"(4,5): Import \"neopixel\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_onewire.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_onewire.py\"(4,7): Import \"onewire\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_time.py\"(3,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pio_exec.py\"(7,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pio_exec.py\"(9,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pio_exec.py\"(10,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pwm_fade.py\"(3,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pwm_fade.py\"(4,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ADC.py\"(2,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(16,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_I2S.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_PWM.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(7,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(8,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(2,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(2,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(4,7): Import \"ds18x20\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(5,7): Import \"onewire\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(6,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(9,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(13,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(14,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(1,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(9,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(12,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(13,5): Import \"machine\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'rp2'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/check_rp2')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DAECED0>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 30 errors and 0 warnings in 16 files.\n", + "E assert 30 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, rp2 v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_neopixel.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_neopixel.py\"(4,5): Import \"neopixel\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_onewire.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_onewire.py\"(4,7): Import \"onewire\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_time.py\"(3,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pio_exec.py\"(7,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pio_exec.py\"(9,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pio_exec.py\"(10,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pwm_fade.py\"(3,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pwm_fade.py\"(4,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ADC.py\"(2,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(16,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_I2S.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_PWM.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(7,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(8,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(2,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(2,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(4,7): Import \"ds18x20\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(5,7): Import \"onewire\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(6,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(9,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(13,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(14,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(1,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(9,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(12,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(13,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1m______ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-micropython-pyright] _______\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, micropython v1.24.0 from local\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_gc.py\"(3,7): Import \"gc\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_time.py\"(3,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_timedfunction.py\"(9,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(10,7): Import \"uctypes\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(29,37): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(30,93): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(31,42): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(58,32): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(83,30): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(84,25): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(85,44): Unnecessary \"# type: ignore\" comment\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'micropython'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_micropython')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DA5FD90>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 14 errors and 0 warnings in 11 files.\n", + "E assert 14 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, micropython v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_gc.py\"(3,7): Import \"gc\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_time.py\"(3,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_timedfunction.py\"(9,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(10,7): Import \"uctypes\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(29,37): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(30,93): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(31,42): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(58,32): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(83,30): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(84,25): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(85,44): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1m_________ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-stdlib-pyright] _________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, stdlib v1.24.0 from local\n", + "\"tests/quality_tests/feat_stdlib/check_array.py\"(1,7): Import \"array\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_struct.py\"(3,19): \"pack\" is unknown import symbol\n", + "\"tests/quality_tests/feat_stdlib/check_uio.py\"(1,7): Import \"uio\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(44,26): Expected 2 positional arguments\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(45,26): Expected 2 positional arguments\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(46,26): Expected 2 positional arguments\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(56,39): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(59,40): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(60,48): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(61,54): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(62,48): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(63,46): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(64,51): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(67,42): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(68,50): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(69,56): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(70,50): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(71,48): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(72,53): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(11,7): Import \"ubinascii\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(12,7): Import \"uhashlib\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(9,3): \"mount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(13,3): \"mount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(17,3): \"umount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(8,3): \"mount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(10,3): \"umount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(15,9): Argument of type \"_implementation\" cannot be assigned to parameter \"imp\" of type \"Tuple[Unknown, ...]\" in function \"is_tuple\"\n", + "  \"_implementation\" is not assignable to \"Tuple[Unknown, ...]\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(16,12): \"assert_type\" mismatch: expected \"Tuple[Unknown, ...]\" but received \"_implementation\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_print_exception.py\"(3,16): \"print_exception\" is unknown import symbol\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,4): \"print_exception\" is not a known attribute of module \"sys\"\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(3,5): Import \"ucollections\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(9,32): Variable not allowed in type expression\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_ordereddict.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'stdlib'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_stdlib')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DA8FE50>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 36 errors and 0 warnings in 25 files.\n", + "E assert 36 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, stdlib v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_array.py\"(1,7): Import \"array\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_struct.py\"(3,19): \"pack\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_uio.py\"(1,7): Import \"uio\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(44,26): Expected 2 positional arguments\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(45,26): Expected 2 positional arguments\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(46,26): Expected 2 positional arguments\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(56,39): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(59,40): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(60,48): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(61,54): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(62,48): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(63,46): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(64,51): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(67,42): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(68,50): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(69,56): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(70,50): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(71,48): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(72,53): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(11,7): Import \"ubinascii\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(12,7): Import \"uhashlib\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(9,3): \"mount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(13,3): \"mount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(17,3): \"umount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(8,3): \"mount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(10,3): \"umount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(15,9): Argument of type \"_implementation\" cannot be assigned to parameter \"imp\" of type \"Tuple[Unknown, ...]\" in function \"is_tuple\"\n", + "  \"_implementation\" is not assignable to \"Tuple[Unknown, ...]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(16,12): \"assert_type\" mismatch: expected \"Tuple[Unknown, ...]\" but received \"_implementation\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_print_exception.py\"(3,16): \"print_exception\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,4): \"print_exception\" is not a known attribute of module \"sys\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(3,5): Import \"ucollections\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(9,32): Variable not allowed in type expression\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_ordereddict.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\u001b[31m\u001b[1m________ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-uasyncio-pyright] ________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, uasyncio v1.24.0 from local\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(5,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(8,7): Import \"uasyncio\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(11,5): Import \"uasyncio\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Unknown\"\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(188,45): Argument of type \"None\" cannot be assigned to parameter \"s\" of type \"str\" in function \"write\"\n", + "  \"None\" is not assignable to \"str\"\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(15,7): Import \"uasyncio\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(16,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/roundrobin.py\"(12,7): Import \"uasyncio\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'uasyncio'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_uasyncio')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB03D10>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 7 errors and 0 warnings in 3 files.\n", + "E assert 7 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, uasyncio v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(5,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(8,7): Import \"uasyncio\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(11,5): Import \"uasyncio\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(188,45): Argument of type \"None\" cannot be assigned to parameter \"s\" of type \"str\" in function \"write\"\n", + "  \"None\" is not assignable to \"str\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(15,7): Import \"uasyncio\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(16,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/roundrobin.py\"(12,7): Import \"uasyncio\" could not be resolved\n", + "\u001b[31m\u001b[1m________ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-machine-pyright] _________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, machine v1.24.0 from local\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(13,12): \"assert_type\" mismatch: expected \"str | None\" but received \"Unknown\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(15,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(16,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(3,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(3,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(5,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(14,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(30,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(40,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(63,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(72,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(86,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(97,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_memNNN.py\"(1,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_reset.py\"(3,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(1,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(8,12): \"assert_type\" mismatch: expected \"bytes\" but received \"Unknown\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'machine'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_machine')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB82ED0>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 20 errors and 0 warnings in 8 files.\n", + "E assert 20 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, machine v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(13,12): \"assert_type\" mismatch: expected \"str | None\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(15,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(16,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(3,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(3,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(5,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(14,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(30,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(40,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(63,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(72,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(86,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(97,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_memNNN.py\"(1,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_reset.py\"(3,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(1,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(8,12): \"assert_type\" mismatch: expected \"bytes\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1m_______ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-networking-pyright] _______\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, networking v1.24.0 from local\n", + "\"tests/quality_tests/feat_networking/check_network.py\"(6,7): Import \"network\" could not be resolved\n", + "\"tests/quality_tests/feat_networking/check_network.py\"(24,11): Import \"network\" could not be resolved\n", + "\"tests/quality_tests/feat_networking/check_ssl.py\"(31,12): Cannot access attribute \"load_cert_chain\" for class \"SSLContext\"\n", + "  Attribute \"load_cert_chain\" is unknown\n", + "\"tests/quality_tests/feat_networking/check_examples/http_client_ssl.py\"(15,12): \"wrap_socket\" is not a known attribute of module \"ssl\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server.py\"(19,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server.py\"(19,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_simplistic.py\"(18,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_simplistic.py\"(18,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_simplistic_commented.py\"(41,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_simplistic_commented.py\"(41,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(1,7): Import \"binascii\" could not be resolved\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(51,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(51,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(64,23): \"wrap_socket\" is not a known attribute of module \"ssl\"\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(77,44): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(80,46): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_networking/check_network/check_country.py\"(3,7): Import \"network\" could not be resolved\n", + "\"tests/quality_tests/feat_networking/check_network/check_network.py\"(3,7): Import \"network\" could not be resolved\n", + "\"tests/quality_tests/feat_networking/check_network/check_network.py\"(23,11): Import \"network\" could not be resolved\n", + "\"tests/quality_tests/feat_networking/check_network/check_wlan.py\"(1,7): Import \"network\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'networking'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_networking')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB63BD0>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 20 errors and 0 warnings in 11 files.\n", + "E assert 17 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, networking v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_network.py\"(6,7): Import \"network\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_network.py\"(24,11): Import \"network\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_networking/check_ssl.py\"(31,12): Cannot access attribute \"load_cert_chain\" for class \"SSLContext\"\n", + "  Attribute \"load_cert_chain\" is unknown\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_client_ssl.py\"(15,12): \"wrap_socket\" is not a known attribute of module \"ssl\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server.py\"(19,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server.py\"(19,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_simplistic.py\"(18,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_simplistic.py\"(18,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_simplistic_commented.py\"(41,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_simplistic_commented.py\"(41,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(1,7): Import \"binascii\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(51,24): \"SOL_SOCKET\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(51,43): \"SO_REUSEADDR\" is not a known attribute of module \"socket\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(64,23): \"wrap_socket\" is not a known attribute of module \"ssl\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(77,44): Unnecessary \"# type: ignore\" comment\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_networking/check_examples/http_server_ssl.py\"(80,46): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_network/check_country.py\"(3,7): Import \"network\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_network/check_network.py\"(3,7): Import \"network\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_network/check_network.py\"(23,11): Import \"network\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_networking/check_network/check_wlan.py\"(1,7): Import \"network\" could not be resolved\n", + "\u001b[31m\u001b[1m_______ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-bluetooth-pyright] ________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, bluetooth v1.24.0 from local\n", + "\"tests/quality_tests/feat_bluetooth/check_bluetooth.py\"(1,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(35,26): \"pack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(39,15): \"pack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(57,45): \"pack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(83,46): \"unpack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(85,46): \"unpack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(13,7): Import \"binascii\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(17,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(19,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(130,24): Type of \"key\" is \"Unknown\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(147,51): \"pack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(166,44): Object of type \"None\" cannot be used as iterable value\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(166,44): \"bool\" is not iterable\n", + "  \"__iter__\" method not defined\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_central.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_central.py\"(12,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_peripheral.py\"(8,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_peripheral.py\"(11,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature.py\"(12,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature.py\"(15,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature.py\"(72,51): \"pack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature_central.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature_central.py\"(12,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature_central.py\"(216,29): \"unpack\" is not a known attribute of module \"struct\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_peripheral.py\"(8,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_peripheral.py\"(98,11): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(10,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(46,15): \"dupterm_notify\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(84,7): \"dupterm\" is not a known attribute of module \"os\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'bluetooth'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_bluetooth')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DABB450>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 29 errors and 0 warnings in 9 files.\n", + "E assert 28 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, bluetooth v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_bluetooth.py\"(1,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(35,26): \"pack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(39,15): \"pack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(57,45): \"pack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(83,46): \"unpack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_advertising.py\"(85,46): \"unpack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(13,7): Import \"binascii\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(17,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(19,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(130,24): Type of \"key\" is \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(147,51): \"pack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(166,44): Object of type \"None\" cannot be used as iterable value\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_bonding_peripheral.py\"(166,44): \"bool\" is not iterable\n", + "  \"__iter__\" method not defined\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_central.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_central.py\"(12,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_peripheral.py\"(8,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_simple_peripheral.py\"(11,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature.py\"(12,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature.py\"(15,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature.py\"(72,51): \"pack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature_central.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature_central.py\"(12,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_temperature_central.py\"(216,29): \"unpack\" is not a known attribute of module \"struct\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_peripheral.py\"(8,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_peripheral.py\"(98,11): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(9,7): Import \"bluetooth\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(10,7): Import \"machine\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(46,15): \"dupterm_notify\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_bluetooth/check_examples/ble_uart_repl.py\"(84,7): \"dupterm\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1m_________ test_typecheck[local-v1.24.0-rp2-rpi_pico_w-aioble-pyright] _________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico_w, aioble v1.24.0 from local\n", + "\"tests/quality_tests/feat_aioble/check_btle_constants.py\"(3,7): Import \"aioble.client\" could not be resolved\n", + "\"tests/quality_tests/feat_aioble/check_btle_constants.py\"(5,12): \"assert_type\" mismatch: expected \"int\" but received \"Unknown\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico_w', feature = 'aioble'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_aioble')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB93950>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 2 errors and 0 warnings in 1 files.\n", + "E assert 2 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico_w, aioble v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_aioble/check_btle_constants.py\"(3,7): Import \"aioble.client\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_aioble/check_btle_constants.py\"(5,12): \"assert_type\" mismatch: expected \"int\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1m___________ test_typecheck[local-v1.24.0-rp2-rpi_pico2-rp2-pyright] ___________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico2, rp2 v1.24.0 from local\n", + "\"tests/quality_tests/check_rp2/check_neopixel.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_neopixel.py\"(4,5): Import \"neopixel\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_onewire.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_onewire.py\"(4,7): Import \"onewire\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_time.py\"(3,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pio_exec.py\"(7,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pio_exec.py\"(9,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pio_exec.py\"(10,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pwm_fade.py\"(3,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/pwm_fade.py\"(4,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ADC.py\"(2,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(16,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_I2S.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_PWM.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(7,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(8,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(2,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(2,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(4,7): Import \"ds18x20\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(5,7): Import \"onewire\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(6,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(9,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(13,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(14,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(1,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(9,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(12,7): Import \"rp2\" could not be resolved\n", + "\"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(13,5): Import \"machine\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico2', feature = 'rp2'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/check_rp2')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DA5C910>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 30 errors and 0 warnings in 16 files.\n", + "E assert 30 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico2, rp2 v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_neopixel.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_neopixel.py\"(4,5): Import \"neopixel\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_onewire.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_onewire.py\"(4,7): Import \"onewire\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_time.py\"(3,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pio_exec.py\"(7,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pio_exec.py\"(9,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pio_exec.py\"(10,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pwm_fade.py\"(3,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/pwm_fade.py\"(4,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ADC.py\"(2,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_I2C.py\"(16,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_I2S.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_PWM.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(7,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Pin.py\"(8,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_Timer.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_UART.py\"(2,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(2,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(4,7): Import \"ds18x20\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(5,7): Import \"onewire\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_machine/check_ds18x20.py\"(6,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(9,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(13,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_asm_pio.py\"(14,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_country.py\"(1,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(9,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(12,7): Import \"rp2\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/check_rp2/check_rp2/check_no_type_check.py\"(13,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1m_______ test_typecheck[local-v1.24.0-rp2-rpi_pico2-micropython-pyright] _______\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico2, micropython v1.24.0 from local\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\"tests/quality_tests/feat_micropython/check_gc.py\"(3,7): Import \"gc\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_time.py\"(3,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_timedfunction.py\"(9,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(10,7): Import \"uctypes\" could not be resolved\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(29,37): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(30,93): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(31,42): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(58,32): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(83,30): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(84,25): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_micropython/check_uctypes.py\"(85,44): Unnecessary \"# type: ignore\" comment\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico2', feature = 'micropython'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_micropython')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB63A90>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 14 errors and 0 warnings in 11 files.\n", + "E assert 14 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico2, micropython v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,27): \"AF_INET\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,36): \"SOCK_STREAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_functions.py\"(1,49): \"SOCK_DGRAM\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_gc.py\"(3,7): Import \"gc\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_time.py\"(3,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_timedfunction.py\"(9,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(10,7): Import \"uctypes\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(29,37): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(30,93): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(31,42): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(58,32): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(83,30): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(84,25): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_micropython/check_uctypes.py\"(85,44): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1m_________ test_typecheck[local-v1.24.0-rp2-rpi_pico2-stdlib-pyright] __________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico2, stdlib v1.24.0 from local\n", + "\"tests/quality_tests/feat_stdlib/check_array.py\"(1,7): Import \"array\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_struct.py\"(3,19): \"pack\" is unknown import symbol\n", + "\"tests/quality_tests/feat_stdlib/check_uio.py\"(1,7): Import \"uio\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(44,26): Expected 2 positional arguments\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(45,26): Expected 2 positional arguments\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(46,26): Expected 2 positional arguments\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(56,39): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(59,40): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(60,48): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(61,54): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(62,48): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(63,46): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(64,51): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(67,42): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(68,50): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(69,56): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(70,50): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(71,48): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(72,53): Unnecessary \"# type: ignore\" comment\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(11,7): Import \"ubinascii\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(12,7): Import \"uhashlib\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(9,3): \"mount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(13,3): \"mount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(17,3): \"umount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(8,3): \"mount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(10,3): \"umount\" is not a known attribute of module \"os\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(15,9): Argument of type \"_implementation\" cannot be assigned to parameter \"imp\" of type \"Tuple[Unknown, ...]\" in function \"is_tuple\"\n", + "  \"_implementation\" is not assignable to \"Tuple[Unknown, ...]\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(16,12): \"assert_type\" mismatch: expected \"Tuple[Unknown, ...]\" but received \"_implementation\"\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_print_exception.py\"(3,16): \"print_exception\" is unknown import symbol\n", + "\"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,4): \"print_exception\" is not a known attribute of module \"sys\"\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(3,5): Import \"ucollections\" could not be resolved\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"Unknown\"\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(9,32): Variable not allowed in type expression\n", + "\"tests/quality_tests/feat_stdlib/check_ucollections/check_ordereddict.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico2', feature = 'stdlib'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_stdlib')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904D8776D0>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 36 errors and 0 warnings in 25 files.\n", + "E assert 36 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico2, stdlib v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_array.py\"(1,7): Import \"array\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_struct.py\"(3,19): \"pack\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_uio.py\"(1,7): Import \"uio\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_collections/check_namedtuple_2.py\"(7,12): Type of \"WifiConfig\" is \"type[WifiConfig]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(39,16): Type of \"seps_1\" is \"tuple[Literal[','], Literal[':']]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(44,26): Expected 2 positional arguments\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(45,26): Expected 2 positional arguments\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(46,26): Expected 2 positional arguments\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(56,39): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(59,40): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(60,48): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(61,54): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(62,48): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(63,46): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(64,51): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(67,42): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(68,50): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(69,56): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(70,50): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(71,48): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_json/check_json.py\"(72,53): Unnecessary \"# type: ignore\" comment\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(11,7): Import \"ubinascii\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(12,7): Import \"uhashlib\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(40,29): Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to declared type \"List[str]\"\n", + "  Type \"str | Unknown | LiteralString | list[dict[Unknown, Unknown]]\" is not assignable to type \"List[str]\"\n", + "    \"str\" is not assignable to \"List[str]\"\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(56,24): Type of \"subdir\" is \"List[str]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_files.py\"(57,17): Type \"list[str | dict[Unknown, Unknown]]\" is not assignable to declared type \"List[dict[Unknown, Unknown]]\"\n", + "  \"list[str | dict[Unknown, Unknown]]\" is not assignable to \"List[dict[Unknown, Unknown]]\"\n", + "    Type parameter \"_T@list\" is invariant, but \"str | dict[Unknown, Unknown]\" is not the same as \"dict[Unknown, Unknown]\"\n", + "    Consider switching from \"list\" to \"Sequence\" which is covariant\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(9,3): \"mount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(13,3): \"mount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_mount.py\"(17,3): \"umount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(8,3): \"mount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_os/check_os_mount.py\"(10,3): \"umount\" is not a known attribute of module \"os\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(15,9): Argument of type \"_implementation\" cannot be assigned to parameter \"imp\" of type \"Tuple[Unknown, ...]\" in function \"is_tuple\"\n", + "  \"_implementation\" is not assignable to \"Tuple[Unknown, ...]\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_implementation.py\"(16,12): \"assert_type\" mismatch: expected \"Tuple[Unknown, ...]\" but received \"_implementation\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_print_exception.py\"(3,16): \"print_exception\" is unknown import symbol\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_sys/check_sys.py\"(24,4): \"print_exception\" is not a known attribute of module \"sys\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(3,5): Import \"ucollections\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(7,12): Type of \"WifiConfig\" is \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_namedtuple_2u.py\"(9,32): Variable not allowed in type expression\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_stdlib/check_ucollections/check_ordereddict.py\"(1,5): Import \"ucollections\" could not be resolved\n", + "\u001b[31m\u001b[1m________ test_typecheck[local-v1.24.0-rp2-rpi_pico2-uasyncio-pyright] _________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico2, uasyncio v1.24.0 from local\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(5,7): Import \"time\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(8,7): Import \"uasyncio\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(11,5): Import \"uasyncio\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Unknown\"\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(188,45): Argument of type \"None\" cannot be assigned to parameter \"s\" of type \"str\" in function \"write\"\n", + "  \"None\" is not assignable to \"str\"\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(15,7): Import \"uasyncio\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(16,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_uasyncio/check_demo/roundrobin.py\"(12,7): Import \"uasyncio\" could not be resolved\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico2', feature = 'uasyncio'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_uasyncio')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DBA2310>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 7 errors and 0 warnings in 3 files.\n", + "E assert 7 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico2, uasyncio v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(5,7): Import \"time\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(8,7): Import \"uasyncio\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(11,5): Import \"uasyncio\" could not be resolved\n", + "\u001b[32mINFO \u001b[0m root:typecheck.py:175 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(64,24): Type of \"intr_task\" is \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/aiorepl.py\"(188,45): Argument of type \"None\" cannot be assigned to parameter \"s\" of type \"str\" in function \"write\"\n", + "  \"None\" is not assignable to \"str\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(15,7): Import \"uasyncio\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/auart_hd.py\"(16,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_uasyncio/check_demo/roundrobin.py\"(12,7): Import \"uasyncio\" could not be resolved\n", + "\u001b[31m\u001b[1m_________ test_typecheck[local-v1.24.0-rp2-rpi_pico2-machine-pyright] _________\u001b[0m\n", + "\n", + "Typecheck pyright on rp2-rpi_pico2, machine v1.24.0 from local\n", + "\"tests/quality_tests/feat_machine/check_signal.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(3,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(13,12): \"assert_type\" mismatch: expected \"str | None\" but received \"Unknown\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(15,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(16,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(3,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(3,7): Import \"utime\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(5,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(14,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(30,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(40,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(63,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(72,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(86,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(97,5): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_memNNN.py\"(1,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_reset.py\"(3,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(1,7): Import \"machine\" could not be resolved\n", + "\"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(8,12): \"assert_type\" mismatch: expected \"bytes\" but received \"Unknown\"\n", + "\n", + "linter = 'pyright', stub_source = 'local', version = 'v1.24.0'\n", + "portboard = 'rp2-rpi_pico2', feature = 'machine'\n", + "snip_path = WindowsPath('d:/mypython/micropython-stubber/repos/micropython-stubs/tests/quality_tests/feat_machine')\n", + "copy_type_stubs = None\n", + "caplog = <_pytest.logging.LogCaptureFixture object at 0x000002904DB824D0>\n", + "pytestconfig = <_pytest.config.Config object at 0x00000290495BA210>\n", + "\n", + " @pytest.mark.parametrize(\n", + " \"linter\",\n", + " [\"pyright\", \"mypy\"],\n", + " )\n", + " def test_typecheck(\n", + " linter: str,\n", + " stub_source: str,\n", + " version: str,\n", + " portboard: str,\n", + " feature: str,\n", + " snip_path: Path,\n", + " copy_type_stubs, # Avoid needing autouse fixture\n", + " caplog: pytest.LogCaptureFixture,\n", + " pytestconfig: pytest.Config,\n", + " ):\n", + " if not snip_path or not snip_path.exists():\n", + " FileNotFoundError(f\"no feature folder for {feature}\")\n", + " caplog.set_level(logging.INFO)\n", + " \n", + " log.info(f\"Typecheck {linter} on {portboard}, {feature} {version} from {stub_source}\")\n", + " \n", + " info_msg, errorcount = run_typechecker(\n", + " snip_path, version, portboard, pytestconfig, linter=linter\n", + " )\n", + "> assert errorcount == 0, info_msg\n", + "E AssertionError: pyright found 20 errors and 0 warnings in 8 files.\n", + "E assert 20 == 0\n", + "\n", + "repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py:287: AssertionError\n", + "------------------------------ Captured log call ------------------------------\n", + "\u001b[32mINFO \u001b[0m root:test_snippets.py:282 Typecheck pyright on rp2-rpi_pico2, machine v1.24.0 from local\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_signal.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_RTC.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(3,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(13,12): \"assert_type\" mismatch: expected \"str | None\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(15,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_UART.py\"(16,12): \"assert_type\" mismatch: expected \"int | None\" but received \"Unknown\"\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_deepsleep.py\"(3,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(3,7): Import \"utime\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(5,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(14,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(30,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(40,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(63,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(72,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(86,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_machine.py\"(97,5): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_memNNN.py\"(1,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_reset.py\"(3,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(1,7): Import \"machine\" could not be resolved\n", + "\u001b[31m\u001b[1mERROR \u001b[0m root:typecheck.py:171 \"tests/quality_tests/feat_machine/check_machine/check_uniqueid.py\"(8,12): \"assert_type\" mismatch: expected \"bytes\" but received \"Unknown\"\n", + "\u001b[36m\u001b[1m=========================== short test summary info ===========================\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rp2-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-micropython-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-stdlib-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-uasyncio-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-machine-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico-rp2-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico-micropython-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico-stdlib-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico-uasyncio-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico-machine-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-rp2-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-micropython-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-stdlib-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-uasyncio-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-machine-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-networking-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-bluetooth-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico_w-aioble-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico2-rp2-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico2-micropython-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico2-stdlib-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico2-uasyncio-pyright]\u001b[0m\n", + "\u001b[31mFAILED\u001b[0m repos\\micropython-stubs\\tests\\quality_tests\\test_snippets.py::\u001b[1mtest_typecheck[local-v1.24.0-rp2-rpi_pico2-machine-pyright]\u001b[0m\n", + "\u001b[31m================ \u001b[31m\u001b[1m23 failed\u001b[0m, \u001b[33m605 deselected\u001b[0m\u001b[31m in 64.78s (0:01:04)\u001b[0m\u001b[31m ================\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m2024-11-28 22:57:18.959\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m98\u001b[0m - \u001b[34m\u001b[1msetup install type_stubs to cache: local, v1.24.0, rp2\u001b[0m\n", + "\u001b[32m2024-11-28 22:57:18.970\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m114\u001b[0m - \u001b[34m\u001b[1mUsing cached type stubs for rp2 v1.24.0\u001b[0m\n", + "\u001b[32m2024-11-28 22:57:34.664\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m98\u001b[0m - \u001b[34m\u001b[1msetup install type_stubs to cache: local, v1.24.0, rp2-rpi_pico\u001b[0m\n", + "\u001b[32m2024-11-28 22:57:34.664\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m114\u001b[0m - \u001b[34m\u001b[1mUsing cached type stubs for rp2-rpi_pico v1.24.0\u001b[0m\n", + "\u001b[32m2024-11-28 22:57:49.847\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m98\u001b[0m - \u001b[34m\u001b[1msetup install type_stubs to cache: local, v1.24.0, rp2-rpi_pico_w\u001b[0m\n", + "\u001b[32m2024-11-28 22:57:49.849\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m114\u001b[0m - \u001b[34m\u001b[1mUsing cached type stubs for rp2-rpi_pico_w v1.24.0\u001b[0m\n", + "\u001b[32m2024-11-28 22:58:09.520\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m98\u001b[0m - \u001b[34m\u001b[1msetup install type_stubs to cache: local, v1.24.0, rp2-rpi_pico2\u001b[0m\n", + "\u001b[32m2024-11-28 22:58:09.522\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mconftest\u001b[0m:\u001b[36mtype_stub_cache_path\u001b[0m:\u001b[36m114\u001b[0m - \u001b[34m\u001b[1mUsing cached type stubs for rp2-rpi_pico2 v1.24.0\u001b[0m\n" + ] + } + ], + "source": [ + "# ! pytest repos/micropython-stubs/tests/quality_tests/test_snippets.py::test_typecheck -k \"local-v1.24.0-preview-rp2 and -pyright\"\n", + "port = \"rp2\"\n", + "# ! pytest repos/micropython-stubs/tests/quality_tests/test_snippets.py::test_typecheck -k \"local-v1.24.0-preview-{port}- and -pyright\"\n", + "! pytest repos/micropython-stubs/tests/quality_tests/test_snippets.py::test_typecheck -k \"local-v1.24.0-{port}- and -pyright\"" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From a64b75f0ebb1e9e29e6917c9678700069c4b6349 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 1 Jan 2025 17:31:36 +0100 Subject: [PATCH 38/57] stubber: createstubs - Fix Final. Signed-off-by: Jos Verlinde --- src/stubber/board/createstubs.py | 7 +- src/stubber/board/createstubs_db.py | 6 +- src/stubber/board/createstubs_db_min.py | 40 ++++---- src/stubber/board/createstubs_mem.py | 6 +- src/stubber/board/createstubs_mem_min.py | 122 ++++++++++++----------- src/stubber/board/createstubs_min.py | 42 ++++---- src/stubber/board/modulelist.txt | 1 + tests/createstubs/literal_test.py | 2 +- 8 files changed, 120 insertions(+), 106 deletions(-) diff --git a/src/stubber/board/createstubs.py b/src/stubber/board/createstubs.py index 0a388505..c2414683 100644 --- a/src/stubber/board/createstubs.py +++ b/src/stubber/board/createstubs.py @@ -355,8 +355,10 @@ def write_object_stub( if t in ("str", "int", "float", "bool", "bytearray", "bytes"): # known type: use actual value - # s = "{0}{1} = {2} # type: {3}\n".format(indent, item_name, item_repr, t) - s = "{0}{1}: {3} = {2}\n".format(indent, item_name, item_repr, t) + if item_name.upper() == item_name: # ALL_CAPS --> Final + s = "{0}{1}: Final[{3}] = {2}\n".format(indent, item_name, item_repr, t) + else: + s = "{0}{1}: {3} = {2}\n".format(indent, item_name, item_repr, t) elif t in ("dict", "list", "tuple"): # dict, list , tuple: use empty value ev = {"dict": "{}", "list": "[]", "tuple": "()"} @@ -820,6 +822,7 @@ def main(): "breakout_trackball", "breakout_vl53l5cx", "btree", + "builtins", "cc3200", "cmath", "collections", diff --git a/src/stubber/board/createstubs_db.py b/src/stubber/board/createstubs_db.py index aeb2439f..c7ab7fd7 100644 --- a/src/stubber/board/createstubs_db.py +++ b/src/stubber/board/createstubs_db.py @@ -358,8 +358,10 @@ def write_object_stub(self, fp, object_expr: object, obj_name: str, indent: str, if t in ("str", "int", "float", "bool", "bytearray", "bytes"): # known type: use actual value - # s = "{0}{1} = {2} # type: {3}\n".format(indent, item_name, item_repr, t) - s = "{0}{1}: {3} = {2}\n".format(indent, item_name, item_repr, t) + if item_name.upper() == item_name: # ALL_CAPS --> Final + s = "{0}{1}: Final[{3}] = {2}\n".format(indent, item_name, item_repr, t) + else: + s = "{0}{1}: {3} = {2}\n".format(indent, item_name, item_repr, t) elif t in ("dict", "list", "tuple"): # dict, list , tuple: use empty value ev = {"dict": "{}", "list": "[]", "tuple": "()"} diff --git a/src/stubber/board/createstubs_db_min.py b/src/stubber/board/createstubs_db_min.py index cc0db927..49353cb5 100644 --- a/src/stubber/board/createstubs_db_min.py +++ b/src/stubber/board/createstubs_db_min.py @@ -134,40 +134,42 @@ def create_module_stub(J,module_name,file_name=E): except(D,r):A.warning('could not del new_module') F.collect();return S def write_object_stub(L,fp,object_expr,obj_name,indent,in_class=0): - Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;D=indent;F.collect() + Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;E=indent;F.collect() if M in L.problematic:A.warning('SKIPPING problematic module:{}'.format(M));return a,P=L.get_obj_attributes(M) if P:A.error(P) - for(E,H,I,b,d)in a: - if E in['classmethod','staticmethod','BaseException',N]:continue - if E[0].isdigit():A.warning('NameError: invalid name {}'.format(E));continue - if I==""and Q(D)<=A4*4: - R=B;S=E.endswith(N)or E.endswith('Error')or E in['KeyboardInterrupt','StopIteration','SystemExit'] + for(C,H,I,b,d)in a: + if C in['classmethod','staticmethod','BaseException',N]:continue + if C[0].isdigit():A.warning('NameError: invalid name {}'.format(C));continue + if I==""and Q(E)<=A4*4: + R=B;S=C.endswith(N)or C.endswith('Error')or C in['KeyboardInterrupt','StopIteration','SystemExit'] if S:R=N - C='\n{}class {}({}):\n'.format(D,E,R) - if S:C+=D+' ...\n';J.write(C);continue - J.write(C);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,E),D+' ',O+1);C=D+' def __init__(self, *argv, **kwargs) -> None:\n';C+=D+' ...\n\n';J.write(C) + D='\n{}class {}({}):\n'.format(E,C,R) + if S:D+=E+' ...\n';J.write(D);continue + J.write(D);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,C),E+' ',O+1);D=E+' def __init__(self, *argv, **kwargs) -> None:\n';D+=E+' ...\n\n';J.write(D) elif any(A in I for A in[A0,z,'closure']): T=V;U=B if O>0:U='self, ' - if W in I or W in H:C='{}@classmethod\n'.format(D)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(D,E,T) - else:C='{}def {}({}*args, **kwargs) -> {}:\n'.format(D,E,U,T) - C+=D+' ...\n\n';J.write(C) + if W in I or W in H:D='{}@classmethod\n'.format(E)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(E,C,T) + else:D='{}def {}({}*args, **kwargs) -> {}:\n'.format(E,C,U,T) + D+=E+' ...\n\n';J.write(D) elif I=="":0 elif I.startswith(" Final + s = "{0}{1}: Final[{3}] = {2}\n".format(indent, item_name, item_repr, t) + else: + s = "{0}{1}: {3} = {2}\n".format(indent, item_name, item_repr, t) elif t in ("dict", "list", "tuple"): # dict, list , tuple: use empty value ev = {"dict": "{}", "list": "[]", "tuple": "()"} diff --git a/src/stubber/board/createstubs_mem_min.py b/src/stubber/board/createstubs_mem_min.py index 4c28c23e..f4991bb1 100644 --- a/src/stubber/board/createstubs_mem_min.py +++ b/src/stubber/board/createstubs_mem_min.py @@ -36,10 +36,10 @@ H=False G='/' F=OSError -E=None +D=None C='version' B='' -import gc as D,os,sys +import gc as E,os,sys from time import sleep try:from ujson import dumps except:from json import dumps @@ -68,59 +68,59 @@ def error(A,msg): A=J.getLogger(o) J.basicConfig(level=J.INFO) class Stubber: - def __init__(B,path=E,firmware_id=E): + def __init__(B,path=D,firmware_id=D): C=firmware_id try: if os.uname().release=='1.13.0'and os.uname().version<'v1.13-103':raise k('MicroPython 1.13.0 cannot be stubbed') except I:pass - B.info=_info();A.info('Port: {}'.format(B.info[L]));A.info('Board: {}'.format(B.info[U]));D.collect() + B.info=_info();A.info('Port: {}'.format(B.info[L]));A.info('Board: {}'.format(B.info[U]));E.collect() if C:B._fwid=C.lower() elif B.info[R]==b:B._fwid='{family}-v{version}-{port}-{board}'.format(**B.info).rstrip(V) else:B._fwid='{family}-v{version}-{port}'.format(**B.info) - B._start_free=D.mem_free() + B._start_free=E.mem_free() if path: if path.endswith(G):path=path[:-1] else:path=get_root() B.path='{}/stubs/{}'.format(path,B.flat_fwid).replace('//',G) try:X(path+G) except F:A.error('error creating stub folder {}'.format(path)) - B.problematic=['upip','upysh','webrepl_setup','http_client','http_client_ssl','http_server','http_server_ssl'];B.excluded=['webrepl','_webrepl','port_diag','example_sub_led.py','example_pub_button.py'];B.modules=[];B._json_name=E;B._json_first=H + B.problematic=['upip','upysh','webrepl_setup','http_client','http_client_ssl','http_server','http_server_ssl'];B.excluded=['webrepl','_webrepl','port_diag','example_sub_led.py','example_pub_button.py'];B.modules=[];B._json_name=D;B._json_first=H def get_obj_attributes(L,item_instance): H=item_instance;C=[];K=[] for A in M(H): if A.startswith('__')and not A in L.modules:continue try: - E=getattr(H,A) - try:F=Z(type(E)).split("'")[1] + D=getattr(H,A) + try:F=Z(type(D)).split("'")[1] except T:F=B if F in{p,q,r,s,c,d,e}:G=1 elif F in{t,u}:G=2 elif F in'class':G=3 else:G=4 - C.append((A,Z(E),Z(type(E)),E,G)) + C.append((A,Z(D),Z(type(D)),D,G)) except I as J:K.append("Couldn't get attribute '{}' from object '{}', Err: {}".format(A,H,J)) except MemoryError as J:O('MemoryError: {}'.format(J));sleep(1);reset() - C=l([A for A in C if not A[0].startswith('__')],key=lambda x:x[4]);D.collect();return C,K + C=l([A for A in C if not A[0].startswith('__')],key=lambda x:x[4]);E.collect();return C,K def add_modules(A,modules):A.modules=l(set(A.modules)|set(modules)) def create_all_stubs(B): - A.info('Start micropython-stubber {} on {}'.format(__version__,B._fwid));B.report_start();D.collect() + A.info('Start micropython-stubber {} on {}'.format(__version__,B._fwid));B.report_start();E.collect() for C in B.modules:B.create_one_stub(C) B.report_end();A.info('Finally done') def create_one_stub(C,module_name): B=module_name if B in C.problematic:A.warning('Skip module: {:<25} : Known problematic'.format(B));return H if B in C.excluded:A.warning('Skip module: {:<25} : Excluded'.format(B));return H - I='{}/{}.pyi'.format(C.path,B.replace(K,G));D.collect();E=H - try:E=C.create_module_stub(B,I) + I='{}/{}.pyi'.format(C.path,B.replace(K,G));E.collect();D=H + try:D=C.create_module_stub(B,I) except F:return H - D.collect();return E - def create_module_stub(J,module_name,file_name=E): + E.collect();return D + def create_module_stub(J,module_name,file_name=D): I=file_name;C=module_name - if I is E:L=C.replace(K,'_')+'.pyi';I=J.path+G+L + if I is D:L=C.replace(K,'_')+'.pyi';I=J.path+G+L else:L=I.split(G)[-1] if G in C:C=C.replace(G,K) - M=E - try:M=__import__(C,E,E,'*');Q=D.mem_free();A.info('Stub module: {:<25} to file: {:<70} mem:{:>5}'.format(C,L,Q)) + M=D + try:M=__import__(C,D,D,'*');Q=E.mem_free();A.info('Stub module: {:<25} to file: {:<70} mem:{:>5}'.format(C,L,Q)) except N:return H X(I) with P(I,'w')as O:R=str(J.info).replace('OrderedDict(',B).replace('})','}');T='"""\nModule: \'{0}\' on {1}\n"""\n# MCU: {2}\n# Stubber: {3}\n'.format(C,J._fwid,R,__version__);O.write(T);O.write('from __future__ import annotations\nfrom typing import Any, Generator\nfrom _typeshed import Incomplete\n\n');J.write_object_stub(O,M,C,B) @@ -128,63 +128,65 @@ def create_module_stub(J,module_name,file_name=E): if C not in{'os','sys','logging','gc'}: try:del M except(F,m):A.warning('could not del new_module') - D.collect();return S + E.collect();return S def write_object_stub(L,fp,object_expr,obj_name,indent,in_class=0): - Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;E=indent;D.collect() + Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;F=indent;E.collect() if M in L.problematic:A.warning('SKIPPING problematic module:{}'.format(M));return a,P=L.get_obj_attributes(M) if P:A.error(P) - for(F,H,I,b,g)in a: - if F in['classmethod','staticmethod','BaseException',N]:continue - if F[0].isdigit():A.warning('NameError: invalid name {}'.format(F));continue - if I==""and Q(E)<=z*4: - R=B;S=F.endswith(N)or F.endswith('Error')or F in['KeyboardInterrupt','StopIteration','SystemExit'] + for(C,H,I,b,g)in a: + if C in['classmethod','staticmethod','BaseException',N]:continue + if C[0].isdigit():A.warning('NameError: invalid name {}'.format(C));continue + if I==""and Q(F)<=z*4: + R=B;S=C.endswith(N)or C.endswith('Error')or C in['KeyboardInterrupt','StopIteration','SystemExit'] if S:R=N - C='\n{}class {}({}):\n'.format(E,F,R) - if S:C+=E+' ...\n';J.write(C);continue - J.write(C);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,F),E+' ',O+1);C=E+' def __init__(self, *argv, **kwargs) -> None:\n';C+=E+' ...\n\n';J.write(C) + D='\n{}class {}({}):\n'.format(F,C,R) + if S:D+=F+' ...\n';J.write(D);continue + J.write(D);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,C),F+' ',O+1);D=F+' def __init__(self, *argv, **kwargs) -> None:\n';D+=F+' ...\n\n';J.write(D) elif any(A in I for A in[u,t,'closure']): T=V;U=B if O>0:U='self, ' - if W in I or W in H:C='{}@classmethod\n'.format(E)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(E,F,T) - else:C='{}def {}({}*args, **kwargs) -> {}:\n'.format(E,F,U,T) - C+=E+' ...\n\n';J.write(C) + if W in I or W in H:D='{}@classmethod\n'.format(F)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(F,C,T) + else:D='{}def {}({}*args, **kwargs) -> {}:\n'.format(F,C,U,T) + D+=F+' ...\n\n';J.write(D) elif I=="":0 elif I.startswith("='1.10.0'and A[C]<='1.19.9':A[C]=A[C][:-2] if F in A and A[F]: - G=int(A[F]);K=[E,'x86','x64','armv6','armv6m','armv7m','armv7em','armv7emsp','armv7emdp','xtensa','xtensawin'][G>>10] + G=int(A[F]);K=[D,'x86','x64','armv6','armv6m','armv7m','armv7em','armv7emsp','armv7emdp','xtensa','xtensawin'][G>>10] if K:A[Q]=K A[F]='v{}.{}'.format(G&255,G>>8&3) - if A[D]and not A[C].endswith(W):A[C]=A[C]+W - A[O]=f"{A[C]}-{A[D]}"if A[D]else f"{A[C]}";return A + if A[E]and not A[C].endswith(W):A[C]=A[C]+W + A[O]=f"{A[C]}-{A[E]}"if A[E]else f"{A[C]}";return A def A1(version): A=version;B=K.join([str(A)for A in A[:3]]) if Q(A)>3 and A[3]:B+=V+A[3] @@ -289,22 +291,22 @@ def j(): def main(): stubber=Stubber(path=read_path());stubber.clean() def A(stubber): - D.collect();stubber.modules=[] + E.collect();stubber.modules=[] for C in A0: B=C+'/modulelist.txt' if not h(B):continue - with P(B)as E: + with P(B)as D: while S: - A=E.readline().strip() + A=D.readline().strip() if not A:break if Q(A)>0 and A[0]!='#':stubber.modules.append(A) - D.collect();O('BREAK');break + E.collect();O('BREAK');break if not stubber.modules:stubber.modules=[b] - D.collect() - stubber.modules=[];A(stubber);D.collect();stubber.create_all_stubs() + E.collect() + stubber.modules=[];A(stubber);E.collect();stubber.create_all_stubs() if __name__=='__main__'or j(): if not h('no_auto_stubber.txt'): O(f"createstubs.py: {__version__}") - try:D.threshold(4096);D.enable() + try:E.threshold(4096);E.enable() except BaseException:pass main() \ No newline at end of file diff --git a/src/stubber/board/createstubs_min.py b/src/stubber/board/createstubs_min.py index a51f4841..257b2250 100644 --- a/src/stubber/board/createstubs_min.py +++ b/src/stubber/board/createstubs_min.py @@ -135,40 +135,42 @@ def create_module_stub(J,module_name,file_name=D): except(E,n):A.warning('could not del new_module') F.collect();return V def write_object_stub(L,fp,object_expr,obj_name,indent,in_class=0): - Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;D=indent;F.collect() + Z=' at ...>';Y='generator';X='{0}{1}: {3} = {2}\n';W='bound_method';V='Incomplete';O=in_class;N='Exception';M=object_expr;K=' at ';J=fp;E=indent;F.collect() if M in L.problematic:A.warning('SKIPPING problematic module:{}'.format(M));return a,P=L.get_obj_attributes(M) if P:A.error(P) - for(E,H,I,b,g)in a: - if E in['classmethod','staticmethod','BaseException',N]:continue - if E[0].isdigit():A.warning('NameError: invalid name {}'.format(E));continue - if I==""and S(D)<=A3*4: - Q=B;R=E.endswith(N)or E.endswith('Error')or E in['KeyboardInterrupt','StopIteration','SystemExit'] + for(C,H,I,b,g)in a: + if C in['classmethod','staticmethod','BaseException',N]:continue + if C[0].isdigit():A.warning('NameError: invalid name {}'.format(C));continue + if I==""and S(E)<=A3*4: + Q=B;R=C.endswith(N)or C.endswith('Error')or C in['KeyboardInterrupt','StopIteration','SystemExit'] if R:Q=N - C='\n{}class {}({}):\n'.format(D,E,Q) - if R:C+=D+' ...\n';J.write(C);continue - J.write(C);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,E),D+' ',O+1);C=D+' def __init__(self, *argv, **kwargs) -> None:\n';C+=D+' ...\n\n';J.write(C) + D='\n{}class {}({}):\n'.format(E,C,Q) + if R:D+=E+' ...\n';J.write(D);continue + J.write(D);L.write_object_stub(J,b,'{0}.{1}'.format(obj_name,C),E+' ',O+1);D=E+' def __init__(self, *argv, **kwargs) -> None:\n';D+=E+' ...\n\n';J.write(D) elif any(A in I for A in[v,u,'closure']): T=V;U=B if O>0:U='self, ' - if W in I or W in H:C='{}@classmethod\n'.format(D)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(D,E,T) - else:C='{}def {}({}*args, **kwargs) -> {}:\n'.format(D,E,U,T) - C+=D+' ...\n\n';J.write(C) + if W in I or W in H:D='{}@classmethod\n'.format(E)+'{}def {}(cls, *args, **kwargs) -> {}:\n'.format(E,C,T) + else:D='{}def {}({}*args, **kwargs) -> {}:\n'.format(E,C,U,T) + D+=E+' ...\n\n';J.write(D) elif I=="":0 elif I.startswith(" None:", class_line + 1) assert class_line < LSB_line < init_line, "Literals MUST be listed before class methods" From 1debb45fe0b744bd0ce9d5d80ed6c379135ab9b9 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 18 Jul 2024 14:37:05 +0200 Subject: [PATCH 39/57] stubber: Handle errors while reading pyproject.toml Signed-off-by: Jos Verlinde --- src/stubber/publish/stubpackage.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/stubber/publish/stubpackage.py b/src/stubber/publish/stubpackage.py index d06d1064..1fdb8b19 100644 --- a/src/stubber/publish/stubpackage.py +++ b/src/stubber/publish/stubpackage.py @@ -255,8 +255,12 @@ def pyproject(self) -> Union[Dict[str, Any], None]: pyproject = None _toml = self.toml_path if (_toml).exists(): - with open(_toml, "rb") as f: - pyproject = tomllib.load(f) + log.info(f"Load pyproject from {_toml}") + try: + with open(_toml, "rb") as f: + pyproject = tomllib.load(f) + except tomllib.TOMLDecodeError as e: + log.error(f"Could not load pyproject.toml file {e}") return pyproject @pyproject.setter From 3a6ab391e4e7b62750983b9c2f2e9322e6c6e23c Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 1 Jan 2025 22:47:23 +0100 Subject: [PATCH 40/57] stubber: Fix preview version handling Signed-off-by: Jos Verlinde --- src/mpflash/mpflash/versions.py | 46 ++++++++++----------------------- src/stubber/utils/config.py | 6 ++--- tests/common/config_test.py | 14 ++++++++++ 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/mpflash/mpflash/versions.py b/src/mpflash/mpflash/versions.py index 24d49fdc..0f77df9f 100644 --- a/src/mpflash/mpflash/versions.py +++ b/src/mpflash/mpflash/versions.py @@ -82,35 +82,15 @@ def micropython_versions(minver: str = "v1.20", reverse: bool = False, cache_it= gh_client = GH_CLIENT repo = gh_client.get_repo("micropython/micropython") tags = [tag.name for tag in repo.get_tags() if parse(tag.name) >= parse(minver)] - # Only keep the last preview versions = [v for v in tags if not v.endswith(V_PREVIEW)] - preview = sorted([v for v in tags if v.endswith(V_PREVIEW)], reverse=True)[1] + # Only keep the last preview + preview = sorted([v for v in tags if v.endswith(V_PREVIEW)], reverse=True)[0] versions.append(preview) except Exception as e: - versions = [ - "v9.99.9-preview", - "v1.22.2", - "v1.22.1", - "v1.22.0", - "v1.21.1", - "v1.21.0", - "v1.20.0", - "v1.19.1", - "v1.19", - "v1.18", - "v1.17", - "v1.16", - "v1.15", - "v1.14", - "v1.13", - "v1.12", - "v1.11", - "v1.10", - ] - cache_it = False - versions = [v for v in versions if parse(v) >= parse(minver)] - # remove all but the most recent (preview) version - versions = versions[:1] + [v for v in versions if "preview" not in v] + log.error(e) + versions = [] + # returns - but does not cache + raise NoCacheCondition(function_value=versions) # remove any duplicates and sort versions = sorted(list(set(versions)), reverse=reverse, key=lambda s: (not is_version(s), s)) if cache_it: @@ -119,16 +99,18 @@ def micropython_versions(minver: str = "v1.20", reverse: bool = False, cache_it= raise NoCacheCondition(function_value=versions) -def get_stable_mp_version() -> str: +def get_stable_mp_version(cache_it=True) -> str: # read the versions from the git tags - all_versions = micropython_versions(minver=OLDEST_VERSION) - return [v for v in all_versions if not v.endswith(V_PREVIEW)][-1] + all_versions = micropython_versions(minver=OLDEST_VERSION, cache_it=cache_it) + versions = [v for v in all_versions if not v.endswith(V_PREVIEW)] + return versions[-1] if versions else "" -def get_preview_mp_version() -> str: +def get_preview_mp_version(cache_it=True) -> str: # read the versions from the git tags - all_versions = micropython_versions(minver=OLDEST_VERSION) - return [v for v in all_versions if v.endswith(V_PREVIEW)][-1] + all_versions = micropython_versions(minver=OLDEST_VERSION, cache_it=cache_it) + versions = [v for v in all_versions if v.endswith(V_PREVIEW)] + return versions[0] if versions else "" # Do not cache , same path will have different versions checked out diff --git a/src/stubber/utils/config.py b/src/stubber/utils/config.py index 1fc928ca..34dd99d8 100644 --- a/src/stubber/utils/config.py +++ b/src/stubber/utils/config.py @@ -3,9 +3,8 @@ from pathlib import Path from typing import List -import mpflash.basicgit as git from mpflash.logger import log -from mpflash.versions import V_PREVIEW, get_stable_mp_version, get_preview_mp_version +from mpflash.versions import get_preview_mp_version, get_stable_mp_version, micropython_versions from typedconfig.config import Config, key, section from typedconfig.source import EnvironmentConfigSource @@ -103,7 +102,8 @@ def post_read_hook(self) -> dict: all_versions = ["1.19", "1.19.1", "1.20.0", "1.21.0"] config_updates.update(all_versions=all_versions) config_updates.update( - stable_version=get_stable_mp_version(), preview_version=get_preview_mp_version(), + stable_version=get_stable_mp_version(), + preview_version=get_preview_mp_version(), ) # second last version - last version is the preview version return config_updates diff --git a/tests/common/config_test.py b/tests/common/config_test.py index 45e0d999..6896564d 100644 --- a/tests/common/config_test.py +++ b/tests/common/config_test.py @@ -2,11 +2,16 @@ from pathlib import Path import pytest +from cache_to_disk import delete_old_disk_caches from stubber.utils.config import StubberConfig, TomlConfigSource, readconfig pytestmark = [pytest.mark.stubber] +# avoid test pollution from previous incorrect results +delete_old_disk_caches() + + def test_toplevel_config(): # exists on top-level from stubber.utils.config import CONFIG @@ -105,3 +110,12 @@ def test_config_versions(): # are we using fake versions due to errors ? assert CONFIG.stable_version != "1.21.0", "We are using fake versions, due to errors" + + +def test_get_preview_mp_version(): + # exists on top-level + from stubber.utils.config import get_preview_mp_version + + version = get_preview_mp_version(cache_it=False) + assert version + assert isinstance(version, str) From 976c7f217e64186853f6b2fd1a33204cbda8a928 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 1 Jan 2025 22:48:06 +0100 Subject: [PATCH 41/57] stubber: Fix test for machine.UART return type Signed-off-by: Jos Verlinde --- tests/rst/test_returns.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/rst/test_returns.py b/tests/rst/test_returns.py index 29784e0a..c7ea2755 100644 --- a/tests/rst/test_returns.py +++ b/tests/rst/test_returns.py @@ -31,7 +31,8 @@ "HID_Tuple", 0.95, "pyb", - ), ( + ), + ( ".. data:: pyb.hid_mouse", """ A tuple of (subclass, protocol, max packet length, polling interval, report @@ -97,7 +98,7 @@ def test_returns(module, signature, docstring, expected_type): "expected_type, module, signature, docstring", [ ( - "Incomplete", + "_IRQ", "machine.UART", ".. method:: UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE)", "", From 459c360cb0f746c4bf73fecfa59d7d5951a29fb1 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Wed, 1 Jan 2025 22:49:57 +0100 Subject: [PATCH 42/57] stubber: Improve handling of `arduino-lib` for frozen files Signed-off-by: Jos Verlinde --- src/mpflash/mpflash/basicgit.py | 19 ++++++++++++++++++- src/stubber/freeze/get_frozen.py | 13 +------------ tests/freeze/get_mpy_test.py | 28 +++++++++++++++++++++++----- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/mpflash/mpflash/basicgit.py b/src/mpflash/mpflash/basicgit.py index d151a0a6..24029c20 100644 --- a/src/mpflash/mpflash/basicgit.py +++ b/src/mpflash/mpflash/basicgit.py @@ -179,7 +179,7 @@ def checkout_tag(tag: str, repo: Optional[Union[str, Path]] = None) -> bool: return True -def sync_submodules(repo: Optional[Union[Path, str]] = None) -> bool: +def sync_submodules(repo: Union[Path, str]) -> bool: """ make sure any submodules are in sync """ @@ -194,9 +194,26 @@ def sync_submodules(repo: Optional[Union[Path, str]] = None) -> bool: log.debug(result.stderr) else: return False + checkout_arduino_lib(Path(repo)) return True +def checkout_arduino_lib(mpy_path: Path): + """ + Checkout the arduino-lib submodule repo if it exists + + This is needed as some of the arduino boards freeze modules originationg from the arduino-lib + """ + # arduino_lib_path = mpy_path / "lib/arduino-lib" + if (mpy_path / "lib/arduino-lib").exists(): + cmd = ["git", "submodule", "update", "--init", "lib/arduino-lib"] + try: + result = subprocess.run(cmd, cwd=mpy_path, check=True) + log.info(f"checkout arduino-lib: {result.returncode}") + except subprocess.CalledProcessError as e: + log.warning("Could not check out arduino-lib, error: ", e) + + def checkout_commit(commit_hash: str, repo: Optional[Union[Path, str]] = None) -> bool: """ Checkout a specific commit diff --git a/src/stubber/freeze/get_frozen.py b/src/stubber/freeze/get_frozen.py index b488f50b..bb83207a 100644 --- a/src/stubber/freeze/get_frozen.py +++ b/src/stubber/freeze/get_frozen.py @@ -20,14 +20,13 @@ import os import shutil # start moving from os & glob to pathlib import subprocess - from pathlib import Path from typing import List, Optional from mpflash.logger import log +from mpflash.versions import SET_PREVIEW, V_PREVIEW from packaging.version import Version -from mpflash.versions import SET_PREVIEW, V_PREVIEW from stubber import utils from stubber.freeze.freeze_folder import freeze_folders # Micropython < v1.12 from stubber.freeze.freeze_manifest_2 import freeze_one_manifest_2 @@ -61,14 +60,6 @@ def add_comment_to_path(path: Path, comment: str) -> None: pass -def checkout_arduino_lib(mpy_path: Path): - """ - Checkout the arduino-lib repo if it is not already checked out - """ - # arduino_lib_path = mpy_path / "lib/arduino-lib" - cmd = ["git", "submodule", "update", "--init", "lib/arduino-lib"] - result = subprocess.run(cmd, cwd=mpy_path, check=True) - log.info(f"checkout arduino-lib: {result.returncode}") def freeze_any( @@ -90,8 +81,6 @@ def freeze_any( mpy_path = Path(mpy_path).absolute() if mpy_path else CONFIG.mpy_path.absolute() mpy_lib_path = Path(mpy_lib_path).absolute() if mpy_lib_path else CONFIG.mpy_path.absolute() - if version > "v1.23.0" or version in SET_PREVIEW: - checkout_arduino_lib(mpy_path) # if old version of micropython, use the old freeze method if version not in SET_PREVIEW and Version(version) <= Version("1.11"): frozen_stub_path = get_fsp(version, stub_folder) diff --git a/tests/freeze/get_mpy_test.py b/tests/freeze/get_mpy_test.py index cba64419..f0ddb9b1 100644 --- a/tests/freeze/get_mpy_test.py +++ b/tests/freeze/get_mpy_test.py @@ -20,8 +20,21 @@ from stubber.utils.repos import read_micropython_lib_commits, switch -@pytest.mark.parametrize("tag, manifest_count, frozen_count", [("v1.9.4", 4, 10)]) -def test_get_mpy(tmp_path, testrepo_micropython: Path, testrepo_micropython_lib: Path, tag: str, manifest_count, frozen_count): +@pytest.mark.parametrize( + "tag, manifest_count, frozen_count", + [ + ("v1.9.4", 4, 10), + ("v1.24.1", 68, 1426), + ], +) +def test_get_mpy( + tmp_path, + testrepo_micropython: Path, + testrepo_micropython_lib: Path, + tag: str, + manifest_count, + frozen_count, +): # set state of repos switch(tag=tag, mpy_path=testrepo_micropython, mpy_lib_path=testrepo_micropython_lib) @@ -32,11 +45,16 @@ def test_get_mpy(tmp_path, testrepo_micropython: Path, testrepo_micropython_lib: version = "v1" assert version, "could not find micropython version" - print("found micropython version : {}".format(version)) + print(f"found micropython version : {version}") # folder/{family}-{version}-frozen family = "micropython" - stub_path = "{}-{}-frozen".format(family, clean_version(version, flat=True)) - get_frozen.freeze_any((tmp_path / stub_path), version=version, mpy_path=testrepo_micropython, mpy_lib_path=testrepo_micropython_lib) + stub_path = f"{family}-{clean_version(version, flat=True)}-frozen" + get_frozen.freeze_any( + (tmp_path / stub_path), + version=version, + mpy_path=testrepo_micropython, + mpy_lib_path=testrepo_micropython_lib, + ) modules = list((tmp_path / stub_path).glob("**/modules.json")) stubs = list((tmp_path / stub_path).glob("**/*.py")) From 44529e2f5df55482eb90904b230fdd0b4eace035 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 2 Jan 2025 17:55:13 +0100 Subject: [PATCH 43/57] stubber: chore - suppress warning Signed-off-by: Jos Verlinde --- src/stubber/codemod/visitors/typevars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stubber/codemod/visitors/typevars.py b/src/stubber/codemod/visitors/typevars.py index b0374a6d..bc24d857 100644 --- a/src/stubber/codemod/visitors/typevars.py +++ b/src/stubber/codemod/visitors/typevars.py @@ -30,7 +30,7 @@ def visit_Assign(self, node: libcst.Assign) -> None: """ # is this a TypeVar assignment? # needs to be more robust - if isinstance(node.value, libcst.Call) and node.value.func.value == "TypeVar": + if isinstance(node.value, libcst.Call) and node.value.func.value == "TypeVar": # type: ignore self.all_typevars.append(node) def visit_AnnAssign(self, node: libcst.AnnAssign) -> None: From 303f00f0e39ec34c5248faef16120867d43caa4b Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 2 Jan 2025 17:55:27 +0100 Subject: [PATCH 44/57] chore: cleanup settings Signed-off-by: Jos Verlinde --- .vscode/settings.json | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 493dcdcc..5051f7b6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,5 @@ { - "python.analysis.autoSearchPaths": true, "python.analysis.diagnosticMode": "openFilesOnly", - // "python.analysis.logLevel": "Trace", ////////////////////////////////////////////////////////////// "python.testing.pytestEnabled": true, "python.testing.unittestEnabled": false, @@ -65,33 +63,6 @@ ], "debug.allowBreakpointsEverywhere": true, "debug.terminal.clearBeforeReusing": true, - "python.analysis.typeCheckingMode": "basic", - "python.analysis.diagnosticSeverityOverrides": { - "reportUnusedVariable": "warning", - "reportUnusedImport": "warning", - "reportUnusedFunction": "warning", - "reportUnnecessaryIsInstance": "warning", - "reportGeneralTypeIssues": "warning", - "reportUnknownLambdaType": "information", - "reportUntypedNamedTuple": "information", - "reportMissingTypeArgument": "information", - "reportUnknownParameterType": "information", - "reportMissingTypeStubs": "information", - "reportPrivateUsage": "information", - "reportUnknownMemberType": "none", - "reportUnknownArgumentType": "none", - "reportUnknownVariableType": "none", - "reportMissingParameterType": "none", - }, - "pymakr.ignore": [ - ".vscode", - ".gitignore", - ".git", - "env", - "venv", - ".py_cache", - "__pycache__" - ], "files.watcherExclude": { "**/repos/**": true }, @@ -108,9 +79,6 @@ "editor.formatOnSave": true }, "todo-tree.tree.scanMode": "open files", - "python.analysis.typeshedPaths": [ - "typings" - ], "austin.mode": "Wall time", "austin.binaryMode": true, "python.languageServer": "Pylance" From 6a46e29ccfd08f6081593831225f17bad0d129d2 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 2 Jan 2025 18:05:18 +0100 Subject: [PATCH 45/57] Update pytest_mpflash.yml (cherry picked from commit 0b469287e3d7e54e4fc2382cd3a6de3c783c8e42) --- .github/workflows/pytest_mpflash.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest_mpflash.yml b/.github/workflows/pytest_mpflash.yml index 990954ed..21022b0f 100644 --- a/.github/workflows/pytest_mpflash.yml +++ b/.github/workflows/pytest_mpflash.yml @@ -8,7 +8,7 @@ name: pytest mpflash on: workflow_dispatch: pull_request: - branches: [main] + # branches: [main] push: branches: [main, dev/*, mpflash/*, feat/*, fix/*] From 98980d0add076c1346204f7ef8cf190340e8fd50 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 2 Jan 2025 18:07:51 +0100 Subject: [PATCH 46/57] Update pytest.yml (cherry picked from commit ef29dc90d92e6fb37a35f728f425d33f1d76ba52) --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index e12ebc5b..3195336d 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -12,7 +12,7 @@ name: pytest stubber on: workflow_dispatch: pull_request: - branches: [main] + # branches: [main] push: branches: [main, stubber/*, feat/*, fix/*] From 13720259acb8ec53f7149be317bf09abcd6f60d8 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 2 Jan 2025 19:30:43 +0100 Subject: [PATCH 47/57] stubber: Fix TypeError: unsupported operand type(s) for |: 'type' and 'type' in CI Windows Signed-off-by: Jos Verlinde --- tests/codemods/codemodcollector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/codemods/codemodcollector.py b/tests/codemods/codemodcollector.py index 83043d83..3679cd6f 100644 --- a/tests/codemods/codemodcollector.py +++ b/tests/codemods/codemodcollector.py @@ -10,7 +10,7 @@ class TestCase(NamedTuple): before: str # The source code before the transformation. expected: str # The source code after the transformation. doc_stub: str # The stub to apply - stub_file: Path | str # The path to stub file to apply + stub_file: Path # The path to stub file to apply output: Path | None = None # where to save the output for testing the tests path: Path | None = None # where are the tests From 4521e4440e098c4bfd1b99079f590ad0fcf84769 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 2 Jan 2025 19:34:05 +0100 Subject: [PATCH 48/57] chore: remove unused workflows Signed-off-by: Jos Verlinde --- .github/release-drafter.yml | 24 ------------- .github/workflows/release-drafter.yml | 36 -------------------- .github/workflows/release.yml | 49 --------------------------- 3 files changed, 109 deletions(-) delete mode 100644 .github/release-drafter.yml delete mode 100644 .github/workflows/release-drafter.yml delete mode 100644 .github/workflows/release.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml deleted file mode 100644 index 37256d28..00000000 --- a/.github/release-drafter.yml +++ /dev/null @@ -1,24 +0,0 @@ -# template used by the release drafter workflow -name-template: 'v$NEXT_PATCH_VERSION' -tag-template: 'v$NEXT_PATCH_VERSION' -exclude-labels: - - 'exclude-from-changelog' -categories: - - title: '⚠️ Breaking changes' - label: 'breaking' - - title: '🚀 Features' - label: - - 'feature' - - 'enhancement' - - title: '📘 Documentation' - label: 'documentation' - - title: '🐛 Bug Fixes' - label: 'bug' - - title: '🧰 Maintenance' - label: 'chore' - -template: | - ## What's changed - $CHANGES - ## Contributors to this release - $CONTRIBUTORS \ No newline at end of file diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml deleted file mode 100644 index a2b311d2..00000000 --- a/.github/workflows/release-drafter.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Release Drafter - -on: - push: - # branches to consider in the event; optional, defaults to all - branches: - - master - # pull_request event is required only for autolabeler - pull_request: - # Only following types are handled by the action, but one can default to all as well - types: [opened, reopened, synchronize] - # pull_request_target event is required for autolabeler to support PRs from forks - # pull_request_target: - # types: [opened, reopened, synchronize] - -permissions: - contents: read - -jobs: - update_release_draft: - permissions: - # write permission is required to create a github release - contents: write - # write permission is required for autolabeler - # otherwise, read permission is required at least - pull-requests: write - runs-on: ubuntu-latest - steps: - # Drafts your next Release notes as Pull Requests are merged into "master" - - uses: release-drafter/release-drafter@v5 - # (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml - # with: - # config-name: my-config.yml - # disable-autolabeler: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 9a56d83b..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: Release - -on: - workflow_dispatch: - push: - tags: - - "v*.*" - - "v*.*.*" - -jobs: - release: - name: Release - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - #---------------------------------------------- - # poetry is not in the default image - #---------------------------------------------- - - name: Install Poetry - run: pipx install poetry==1.3.1 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Build project for distribution - run: poetry build - - # - name: Check Version - # id: check-version - # run: | - # [[ "$(stubber version --short)" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \ - # || echo ::set-output name=prerelease::true - - - name: Create Release - uses: ncipollo/release-action@v1 - with: - artifacts: "dist/*" - token: ${{ secrets.GITHUB_TOKEN }} - draft: false - prerelease: steps.check-version.outputs.prerelease == 'true' - - - name: Publish to PyPI - env: - POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }} - run: poetry publish From c8eba7cf2a58cb45c3cc2da1d4560a93493e8e81 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Sat, 4 Jan 2025 08:31:01 +0100 Subject: [PATCH 49/57] stybber : enrich : Fix TypeAlias/ TypeVar added multiple times Signed-off-by: Jos Verlinde --- src/stubber/codemod/merge_docstub.py | 2 +- src/stubber/codemod/visitors/typevars.py | 174 ++++++++++++------ .../typealias_add_existing/before.py | 14 ++ .../typealias_add_existing/doc_stub.py | 22 +++ .../typealias_add_existing/expected.py | 22 +++ .../typevar_add_existing/before.py | 13 ++ .../typevar_add_existing/doc_stub.py | 19 ++ .../typevar_add_existing/expected.py | 19 ++ tests/codemods/enrich_test.py | 5 +- tests/codemods/test_merge.py | 9 +- 10 files changed, 236 insertions(+), 63 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/typealias_add_existing/before.py create mode 100644 tests/codemods/codemod_test_cases/typealias_add_existing/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/typealias_add_existing/expected.py create mode 100644 tests/codemods/codemod_test_cases/typevar_add_existing/before.py create mode 100644 tests/codemods/codemod_test_cases/typevar_add_existing/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/typevar_add_existing/expected.py diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 638daa8a..c54a5372 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -118,7 +118,7 @@ def __init__( self.all_imports = import_collector.all_imports # Get typevars stub_tree.visit(typevar_collector) - self.typevars = typevar_collector.all_typevars + self.typevars = typevar_collector.all_typealias_or_vars # ------------------------------------------------------------------------ diff --git a/src/stubber/codemod/visitors/typevars.py b/src/stubber/codemod/visitors/typevars.py index bc24d857..ad41a340 100644 --- a/src/stubber/codemod/visitors/typevars.py +++ b/src/stubber/codemod/visitors/typevars.py @@ -1,11 +1,12 @@ """ -Gather all TypeVar assignments in a module. +Gather all TypeVar and TypeAlias assignments in a module. """ from typing import List, Tuple, Union import libcst -from libcst import SimpleStatementLine, matchers, parse_statement +import libcst.matchers as m +from libcst import SimpleStatementLine from libcst.codemod._context import CodemodContext from libcst.codemod._visitor import ContextAwareTransformer, ContextAwareVisitor from libcst.codemod.visitors._add_imports import _skip_first @@ -15,13 +16,13 @@ class GatherTypeVarsVisitor(ContextAwareVisitor): """ - A class for tracking visited TypeVars. + A class for tracking visited TypeVars and TypeAliases. """ def __init__(self, context: CodemodContext) -> None: super().__init__(context) # Track all of the TypeVar assignments found in this transform - self.all_typevars: List[Union[libcst.Assign, libcst.AnnAssign]] = [] + self.all_typealias_or_vars: List[Union[libcst.Assign, libcst.AnnAssign]] = [] def visit_Assign(self, node: libcst.Assign) -> None: """ @@ -30,38 +31,64 @@ def visit_Assign(self, node: libcst.Assign) -> None: """ # is this a TypeVar assignment? # needs to be more robust - if isinstance(node.value, libcst.Call) and node.value.func.value == "TypeVar": # type: ignore - self.all_typevars.append(node) + if isinstance(node.value, libcst.Call) and node.value.func.value == "TypeVar": # type: ignore + self.all_typealias_or_vars.append(node) def visit_AnnAssign(self, node: libcst.AnnAssign) -> None: """ " Find all TypeAlias assignments in the module. format: T: TypeAlias = str """ - if isinstance(node.annotation.annotation, libcst.Name) and node.annotation.annotation.value == "TypeAlias": - self.all_typevars.append(node) + if ( + isinstance(node.annotation.annotation, libcst.Name) + and node.annotation.annotation.value == "TypeAlias" + ): + self.all_typealias_or_vars.append(node) + + +def is_TypeAlias(statement) -> bool: + "Just the body of a simple statement" "" + return m.matches( + statement, + m.AnnAssign(annotation=m.Annotation(annotation=m.Name(value="TypeAlias"))), + ) + + +def is_TypeVar(statement): + "Just the body of a simple statement" "" + r = m.matches( + statement, + m.Assign(value=m.Call(func=m.Name(value="TypeVar"))), + ) + # m.SimpleStatementLine(body=[m.Assign(value=m.Call(func=m.Name(value="TypeVar")))]), + return r class AddTypeVarsVisitor(ContextAwareTransformer): - # loosly based on AddImportsVisitor + """ + Visitor loosly based on AddImportsVisitor + """ + CONTEXT_KEY = "AddTypeVarsVisitor" def __init__(self, context: CodemodContext) -> None: super().__init__(context) - self.typevars: List[libcst.Assign] = context.scratch.get(self.CONTEXT_KEY, []) + self.new_typealias_or_vars: List[Union[libcst.Assign, libcst.AnnAssign]] = ( + context.scratch.get(self.CONTEXT_KEY, []) + ) - self.all_typevars: List[libcst.Assign] = [] + self.all_typealias_or_vars: List[Union[libcst.Assign, libcst.AnnAssign]] = [] @classmethod def add_typevar(cls, context: CodemodContext, node: libcst.Assign): - typevars = context.scratch.get(cls.CONTEXT_KEY, []) - typevars.append(node) - context.scratch[cls.CONTEXT_KEY] = typevars + new_typealias_or_vars = context.scratch.get(cls.CONTEXT_KEY, []) + new_typealias_or_vars.append(node) + context.scratch[cls.CONTEXT_KEY] = new_typealias_or_vars # add the typevar to the module def visit_Module(self, node: libcst.Module) -> None: - self.all_typevars = [] - ... + # self.all_typealias_or_vars = [] + a = 1 def leave_Module( self, @@ -69,23 +96,49 @@ def leave_Module( updated_node: libcst.Module, ) -> libcst.Module: - if not self.typevars: + if not self.new_typealias_or_vars: return updated_node # split the module into 3 parts - # before the first import, the imports, and after the imports + # before and after the insertions point , and a list of the TV and TA statements ( - statements_before_imports, - statements_until_add_imports, - statements_after_imports, + statements_before, + statements_after, + tv_ta_statements, ) = self._split_module(original_node, updated_node) - typevar_statements = [SimpleStatementLine(body=[tv]) for tv in self.typevars] + # TODO: avoid duplication of TypeVars and TypeAliases + statements_to_add = [] + for new_tvta in self.new_typealias_or_vars: + existing = False + for existing_line in tv_ta_statements: + existing_tv = existing_line.body[0] # type: ignore + + # same type and same target? + if ( + is_TypeAlias(new_tvta) + and is_TypeAlias(existing_tv) + and new_tvta.target.value == existing_tv.target.value # type: ignore + ): + existing = True + break + + # same type and same targets? + if ( + is_TypeVar(new_tvta) + and is_TypeVar(existing_tv) + and new_tvta.targets[0].children[0].value == existing_tv.targets[0].children[0].value # type: ignore + ): + existing = True + break + + if not existing: + statements_to_add.append(SimpleStatementLine(body=[new_tvta])) + body = ( - *statements_before_imports, - *statements_until_add_imports, - *typevar_statements, - *statements_after_imports, + *statements_before, + *statements_to_add, + *statements_after, ) return updated_node.with_changes(body=body) @@ -99,33 +152,46 @@ def _split_module( List[Union[libcst.SimpleStatementLine, libcst.BaseCompoundStatement]], List[Union[libcst.SimpleStatementLine, libcst.BaseCompoundStatement]], ]: - # method copied from AddImportsVisitor - # can likely be simplified for typevars - statement_before_import_location = 0 - import_add_location = 0 - - # This works under the principle that while we might modify node contents, - # we have yet to modify the number of statements. So we can match on the - # original tree but break up the statements of the modified tree. If we - # change this assumption in this visitor, we will have to change this code. - - # Finds the location to add imports. It is the end of the first import block that occurs before any other statement (save for docstrings) - - # Never insert an import before initial __strict__ flag or docstring + """ + Split the module into 3 parts: + - before any TypeAlias or TypeVar statements + - the TypeAlias and TypeVar statements + - the rest of the module after the TypeAlias and TypeVar statements + """ + last_import = first_tv_ta = last_tv_ta = -1 + start = 0 if _skip_first(orig_module): - statement_before_import_location = import_add_location = 1 - - for i, statement in enumerate(orig_module.body[statement_before_import_location:]): - if matchers.matches( + start = 1 + + for i, statement in enumerate(orig_module.body[start:]): + # todo: optimize to avoid multiple parses + is_imp = m.matches( + statement, m.SimpleStatementLine(body=[m.ImportFrom() | m.Import()]) + ) + if is_imp: + last_import = i + start + is_ta = m.matches( statement, - matchers.SimpleStatementLine(body=[matchers.ImportFrom() | matchers.Import()]), - ): - import_add_location = i + statement_before_import_location + 1 - else: - break - - return ( - list(updated_module.body[:statement_before_import_location]), - list(updated_module.body[statement_before_import_location:import_add_location]), - list(updated_module.body[import_add_location:]), - ) + m.SimpleStatementLine( + body=[ + m.AnnAssign(annotation=m.Annotation(annotation=m.Name(value="TypeAlias"))) + ] + ), + ) + is_tv = m.matches( + statement, + m.SimpleStatementLine(body=[m.Assign(value=m.Call(func=m.Name(value="TypeVar")))]), + ) + if is_tv or is_ta: + if first_tv_ta == -1: + first_tv_ta = i + start + last_tv_ta = i + start + # insert as high as possible, but after the last import and last TypeVar/TypeAlias statement + insert_after = max(start, last_import + 1, last_tv_ta + 1) + assert insert_after != -1, "insert_after must be != -1" + # + first = list(updated_module.body[:insert_after]) + last = list(updated_module.body[insert_after:]) + ta_statements = list(updated_module.body[first_tv_ta : last_tv_ta + 1]) + + return (first, last, ta_statements) diff --git a/tests/codemods/codemod_test_cases/typealias_add_existing/before.py b/tests/codemods/codemod_test_cases/typealias_add_existing/before.py new file mode 100644 index 00000000..0a2ad0f1 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typealias_add_existing/before.py @@ -0,0 +1,14 @@ +# fmt: off +""" +add typealias that already is defined +""" +from typing_extensions import TypeAlias + +UUID: TypeAlias = str +_Flag: TypeAlias = int +_Descriptor: TypeAlias = tuple["UUID", _Flag] + +def const(): ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/typealias_add_existing/doc_stub.py b/tests/codemods/codemod_test_cases/typealias_add_existing/doc_stub.py new file mode 100644 index 00000000..7f49d293 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typealias_add_existing/doc_stub.py @@ -0,0 +1,22 @@ +# fmt: off +""" +add typealias that already is defined +""" + + +from typing_extensions import TypeAlias + +NEW_TA: TypeAlias = str +UUID: TypeAlias = str +_Flag: TypeAlias = int +_Descriptor: TypeAlias = tuple["UUID", _Flag] +_Characteristic: TypeAlias = (tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]]) +_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]] +x = 2 + +def bar(f:_Flag , d:_Descriptor ) -> _Service: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... diff --git a/tests/codemods/codemod_test_cases/typealias_add_existing/expected.py b/tests/codemods/codemod_test_cases/typealias_add_existing/expected.py new file mode 100644 index 00000000..4a226b01 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typealias_add_existing/expected.py @@ -0,0 +1,22 @@ +# fmt: off +""" +add typealias that already is defined +""" +from typing_extensions import TypeAlias + +UUID: TypeAlias = str +_Flag: TypeAlias = int +_Descriptor: TypeAlias = tuple["UUID", _Flag] +NEW_TA: TypeAlias = str +_Characteristic: TypeAlias = (tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]]) +_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]] + +def const(): ... + + +def bar(f:_Flag , d:_Descriptor ) -> _Service: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... diff --git a/tests/codemods/codemod_test_cases/typevar_add_existing/before.py b/tests/codemods/codemod_test_cases/typevar_add_existing/before.py new file mode 100644 index 00000000..8724f735 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typevar_add_existing/before.py @@ -0,0 +1,13 @@ +# fmt: off +""" +add typevar +""" +from typing import Tuple, TypeVar + +# Foo = TypeVar("Foo", Tuple) +Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) + +def const(): ... + + +def bar(): ... diff --git a/tests/codemods/codemod_test_cases/typevar_add_existing/doc_stub.py b/tests/codemods/codemod_test_cases/typevar_add_existing/doc_stub.py new file mode 100644 index 00000000..481596e0 --- /dev/null +++ b/tests/codemods/codemod_test_cases/typevar_add_existing/doc_stub.py @@ -0,0 +1,19 @@ +# fmt: off +""" +add typevar +""" + + +from typing import Tuple, TypeVar + +Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) +NEW = TypeVar("NEW", int) + +x = 2 + +def const(expr: Const_T, /) -> Const_T: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... diff --git a/tests/codemods/codemod_test_cases/typevar_add_existing/expected.py b/tests/codemods/codemod_test_cases/typevar_add_existing/expected.py new file mode 100644 index 00000000..6c583abc --- /dev/null +++ b/tests/codemods/codemod_test_cases/typevar_add_existing/expected.py @@ -0,0 +1,19 @@ +# fmt: off +""" +add typevar +""" +from typing import Tuple, TypeVar + +# Foo = TypeVar("Foo", Tuple) +Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) +NEW = TypeVar("NEW", int) + +def const(expr: Const_T, /) -> Const_T: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + """ + ... + + +def bar(): ... diff --git a/tests/codemods/enrich_test.py b/tests/codemods/enrich_test.py index 35202d8a..d9fad29f 100644 --- a/tests/codemods/enrich_test.py +++ b/tests/codemods/enrich_test.py @@ -3,7 +3,6 @@ import pytest from mock import MagicMock from pytest_mock import MockerFixture - from stubber.codemod.enrich import enrich_file, enrich_folder # mark all tests @@ -27,8 +26,8 @@ def test_enrich_file_with_stub(source_file: Path, expected: bool): except FileNotFoundError: assert not expected, "docstub File not found but expected" - if expected == False: - assert len(diffs) == 0, "no change to the stub was expected but found: \n{}".format(diffs) + if not expected: + assert len(diffs) == 0, f"no change to the stub was expected but found: \n{diffs}" else: assert diffs, "change to the stub was expected but not found" diff --git a/tests/codemods/test_merge.py b/tests/codemods/test_merge.py index bf7544e7..bddbb087 100644 --- a/tests/codemods/test_merge.py +++ b/tests/codemods/test_merge.py @@ -102,12 +102,11 @@ def assertCodemod( # pyre-ignore This mixin needs to be used with a UnitTest subclass. self.fail("Expected SkipFile but was not raised") - # pyre-ignore This mixin needs to be used with a UnitTest subclass # ignore spacing in # fmt: on/off - self.assertEqual( - CodemodTest.make_fixture_data(after.replace("#fmt: o", "# fmt: o")), - CodemodTest.make_fixture_data(output_tree.code.replace("#fmt: o", "# fmt: o")), - ) + after_txt = CodemodTest.make_fixture_data(after.replace("#fmt: o", "# fmt: o")) + before_txt = CodemodTest.make_fixture_data(output_tree.code.replace("#fmt: o", "# fmt: o")) + + self.assertEqual(before_txt, after_txt) if expected_warnings is not None: # pyre-ignore This mixin needs to be used with a UnitTest subclass. self.assertSequenceEqual(expected_warnings, context.warnings) From 7a41de684794ea8381d12d1ed74764f27f3bc367 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Thu, 9 Jan 2025 14:20:09 +0100 Subject: [PATCH 50/57] stubber: Fixes for docstub generation and reference -> docstub merges Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 22 ++++++++++---- src/stubber/codemod/merge_docstub.py | 2 +- src/stubber/codemod/visitors/typevars.py | 15 ++++++---- src/stubber/commands/enrich_folder_cmd.py | 27 +++++++++-------- src/stubber/publish/stubpackage.py | 2 +- src/stubber/rst/lookup.py | 36 ++++++++++++++++------- src/stubber/rst/reader.py | 16 ++++++---- src/stubber/stubs_from_docs.py | 6 +--- 8 files changed, 78 insertions(+), 48 deletions(-) diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 288ca141..08079dca 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -3,8 +3,10 @@ Both (.py or .pyi) files are supported. """ +from collections.abc import Generator +from functools import lru_cache from pathlib import Path -from typing import Any, Dict, Generator, List, Optional, Tuple +from typing import Any, Dict, List, Optional, Tuple # noqa: UP035 from libcst import ParserSyntaxError from libcst.codemod import CodemodContext, diff_code, exec_transform_with_prettyprint @@ -12,8 +14,8 @@ from mpflash.logger import log import stubber.codemod.merge_docstub as merge_docstub +from stubber.rst.lookup import U_MODULES from stubber.utils.post import run_black -from functools import lru_cache ########################################################################################## # # log = logging.getLogger(__name__) @@ -140,6 +142,10 @@ def enrich_file( old_code = current_code = target.read_text(encoding="utf-8") current = target if source.exists(): + if source.stem in U_MODULES: + # skip enriching from umodule.pyi files + log.debug(f"Skip enriching {target.name}, as it is an u-module") + continue log.info(f"Merge {target} from {source}") # read source file codemod_instance = merge_docstub.MergeCommand( @@ -227,11 +233,15 @@ def enrich_folder( list(target_path.rglob("**/*.py")) + list(target_path.rglob("**/*.pyi")) ) package_name = package_name or package_from_path(target_path, source_path) - for source_file in target_files: + for target in target_files: + if target.stem.startswith("u") and target.stem[1:] in U_MODULES: + # skip enriching umodule.pyi files + log.debug(f"Skip enriching {target.name}, as it is an u-module") + continue try: diffs = list( enrich_file( - source_file, + target, source_path, diff=True, write_back=write_back, @@ -247,9 +257,9 @@ def enrich_folder( except FileNotFoundError as e: # no docstub to enrich with if require_docstub: - raise (FileNotFoundError(f"No doc-stub file found for {source_file}")) from e + raise (FileNotFoundError(f"No doc-stub file found for {target}")) from e except (Exception, ParserSyntaxError) as e: - log.error(f"Error parsing {source_file}") + log.error(f"Error parsing {target}") log.exception(e) continue # run black on the destination folder diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index c54a5372..7238723c 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -331,7 +331,7 @@ def leave_FunctionDef( # If there are overloads in the documentation , lets use the first one if add_overload: - log.info(f"Change {updated_node.name.value} to @overload") + log.info(f"Change to @overload :{updated_node.name.value}") # Use the new overload - but with the existing docstring doc_stub = self.annotations[stack_id].overloads.pop(0) assert doc_stub.def_node diff --git a/src/stubber/codemod/visitors/typevars.py b/src/stubber/codemod/visitors/typevars.py index ad41a340..07a034d1 100644 --- a/src/stubber/codemod/visitors/typevars.py +++ b/src/stubber/codemod/visitors/typevars.py @@ -10,8 +10,10 @@ from libcst.codemod._context import CodemodContext from libcst.codemod._visitor import ContextAwareTransformer, ContextAwareVisitor from libcst.codemod.visitors._add_imports import _skip_first +from mpflash.logger import log -_empty_module = libcst.parse_module("") # Debugging aid : empty_module.code_for_node(node) +_mod = libcst.parse_module("") # Debugging aid : _mod.code_for_node(node) +_code = _mod.code_for_node # Debugging aid : _code(node) class GatherTypeVarsVisitor(ContextAwareVisitor): @@ -86,10 +88,6 @@ def add_typevar(cls, context: CodemodContext, node: libcst.Assign): context.scratch[cls.CONTEXT_KEY] = new_typealias_or_vars # add the typevar to the module - def visit_Module(self, node: libcst.Module) -> None: - # self.all_typealias_or_vars = [] - a = 1 - def leave_Module( self, original_node: libcst.Module, @@ -112,7 +110,12 @@ def leave_Module( for new_tvta in self.new_typealias_or_vars: existing = False for existing_line in tv_ta_statements: - existing_tv = existing_line.body[0] # type: ignore + try: + existing_tv = existing_line.body[0] # type: ignore + except (TypeError, IndexError): + # catch 'SimpleStatementLine' object is not subscriptable when the statement is not a simple statement + log.error("TypeVar or TypeAlias statement is not a simple statement") + continue # same type and same target? if ( diff --git a/src/stubber/commands/enrich_folder_cmd.py b/src/stubber/commands/enrich_folder_cmd.py index 979b2966..857dda94 100644 --- a/src/stubber/commands/enrich_folder_cmd.py +++ b/src/stubber/commands/enrich_folder_cmd.py @@ -16,23 +16,24 @@ @stubber_cli.command(name="enrich") @click.option( - "--stubs", "--dest", - "-s", - "stubs_folder", + "--destination", + "-d", + "--stubs", + "dest_folder", default=CONFIG.stub_path.as_posix(), type=click.Path(exists=True, file_okay=True, dir_okay=True), - help="File or folder containing the MCU stubs to be updated (destination)", + help="The destination file or folder containing the stubs stubs to be updated", show_default=True, ) @click.option( - "--docstubs", "--source", - "-ds", - "docstubs_folder", + "-s", + "--docstubs", + "source_folder", default=CONFIG.stub_path.as_posix(), type=click.Path(exists=True, file_okay=True, dir_okay=True), - help="File or folder containing the docstubs to be read from (source)", + help="The source file or folder containing the docstubs to be read", show_default=True, ) @click.option("--diff", default=False, help="Show diff", show_default=True, is_flag=True) @@ -60,8 +61,8 @@ show_default=True, ) def cli_enrich_folder( - stubs_folder: Union[str, Path], - docstubs_folder: Union[str, Path], + dest_folder: Union[str, Path], + source_folder: Union[str, Path], diff: bool = False, dry_run: bool = False, params_only: bool = True, @@ -71,10 +72,10 @@ def cli_enrich_folder( Enrich the stubs in stub_folder with the docstubs in docstubs_folder. """ write_back = not dry_run - log.info(f"Enriching {stubs_folder} with {docstubs_folder}") + log.info(f"Enriching {dest_folder} with {source_folder}") _ = enrich_folder( - Path(stubs_folder), - Path(docstubs_folder), + Path(dest_folder), + Path(source_folder), show_diff=diff, write_back=write_back, require_docstub=False, diff --git a/src/stubber/publish/stubpackage.py b/src/stubber/publish/stubpackage.py index 1fdb8b19..853810cd 100644 --- a/src/stubber/publish/stubpackage.py +++ b/src/stubber/publish/stubpackage.py @@ -347,7 +347,7 @@ def copy_stubs(self) -> None: def update_umodules(self): """ Replace the STDLIB umodules with a simple import statement - in order to allow the typecheckers to resove the stdlib modules in the usual stdlib location. + in order to allow the typecheckers to resovle the stdlib modules in the usual stdlib location. """ for f in self.package_path.rglob("*.pyi"): if f.stem in STDLIB_UMODULES: diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index e4339d50..fc0314df 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -189,8 +189,17 @@ class Fix: "_rp2.PIO.irq": ("_IRQ", 0.95), "_rp2.PIO.remove_program": ("None", 0.95), "_rp2.PIO.add_program": ("None", 0.95), - "rp2.PIO.irq": ("_IRQ", 0.95), + "rp2.bootsel_button": ("int", 0.95), + "rp2.DMA.active": ("bool", 0.95), + "rp2.DMA.pack_ctrl": ("int", 0.95), + "rp2.DMA.unpack_ctrl": ("dict", 0.95), + "rp2.DMA.close": ("None", 0.95), + "rp2.DMA.config": ("None", 0.95), "rp2.DMA.irq": ("_IRQ", 0.95), + "rp2.PIO.state_machine": ("StateMachine", 0.95), + "rp2.PIO.irq": ("_IRQ", 0.95), + "rp2.PIO.remove_program": ("None", 0.95), + "rp2.PIO.add_program": ("None", 0.95), } @@ -275,7 +284,10 @@ class Fix: "from _espnow import ESPNowBase # type: ignore", ], # ESPNowBase is an undocumented base class "framebuf": ANY_BUF, - "hashlib": ANY_BUF, + "hashlib": ANY_BUF + + [ + "from _mpy_shed import _Hash", + ], "heapq": [ '_T = TypeVar("_T")', ], @@ -314,6 +326,7 @@ class Fix: ], "network": ["from typing import Protocol"], # for AbstractNIC "neopixel": [ + "from _mpy_shed import _NeoPixelBase", # "from typing_extensions import TypeAlias", # "_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int]", ], # for AbstractNIC @@ -324,10 +337,9 @@ class Fix: "pyb": ANY_BUF + [ "from .UART import UART", - "from _mpy_shed import _OldAbstractBlockDev, _OldAbstractReadOnlyBlockDev", + "from _mpy_shed import _OldAbstractBlockDev, _OldAbstractReadOnlyBlockDev, HID_Tuple", # "_OldAbstractBlockDev: TypeAlias = Any", # "_OldAbstractReadOnlyBlockDev: TypeAlias = Any", - "HID_Tuple:TypeAlias = tuple[int, int, int, int, bytes]", ], "pyb.ADC": ANY_BUF + ["from .Pin import Pin", "from .Timer import Timer"], "pyb.CAN": ANY_BUF, @@ -348,12 +360,13 @@ class Fix: "from .Pin import Pin", ], # uses Pin "rp2": [ - # import classess from _rp2 - "from _rp2.DMA import DMA as DMA", - "from _rp2.Flash import Flash as Flash", - "from _rp2.StateMachine import StateMachine as StateMachine", - "from _rp2.PIO import PIO as PIO", - "from _rp2.PIOASMEmit import PIOASMEmit", + # Simplified import classess from rp2 (rather than from _rp2) + # "from rp2.DMA import DMA", + # "from rp2.DMA import DMA", + # "from rp2.Flash import Flash", + # "from rp2.StateMachine import StateMachine", + # "from rp2.PIO import PIO", + # "from rp2.PIOASMEmit import PIOASMEmit", ], # "_rp2.DMA": ["from _mpy_shed import _IRQ"], "_rp2.PIO": ["from _mpy_shed import _IRQ"], @@ -681,7 +694,8 @@ class Fix: "array": "List", # network "AbstractNIC": "Protocol", - "NeoPixel": "Sequence", + # neopixel + "NeoPixel": "_NeoPixelBase", } diff --git a/src/stubber/rst/reader.py b/src/stubber/rst/reader.py index d2f8af2d..19511643 100644 --- a/src/stubber/rst/reader.py +++ b/src/stubber/rst/reader.py @@ -69,6 +69,7 @@ from mpflash.logger import log from mpflash.versions import V_PREVIEW + from stubber.rst import ( CHILD_PARENT_CLASS, MODULE_GLUE, @@ -488,8 +489,12 @@ def parse_toc(self): if USE_SUBMODULES: # add sub modules imports for file in toctree: - rel_name = file.replace(f"{self.modulename}.", ".").replace(".rst", "") - self.output_dict.add_import(f"from {rel_name} import *") + submod_name = file.replace(".rst", "") + rel_name = submod_name.replace(f"{self.modulename}.", ".") + assumed_class = rel_name.lstrip(".") # .capitalize() + + # absolute class import with class name based on the module name + self.output_dict.add_import(f"from {submod_name} import {assumed_class}") else: # Now parse all files mentioned in the toc @@ -519,9 +524,10 @@ def parse_module(self): if "nightly" in self.source_tag: version = V_PREVIEW else: - version = self.source_tag.replace( - "_", "." - ) # TODO Use clean_version(self.source_tag) + version = self.source_tag.replace("_", ".") + # documentation is not available for patch versions, so use only the major.minor.0 + version = ".".join(version.split(".")[:2]) + ".0" + # TODO Use clean_version(self.source_tag) docstr[0] = ( f"{docstr[0]}.\n\nMicroPython module: https://docs.micropython.org/en/{version}/library/{module_name}.html" ) diff --git a/src/stubber/stubs_from_docs.py b/src/stubber/stubs_from_docs.py index 273cc183..c16251bb 100644 --- a/src/stubber/stubs_from_docs.py +++ b/src/stubber/stubs_from_docs.py @@ -93,10 +93,6 @@ def make_docstubs( target = dst_path / file.stem / f"__init__{suffix}" # fname = (dst_path / file.name).with_suffix(suffix) reader.write_file(target) - # if file.stem in U_MODULES: - # # create umod.py file and mod.py file - # fname = (dst_path / ("u" + file.name)).with_suffix(suffix) - # reader.write_file(fname) del reader for name in U_MODULES: # create a file "umodule.pyi" for each module @@ -107,6 +103,6 @@ def make_docstubs( target = dst_path / f"u{name}.pyi" with open(target, "w") as f: f.write(f"# {name} module\n") - f.write(f"# Allow the use of micro-module notation \n\n") + f.write("# Allow the use of micro-module notation \n\n") f.write(f"from {name} import * # type: ignore\n") f.flush() From f1397249a0428be306aa6ae894524abddd12a42c Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 13 Jan 2025 23:56:16 +0100 Subject: [PATCH 51/57] Stubber: and enhance folder enrichment logic, add testdata v1.24.1 docstubs Signed-off-by: Jos Verlinde --- src/mpflash/mpflash/vendor/board_database.py | 10 +- src/stubber/codemod/enrich.py | 262 +++-- src/stubber/codemod/merge_docstub.py | 6 +- src/stubber/commands/enrich_folder_cmd.py | 2 +- src/stubber/commands/get_frozen_cmd.py | 2 +- src/stubber/publish/merge_docstubs.py | 2 +- tests/codemods/enrich_test.py | 54 +- .../_mpy_shed/IRQs.pyi | 31 + .../_mpy_shed/NeoPixelBase.pyi | 26 + .../_mpy_shed/__init__.pyi | 107 ++ .../_mpy_shed/_collections_abc.pyi | 98 ++ .../_mpy_shed/blockdevice.pyi | 211 ++++ .../_mpy_shed/collections/__init__.pyi | 525 +++++++++ .../_mpy_shed/collections/abc.pyi | 3 + .../_mpy_shed/io_modes.pyi | 83 ++ .../_mpy_shed/io_mp.pyi | 182 +++ .../_mpy_shed/pathlike.pyi | 17 + .../_mpy_shed/subscriptable.pyi | 17 + .../_thread/__init__.pyi | 16 + .../array/__init__.pyi | 166 +++ .../asyncio/__init__.pyi | 45 + .../asyncio/core.pyi | 169 +++ .../asyncio/event.pyi | 102 ++ .../asyncio/funcs.pyi | 57 + .../asyncio/lock.pyi | 60 + .../asyncio/stream.pyi | 170 +++ .../asyncio/task.pyi | 17 + .../binascii/__init__.pyi | 47 + .../bluetooth/__init__.pyi | 982 ++++++++++++++++ .../btree/__init__.pyi | 253 +++++ .../cmath/__init__.pyi | 82 ++ .../collections/__init__.pyi | 207 ++++ .../cryptolib/__init__.pyi | 162 +++ .../deflate/__init__.pyi | 81 ++ .../errno/__init__.pyi | 53 + .../esp/__init__.pyi | 243 ++++ .../esp32/__init__.pyi | 508 +++++++++ .../espnow/__init__.pyi | 577 ++++++++++ .../framebuf/__init__.pyi | 237 ++++ .../gc/__init__.pyi | 107 ++ .../gzip/__init__.pyi | 78 ++ .../hashlib/__init__.pyi | 133 +++ .../heapq/__init__.pyi | 44 + .../io/__init__.pyi | 230 ++++ .../json/__init__.pyi | 77 ++ .../lcd160cr/__init__.pyi | 559 +++++++++ .../machine/ADC.pyi | 84 ++ .../machine/ADCBlock.pyi | 60 + .../machine/ADCWiPy.pyi | 82 ++ .../machine/I2C.pyi | 261 +++++ .../machine/I2S.pyi | 222 ++++ .../machine/PWM.pyi | 191 ++++ .../machine/Pin.pyi | 435 +++++++ .../machine/RTC.pyi | 276 +++++ .../machine/SD.pyi | 76 ++ .../machine/SDCard.pyi | 159 +++ .../machine/SPI.pyi | 285 +++++ .../machine/Signal.pyi | 197 ++++ .../machine/Timer.pyi | 183 +++ .../machine/TimerWiPy.pyi | 159 +++ .../machine/UART.pyi | 503 +++++++++ .../machine/USBDevice.pyi | 249 ++++ .../machine/WDT.pyi | 53 + .../machine/__init__.pyi | 371 ++++++ .../math/__init__.pyi | 260 +++++ .../micropython/__init__.pyi | 322 ++++++ .../micropython-v1_24_1-docstubs/modules.json | 436 +++++++ .../neopixel/__init__.pyi | 87 ++ .../network/LAN.pyi | 90 ++ .../network/PPP.pyi | 95 ++ .../network/WIZNET5K.pyi | 63 ++ .../network/WLAN.pyi | 252 +++++ .../network/WLANWiPy.pyi | 255 +++++ .../network/__init__.pyi | 304 +++++ .../openamp/__init__.pyi | 138 +++ .../os/__init__.pyi | 203 ++++ .../platform/__init__.pyi | 47 + .../micropython-v1_24_1-docstubs/pyb/ADC.pyi | 151 +++ .../pyb/Accel.pyi | 76 ++ .../micropython-v1_24_1-docstubs/pyb/CAN.pyi | 576 ++++++++++ .../micropython-v1_24_1-docstubs/pyb/DAC.pyi | 165 +++ .../pyb/ExtInt.pyi | 136 +++ .../pyb/Flash.pyi | 79 ++ .../micropython-v1_24_1-docstubs/pyb/I2C.pyi | 294 +++++ .../micropython-v1_24_1-docstubs/pyb/LCD.pyi | 130 +++ .../micropython-v1_24_1-docstubs/pyb/LED.pyi | 84 ++ .../micropython-v1_24_1-docstubs/pyb/Pin.pyi | 331 ++++++ .../micropython-v1_24_1-docstubs/pyb/RTC.pyi | 120 ++ .../micropython-v1_24_1-docstubs/pyb/SPI.pyi | 266 +++++ .../pyb/Servo.pyi | 193 ++++ .../pyb/Switch.pyi | 70 ++ .../pyb/Timer.pyi | 1005 +++++++++++++++++ .../micropython-v1_24_1-docstubs/pyb/UART.pyi | 309 +++++ .../pyb/USB_HID.pyi | 76 ++ .../pyb/USB_VCP.pyi | 206 ++++ .../pyb/__init__.pyi | 810 +++++++++++++ .../random/__init__.pyi | 113 ++ .../micropython-v1_24_1-docstubs/rp2/DMA.pyi | 158 +++ .../rp2/Flash.pyi | 35 + .../micropython-v1_24_1-docstubs/rp2/PIO.pyi | 132 +++ .../rp2/PIOASMEmit.pyi | 91 ++ .../rp2/StateMachine.pyi | 190 ++++ .../rp2/__init__.pyi | 111 ++ .../select/__init__.pyi | 116 ++ .../socket/__init__.pyi | 456 ++++++++ .../ssl/__init__.pyi | 149 +++ .../stm/__init__.pyi | 113 ++ .../struct/__init__.pyi | 104 ++ .../sys/__init__.pyi | 176 +++ .../time/__init__.pyi | 305 +++++ .../micropython-v1_24_1-docstubs/uarray.pyi | 4 + .../ubinascii.pyi | 4 + .../uctypes/__init__.pyi | 159 +++ .../micropython-v1_24_1-docstubs/uio.pyi | 4 + .../micropython-v1_24_1-docstubs/ujson.pyi | 4 + .../micropython-v1_24_1-docstubs/uos.pyi | 4 + .../micropython-v1_24_1-docstubs/uselect.pyi | 4 + .../micropython-v1_24_1-docstubs/usocket.pyi | 4 + .../micropython-v1_24_1-docstubs/ussl.pyi | 4 + .../micropython-v1_24_1-docstubs/ustruct.pyi | 4 + .../micropython-v1_24_1-docstubs/utime.pyi | 4 + .../micropython-v1_24_1-docstubs/uzlib.pyi | 4 + .../vfs/__init__.pyi | 209 ++++ .../wipy/__init__.pyi | 28 + .../wm8960/__init__.pyi | 211 ++++ .../zephyr/DiskAccess.pyi | 25 + .../zephyr/FlashArea.pyi | 30 + .../zephyr/__init__.pyi | 56 + .../zephyr/zsensor.pyi | 89 ++ .../zlib/__init__.pyi | 89 ++ .../_asyncio.pyi | 18 + .../_boot_fat.pyi | 8 + .../_onewire.pyi | 15 + .../micropython-v1_24_1-rp2-RPI_PICO/_rp2.pyi | 57 + .../_thread.pyi | 20 + .../array.pyi | 13 + .../asyncio/__init__.pyi | 127 +++ .../asyncio/core.pyi | 71 ++ .../asyncio/event.pyi | 25 + .../asyncio/funcs.pyi | 20 + .../asyncio/lock.pyi | 16 + .../asyncio/stream.pyi | 68 ++ .../binascii.pyi | 14 + .../cmath.pyi | 21 + .../collections.pyi | 8 + .../cryptolib.pyi | 13 + .../deflate.pyi | 20 + .../micropython-v1_24_1-rp2-RPI_PICO/dht.pyi | 26 + .../ds18x20.pyi | 18 + .../errno.pyi | 32 + .../framebuf.pyi | 34 + .../micropython-v1_24_1-rp2-RPI_PICO/gc.pyi | 16 + .../hashlib.pyi | 18 + .../heapq.pyi | 12 + .../micropython-v1_24_1-rp2-RPI_PICO/io.pyi | 37 + .../micropython-v1_24_1-rp2-RPI_PICO/json.pyi | 13 + .../machine.pyi | 282 +++++ .../micropython-v1_24_1-rp2-RPI_PICO/math.pyi | 55 + .../micropython.pyi | 28 + .../modules.json | 69 ++ .../neopixel.pyi | 16 + .../onewire.pyi | 27 + .../micropython-v1_24_1-rp2-RPI_PICO/os.pyi | 61 + .../platform.pyi | 12 + .../random.pyi | 16 + .../micropython-v1_24_1-rp2-RPI_PICO/rp2.pyi | 84 ++ .../select.pyi | 16 + .../struct.pyi | 14 + .../micropython-v1_24_1-rp2-RPI_PICO/sys.pyi | 27 + .../micropython-v1_24_1-rp2-RPI_PICO/time.pyi | 22 + .../uarray.pyi | 13 + .../uasyncio/__init__.pyi | 127 +++ .../uasyncio/core.pyi | 71 ++ .../uasyncio/event.pyi | 25 + .../uasyncio/funcs.pyi | 20 + .../uasyncio/lock.pyi | 16 + .../uasyncio/stream.pyi | 68 ++ .../ubinascii.pyi | 14 + .../ucollections.pyi | 33 + .../ucryptolib.pyi | 13 + .../uctypes.pyi | 49 + .../uerrno.pyi | 32 + .../uhashlib.pyi | 18 + .../uheapq.pyi | 12 + .../micropython-v1_24_1-rp2-RPI_PICO/uio.pyi | 37 + .../ujson.pyi | 13 + .../umachine.pyi | 282 +++++ .../micropython-v1_24_1-rp2-RPI_PICO/uos.pyi | 61 + .../uplatform.pyi | 12 + .../urandom.pyi | 16 + .../micropython-v1_24_1-rp2-RPI_PICO/ure.pyi | 13 + .../uselect.pyi | 16 + .../ustruct.pyi | 14 + .../micropython-v1_24_1-rp2-RPI_PICO/usys.pyi | 27 + .../utime.pyi | 22 + .../micropython-v1_24_1-rp2-RPI_PICO/vfs.pyi | 43 + tests/merge/test_enrich.py | 130 +++ 197 files changed, 24268 insertions(+), 162 deletions(-) create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/IRQs.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/NeoPixelBase.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/_collections_abc.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/blockdevice.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/abc.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_modes.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_mp.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/pathlike.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/subscriptable.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/_thread/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/array/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/core.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/event.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/funcs.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/lock.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/stream.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/task.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/binascii/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/bluetooth/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/btree/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/cmath/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/collections/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/cryptolib/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/deflate/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/errno/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/esp/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/esp32/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/espnow/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/framebuf/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/gc/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/gzip/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/hashlib/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/heapq/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/io/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/json/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/lcd160cr/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADC.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCBlock.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCWiPy.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2C.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2S.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/PWM.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Pin.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/RTC.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SD.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SDCard.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SPI.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Signal.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Timer.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/TimerWiPy.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/UART.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/USBDevice.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/WDT.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/math/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/micropython/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/modules.json create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/neopixel/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/network/LAN.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/network/PPP.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WIZNET5K.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLAN.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLANWiPy.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/network/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/openamp/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/os/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/platform/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ADC.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Accel.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/CAN.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/DAC.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ExtInt.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Flash.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/I2C.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LCD.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LED.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Pin.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/RTC.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/SPI.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Servo.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Switch.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Timer.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/UART.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_HID.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_VCP.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/random/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/DMA.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/Flash.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIO.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIOASMEmit.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/StateMachine.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/select/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/socket/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/ssl/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/stm/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/struct/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/sys/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/time/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/uarray.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/ubinascii.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/uctypes/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/uio.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/ujson.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/uos.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/uselect.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/usocket.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/ussl.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/ustruct.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/utime.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/uzlib.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/vfs/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/wipy/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/wm8960/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/DiskAccess.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/FlashArea.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/zsensor.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-docstubs/zlib/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_asyncio.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_boot_fat.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_onewire.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_rp2.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_thread.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/array.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/core.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/event.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/funcs.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/lock.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/stream.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/binascii.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cmath.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/collections.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cryptolib.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/deflate.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/dht.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ds18x20.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/errno.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/framebuf.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/gc.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/hashlib.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/heapq.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/io.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/json.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/math.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/micropython.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/modules.json create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/neopixel.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/onewire.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/os.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/platform.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/random.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/rp2.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/select.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/struct.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/sys.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/time.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uarray.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/__init__.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/core.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/event.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/funcs.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/lock.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/stream.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ubinascii.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucollections.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucryptolib.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uctypes.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uerrno.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uhashlib.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uheapq.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uio.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ujson.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/umachine.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uos.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uplatform.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/urandom.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ure.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uselect.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ustruct.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/usys.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/utime.pyi create mode 100644 tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/vfs.pyi create mode 100644 tests/merge/test_enrich.py diff --git a/src/mpflash/mpflash/vendor/board_database.py b/src/mpflash/mpflash/vendor/board_database.py index bdc10f95..36208f00 100644 --- a/src/mpflash/mpflash/vendor/board_database.py +++ b/src/mpflash/mpflash/vendor/board_database.py @@ -34,10 +34,10 @@ from __future__ import annotations -from pathlib import Path import json from dataclasses import dataclass, field from glob import glob +from pathlib import Path @dataclass(order=True) @@ -91,7 +91,7 @@ class Board: Files that explain how to deploy for this board: Example: ["../PYBV10/deploy.md"] """ - port: Port | None= field(default=None, compare=False) + port: Port | None = field(default=None, compare=False) @staticmethod def factory(filename_json: Path) -> Board: @@ -109,7 +109,7 @@ def factory(filename_json: Path) -> Board: deploy=board_json["deploy"], ) board.variants.extend( - sorted([Variant(*v, board) for v in board_json.get("variants", {}).items()]) + sorted([Variant(*v, board) for v in board_json.get("variants", {}).items()]) # type: ignore ) return board @@ -166,9 +166,7 @@ def __post_init__(self) -> None: if self.port_filter and self.port_filter != special_port_name: continue path = Path(mpy_dir, "ports", special_port_name) - variant_names = [ - var.name for var in path.glob("variants/*") if var.is_dir() - ] + variant_names = [var.name for var in path.glob("variants/*") if var.is_dir()] board = Board( special_port_name, [], diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 08079dca..9785fd57 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -4,6 +4,7 @@ """ from collections.abc import Generator +from dataclasses import dataclass from functools import lru_cache from pathlib import Path from typing import Any, Dict, List, Optional, Tuple # noqa: UP035 @@ -17,10 +18,18 @@ from stubber.rst.lookup import U_MODULES from stubber.utils.post import run_black + ########################################################################################## # # log = logging.getLogger(__name__) # logging.basicConfig(level=logging.INFO) ######################################################################################### +@dataclass +class MergeMatch: + target: Path + source: Path + target_pkg: str + source_pkg: str + is_match: bool @lru_cache @@ -42,11 +51,11 @@ def package_from_path(target: Path, source: Optional[Path] = None) -> str: # check if there is a __init__.py next to the target for p in _options: if len(list(p.parent.glob("__init__.py*"))) > 0: - return p.parent.stem + return f"{p.parent.stem}.{p.stem}" # check One level up - just in case for p in _options: if len(list(p.parent.parent.glob("__init__.py*"))) > 0: - return p.parent.parent.stem + return f"{p.parent.parent.stem}.{p.parent.stem}.{p.stem}" # then use the filename, unless it is a __**__.py for p in _options: if p.is_file() and not p.stem.startswith("__"): @@ -54,24 +63,46 @@ def package_from_path(target: Path, source: Optional[Path] = None) -> str: return "" -def upackage_equal(p1: str, p2: str) -> bool: +def upackage_equal(src: str, target: str) -> Tuple[bool, int]: """ Compare package names, return True if they are equal, ignoring an _ or u-prefix and case """ - if p1 and p1[0] in ["u", "_"]: - p1 = p1[1:] - if p2 and p2[0] in ["u", "_"]: - p2 = p2[1:] + if src.startswith("u") and not target.startswith("u"): + # do not allow enriching from u-module to module + return False, 0 + if not src.startswith("u") and target.startswith("u"): + # allow enriching from module to u-module + target = target[1:] + + # traet __init__ as a package + if src.endswith(".__init__"): + src = src[:-9] + if target.endswith(".__init__"): + target = target[:-9] + # + if src and src[0] == "_": + src = src[1:] + if target and target[0] == "_": + target = target[1:] - return p1.lower() == p2.lower() + src = src.lower() + target = target.lower() + if src == target or f"u{src}" == target: + return True, len(src) + if "." in src and src.startswith(f"{target}."): + return True, len(target) + if "." in target and target.startswith(f"{src}."): + return True, len(src) + return False, 0 -def target_source_candidates( - target: Path, source: Path, package_name: str = "" -) -> Generator[Tuple[Path, Path, str], None, None]: + +def source_target_candidates(source: Path, target: Path) -> Generator[MergeMatch, None, None]: """ Given a target and source path, return a list of tuples of `(target, source, package name)` that are candidates for merging. Goal is to match the target and source files based on the package name, to avoid mismatched merges of docstrings and typehints + + Returns a generator of tuples of `(target, source, target_package, source_package, is_partial_match)` """ # first assumption on targets if target.is_dir(): @@ -88,16 +119,27 @@ def target_source_candidates( else: sources = [] # filter down using the package name - for t in targets: - for s in sources: - if upackage_equal(package_from_path(t), package_from_path(s)): - yield (t, s, package_from_path(t)) + for s in sources: + is_match: bool = False + best_match_len = 0 + mm = None + for t in targets: + # find the best match + t_pkg = package_from_path(t) + s_pkg = package_from_path(s) + is_match, match_len = upackage_equal(s_pkg, t_pkg) + if is_match and match_len > best_match_len: + best_match_len = match_len + mm = MergeMatch(t, s, t_pkg, s_pkg, is_match) + if not mm: + continue + yield mm ######################################################################################### def enrich_file( - target_path: Path, source_path: Path, + target_path: Path, diff: bool = False, write_back: bool = False, package_name="", @@ -106,10 +148,12 @@ def enrich_file( """ Enrich a MCU stubs using the doc-stubs in another folder. Both (.py or .pyi) files are supported. + Both source an target files must exist, and are assumed to match. + Any matching of source and target files should be done before calling this function. Parameters: - source_path: the path to the firmware stub to enrich - docstub_path: the path to the folder containing the doc-stubs + source_path: the path to the firmware stub-file to enrich + docstub_path: the path to the file containing the doc-stubs diff: if True, return the diff between the original and the enriched source file write_back: if True, write the enriched source file back to the source_path @@ -120,94 +164,44 @@ def enrich_file( context = CodemodContext() package_name = package_name or package_from_path(target_path, source_path) - # find a matching doc-stub file in the docstub_path - # candidates = merge_source_candidates(package_name, source_path) - candidates = target_source_candidates(target_path, source_path) - # sort by target_path , to show diffs - candidates = sorted(candidates, key=lambda x: x[0]) - - # try to apply all candidates + if not source_path.exists() or not target_path.exists(): + raise FileNotFoundError("Source or target file not found") + if not source_path.is_file() or not target_path.is_file(): + raise FileNotFoundError("Source or target is not a file") + # apply a single codemod to the target file success = False - current = None - for target, source, name in candidates: - if target != current: - # processing a new file - if current: - # write updated code to file - if write_back: - log.trace(f"Write back enriched file {current}") - current.write_text(current_code, encoding="utf-8") - if diff: - yield diff_code(old_code, current_code, 5, filename=current.name) - old_code = current_code = target.read_text(encoding="utf-8") - current = target - if source.exists(): - if source.stem in U_MODULES: - # skip enriching from umodule.pyi files - log.debug(f"Skip enriching {target.name}, as it is an u-module") - continue - log.info(f"Merge {target} from {source}") - # read source file - codemod_instance = merge_docstub.MergeCommand( - context, docstub_file=source, params_only=params_only - ) - if new_code := exec_transform_with_prettyprint( - codemod_instance, - current_code, - # include_generated=False, - generated_code_marker=config["generated_code_marker"], - # format_code=not args.no_format, - formatter_args=config["formatter"], - # python_version=args.python_version, - ): - current_code = new_code - success = True + # read target file + old_code = current_code = target_path.read_text(encoding="utf-8") + # read source file + codemod_instance = merge_docstub.MergeCommand( + context, docstub_file=source_path, params_only=params_only + ) + if new_code := exec_transform_with_prettyprint( + codemod_instance, + current_code, + # include_generated=False, + generated_code_marker=config["generated_code_marker"], + # format_code=not args.no_format, + formatter_args=config["formatter"], + # python_version=args.python_version, + ): + current_code = new_code + success = True + if not success: raise FileNotFoundError(f"No doc-stub file found for {target_path}") + if write_back: + log.trace(f"Write back enriched file {target_path}") + target_path.write_text(current_code, encoding="utf-8") + if diff: + yield diff_code(old_code, current_code, 5, filename=target_path.name) - if current: - # write (last) updated code to file - if write_back: - log.trace(f"Write back enriched file {current}") - current.write_text(current_code, encoding="utf-8") - if diff: - yield diff_code(old_code, current_code, 5, filename=current.name) - - -# def merge_source_candidates(package_name: str, docstub_path: Path) -> List[Path]: -# """Return a list of candidate files in the docstub path that can be used to enrich the provided package_name.""" -# if docstub_path.is_file(): -# candidates = [docstub_path] -# return candidates -# # select from .py and .pyi files -# candidates: List[Path] = [] -# for ext in [".py", ".pyi"]: -# candidates.extend(file_package(package_name, docstub_path, ext)) -# if package_name[0].lower() in ["u", "_"]: -# # also look for candidates without leading u ( usys.py <- sys.py) -# # also look for candidates without leading _ ( _rp2.py <- rp2.py ) -# candidates.extend(file_package(package_name[1:], docstub_path, ext)) -# else: -# # also look for candidates with leading u ( sys.py <- usys.py) -# candidates.extend(file_package("u" + package_name, docstub_path, ext)) -# return candidates - - -def file_package(name: str, docstub_path: Path, ext: str) -> List[Path]: - """ - Return a list of candidate files in the docstub path that can be used to enrich the provided package_name. - package_name can be ufoo, foo, _foo, foo or foo.bar - """ - candidates: List[Path] = [] - candidates.extend(docstub_path.rglob(name.replace(".", "/") + ext)) - if (docstub_path / name).is_dir(): - candidates.extend(docstub_path.rglob(f"{name}/*{ext}")) - return candidates + log.info(f"Enriched {target_path}") def enrich_folder( - target_path: Path, - source_path: Path, + source_folder: Path, + target_folder: Path, show_diff: bool = False, write_back: bool = False, require_docstub: bool = False, @@ -219,51 +213,51 @@ def enrich_folder( Returns the number of files enriched. """ - if not target_path.exists(): - raise FileNotFoundError(f"Target {target_path} does not exist") - if not source_path.exists(): - raise FileNotFoundError(f"Source {source_path} does not exist") - log.info(f"Enrich folder {target_path}.") + if not target_folder.exists(): + raise FileNotFoundError(f"Target {target_folder} does not exist") + if not source_folder.exists(): + raise FileNotFoundError(f"Source {source_folder} does not exist") + log.info(f"Enrich folder {target_folder}.") count = 0 - # list all the .py and .pyi files in/under the source folder - if target_path.is_file(): - target_files = [target_path] - else: - target_files = sorted( - list(target_path.rglob("**/*.py")) + list(target_path.rglob("**/*.pyi")) - ) - package_name = package_name or package_from_path(target_path, source_path) - for target in target_files: - if target.stem.startswith("u") and target.stem[1:] in U_MODULES: + + candidates = source_target_candidates(source_folder, target_folder) + # sort by target_path , to show diffs + candidates = sorted(candidates, key=lambda m: m.target) + + # CHECK: is this still needed? + # package_name = package_name or package_from_path(target_folder, source_folder) + + # for target in target_files: + for mm in candidates: + if mm.target.stem.startswith("u") and mm.target.stem[1:] in U_MODULES: # skip enriching umodule.pyi files - log.debug(f"Skip enriching {target.name}, as it is an u-module") + log.debug(f"Skip enriching {mm.target.name}, as it is an u-module") continue try: - diffs = list( - enrich_file( - target, - source_path, - diff=True, - write_back=write_back, - package_name=package_name, - params_only=params_only, - ) - ) - if diffs: - count += len(diffs) + + if diff := enrich_file( + mm.source, + mm.target, + diff=True, + write_back=write_back, + package_name=mm.target_pkg, + params_only=params_only, + ): + count += 1 if show_diff: - for diff in diffs: - print(diff) + print(diff) except FileNotFoundError as e: # no docstub to enrich with if require_docstub: - raise (FileNotFoundError(f"No doc-stub file found for {target}")) from e + raise ( + FileNotFoundError(f"No doc-stub or source file found for {mm.target}") + ) from e except (Exception, ParserSyntaxError) as e: - log.error(f"Error parsing {target}") + log.error(f"Error parsing {mm.target}") log.exception(e) continue - # run black on the destination folder - run_black(target_path) - # DO NOT run Autoflake as this removes some relevant (unused) imports too early + # run black on the target folder + run_black(target_folder) + # DO NOT run Autoflake as this removes some relevant (but unused) imports too early return count diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 7238723c..ee430bd9 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -159,7 +159,7 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c # bit of a hack to get the full module name empty_mod = cst.parse_module("") full_module_name = empty_mod.code_for_node(imp.module) # type: ignore - log.info(f"add: from {full_module_name} import *") + log.debug(f"add: from {full_module_name} import *") AddImportsVisitor.add_needed_import( self.context, module=full_module_name, @@ -356,7 +356,7 @@ def leave_FunctionDef( # assert isinstance(doc_stub, TypeInfo) # assert doc_stub # first update the docstring - no_docstring = updated_node.get_docstring() == None + no_docstring = updated_node.get_docstring() is None if (not self.params_only) or no_docstring: # DO Not overwrite existing docstring updated_node = update_def_docstr(updated_node, doc_stub.docstr_node, doc_stub.def_node) @@ -399,7 +399,7 @@ def leave_FunctionDef( new_decorators.extend(doc_stub.decorators) for decorator in updated_node.decorators: - if not decorator.decorator.value in [n.decorator.value for n in new_decorators]: # type: ignore + if decorator.decorator.value not in [n.decorator.value for n in new_decorators]: # type: ignore new_decorators.append(decorator) # if there is both a static and a class method, we remove the class decorator to avoid inconsistencies diff --git a/src/stubber/commands/enrich_folder_cmd.py b/src/stubber/commands/enrich_folder_cmd.py index 857dda94..30923f81 100644 --- a/src/stubber/commands/enrich_folder_cmd.py +++ b/src/stubber/commands/enrich_folder_cmd.py @@ -74,8 +74,8 @@ def cli_enrich_folder( write_back = not dry_run log.info(f"Enriching {dest_folder} with {source_folder}") _ = enrich_folder( - Path(dest_folder), Path(source_folder), + Path(dest_folder), show_diff=diff, write_back=write_back, require_docstub=False, diff --git a/src/stubber/commands/get_frozen_cmd.py b/src/stubber/commands/get_frozen_cmd.py index 5cd4a18e..9601994c 100644 --- a/src/stubber/commands/get_frozen_cmd.py +++ b/src/stubber/commands/get_frozen_cmd.py @@ -102,8 +102,8 @@ def cli_get_frozen( if docstubs_path.exists(): log.info(f"Enriching {str(stub_path)} with {docstubs_path}") if merged := enrich_folder( - stub_path, docstubs_path, + stub_path, show_diff=False, write_back=True, require_docstub=False, diff --git a/src/stubber/publish/merge_docstubs.py b/src/stubber/publish/merge_docstubs.py index 8d59002c..9af02f60 100644 --- a/src/stubber/publish/merge_docstubs.py +++ b/src/stubber/publish/merge_docstubs.py @@ -128,7 +128,7 @@ def copy_and_merge_docstubs(fw_path: Path, dest_path: Path, docstub_path: Path): (dest_path / name).with_suffix(suffix).unlink() # type: ignore # 2 - Enrich the MCU stubs with the document stubs - result = enrich_folder(dest_path, source_path=docstub_path, write_back=True) + result = enrich_folder(source_folder=docstub_path, target_folder=dest_path, write_back=True) # copy the docstubs manifest.json file to the package folder if (docstub_path / "modules.json").exists(): diff --git a/tests/codemods/enrich_test.py b/tests/codemods/enrich_test.py index d9fad29f..c6dd4c17 100644 --- a/tests/codemods/enrich_test.py +++ b/tests/codemods/enrich_test.py @@ -10,18 +10,25 @@ @pytest.mark.parametrize( - "source_file, expected", + "source_file, target_file, expected", [ - (Path("./tests/data/stub_merge/micropython-v1_18-esp32/esp32.py"), True), - (Path("./tests/data/stub_merge/micropython-v1_18-esp32/builtins.py"), False), + ( + Path("./tests/data/stub_merge/micropython-v1_18-docstubs/esp32.pyi"), + Path("./tests/data/stub_merge/micropython-v1_18-esp32/esp32.pyi"), + True, + ), + ( + Path("./tests/data/stub_merge/micropython-v1_18-esp32/builtins.pyi"), + Path("./tests/data/stub_merge/micropython-v1_18-esp32/builtins.pyi"), + False, + ), ], ) -def test_enrich_file_with_stub(source_file: Path, expected: bool): +def test_enrich_file_with_stub(source_file: Path, target_file: Path, expected: bool): # source_file = Path("./tests/data/stub_merge/micropython-v1_18-esp32/esp32.py") diffs = [] - docstub_path = Path("./tests/data/stub_merge/micropython-v1_18-docstubs") try: - diff_gen = enrich_file(source_file, docstub_path, diff=True, write_back=False) + diff_gen = enrich_file(source_file, target_file, diff=True, write_back=False) diffs = list(diff_gen) except FileNotFoundError: assert not expected, "docstub File not found but expected" @@ -33,33 +40,48 @@ def test_enrich_file_with_stub(source_file: Path, expected: bool): @pytest.mark.parametrize( - "source_folder, docstub_folder, expected_count", + "ID, source_folder, target_folder, expected_count", [ ( - Path("./tests/data/stub_merge/micropython-v1_18-esp32"), + 1, Path("./tests/data/stub_merge/micropython-v1_18-docstubs"), - 22, + Path("./tests/data/stub_merge/micropython-v1_18-esp32"), + 9, ), ( - Path("./tests/data/stub_merge/micropython-v1_18-esp32/micropython.pyi"), + 2, Path("./tests/data/stub_merge/micropython-v1_18-docstubs"), + Path("./tests/data/stub_merge/micropython-v1_18-esp32/micropython.pyi"), 1, ), ( - Path("./tests/data/stub_merge/micropython-v1_18-esp32/uplatform.pyi"), + 3, Path("./tests/data/stub_merge/micropython-v1_18-docstubs"), - 1, + Path("./tests/data/stub_merge/micropython-v1_18-esp32/uplatform.pyi"), + 0, ), ( - Path("./tests/data/stub_merge/micropython-v1_18-esp32/micropython.pyi"), + 4, Path("./tests/data/stub_merge/micropython-v1_18-docstubs/micropython.pyi"), + Path("./tests/data/stub_merge/micropython-v1_18-esp32/micropython.pyi"), 1, ), + # test new stubs with multiple files / module + ( + 15, + Path("./tests/data/stub_merge/micropython-v1_24_1-docstubs"), + Path("./tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi"), + 18, + ), # Add more test cases if needed ], ) def test_enrich_folder( - source_folder: Path, docstub_folder: Path, expected_count: int, mocker: MockerFixture + ID, + source_folder: Path, + target_folder: Path, + expected_count: int, + mocker: MockerFixture, ): m_enrich_file = mocker.patch( "stubber.codemod.enrich.enrich_file", return_value="OK", autospec=True @@ -69,7 +91,7 @@ def test_enrich_folder( ) count = enrich_folder( source_folder, - docstub_folder, + target_folder, show_diff=False, write_back=False, ) @@ -77,5 +99,5 @@ def test_enrich_folder( count >= expected_count ), f"Expected at least {expected_count} files to be enriched but found {count}" m_run_black.assert_called_once() - m_enrich_file.assert_called() + m_enrich_file.call_count >= expected_count assert m_enrich_file.call_count >= expected_count diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/IRQs.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/IRQs.pyi new file mode 100644 index 00000000..a2ab55d1 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/IRQs.pyi @@ -0,0 +1,31 @@ +""" +IRQ object types, used in the machine, bluetooth, _rp2 and rp2 modules + +_IRQ is a union of the types _IRQ_ESP32, _IRQ_RP2 and _IRQ_PYB +to allow the same stubs to support of the different ports of MicroPython. + +""" + +from typing import Type + +from _typeshed import Incomplete +from typing_extensions import TypeAlias + +class _IRQ_ESP32: + def trigger(self) -> int: ... + # def flags(self) -> int: ... + +class _IRQ_RP2: + # rp2040 + # object is of type irq + # flags -- + # trigger -- + def flags(self) -> int: ... + def trigger(self) -> int: ... + +# pybv11 +# TODO: Not sure what the correct implementation is +# NoneType +_IRQ_PYB: TypeAlias = None + +_IRQ: TypeAlias = Type[_IRQ_ESP32] | Type[_IRQ_RP2] | Type[_IRQ_PYB] | Incomplete diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/NeoPixelBase.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/NeoPixelBase.pyi new file mode 100644 index 00000000..166c4349 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/NeoPixelBase.pyi @@ -0,0 +1,26 @@ +########################### +# neopixel +from typing import Tuple + +class _NeoPixelBase: + """ + a class to add a few missing methods to the NeoPixel class + """ + + def __len__(self) -> int: + """ + Returns the number of LEDs in the strip. + """ + ... + + def __setitem__(self, index: int, val, /) -> None: + """ + Set the pixel at *index* to the value, which is an RGB/RGBW tuple. + """ + ... + + def __getitem__(self, index: int, /) -> Tuple: + """ + Returns the pixel at *index* as an RGB/RGBW tuple. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/__init__.pyi new file mode 100644 index 00000000..43f8d832 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/__init__.pyi @@ -0,0 +1,107 @@ +""" +MicroPython-stubs base types that are not present in typeshed. + +This is a collection of types that are not present in typeshed, but are used in the micropython stubs. + +Common cases are: +- MicroPython implementation is different from CPython, so the types are different. +- MicroPython has some types that are not present in CPython. + +""" + +from __future__ import annotations + +import abc # type: ignore - not collections.abc +import sys +from array import array +from typing import Final, final + +from _typeshed import structseq +from typing_extensions import TypeAlias, TypeVar + +from .subscriptable import Subscriptable as Subscriptable +from .IRQs import _IRQ +from .NeoPixelBase import _NeoPixelBase as _NeoPixelBase +from blockdevice import AbstractBlockDev as AbstractBlockDev, _OldAbstractBlockDev, _OldAbstractReadOnlyBlockDev + +from .io_mp import ( + BytesIO as BytesIO, + FileIO as FileIO, + IncrementalNewlineDecoder as IncrementalNewlineDecoder, + StringIO as StringIO, + TextIOWrapper as TextIOWrapper, + IOBase as IOBase, + _BufferedIOBase, + _IOBase, + _RawIOBase, + _TextIOBase, + open as open, +) +from .pathlike import PathLike + +# ------------------ +# copied from _typeshed os.pyi as os.pyi cannot import from a module with the same name +GenericAlias = type(list[int]) + +# ------------------------------------------------------------------------------------ +AnyReadableBuf: TypeAlias = bytearray | array | memoryview | bytes +AnyWritableBuf: TypeAlias = bytearray | array | memoryview + +# ------------------------------------------------------------------------------------ +StrOrBytesPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes] +_StrOrBytesT = TypeVar("_StrOrBytesT", str, bytes) + +# ------------------------------------------------------------------------------------ +_AnyPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes] +_FdOrAnyPath: TypeAlias = int | _AnyPath + +# ------------------------------------------------------------------------------------ +# HID_Tuple is used in multiple pyb.submodules +HID_Tuple: TypeAlias = tuple[int, int, int, int, bytes] + +# ------------------------------------------------------------------------------------ +# copied from _typeshed os.pyi as os.pyi cannot import from a module with the same nam@final +@final +class uname_result(structseq[str], tuple[str, str, str, str, str]): + if sys.version_info >= (3, 8): + __match_args__: Final = ("sysname", "nodename", "release", "version", "machine") + + @property + def sysname(self) -> str: ... + @property + def nodename(self) -> str: ... + @property + def release(self) -> str: ... + @property + def version(self) -> str: ... + @property + def machine(self) -> str: ... + +# ------------------------------------------------------------------------------------ + +########################### +# HashLib + +# manual addition to hashlib.pyi + +class _Hash(abc.ABC): + """ + Abstract base class for hashing algorithms that defines methods available in all algorithms. + """ + + def update(self, data: AnyReadableBuf, /) -> None: + """ + Feed more binary data into hash. + """ + + def digest(self) -> bytes: + """ + Return hash for all data passed through hash, as a bytes object. After this + method is called, more data cannot be fed into the hash any longer. + """ + + def hexdigest(self) -> str: + """ + This method is NOT implemented. Use ``binascii.hexlify(hash.digest())`` + to achieve a similar effect. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/_collections_abc.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/_collections_abc.pyi new file mode 100644 index 00000000..ed6a499b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/_collections_abc.pyi @@ -0,0 +1,98 @@ +import sys +from abc import abstractmethod +from types import MappingProxyType +from typing import AbstractSet as Set # noqa: Y022,Y038 +from typing import AsyncGenerator as AsyncGenerator +from typing import AsyncIterable as AsyncIterable +from typing import AsyncIterator as AsyncIterator +from typing import Awaitable as Awaitable +from typing import Callable as Callable +from typing import Collection as Collection +from typing import Container as Container +from typing import Coroutine as Coroutine +from typing import Generator as Generator +from typing import Generic +from typing import Hashable as Hashable +from typing import ItemsView as ItemsView +from typing import Iterable as Iterable +from typing import Iterator as Iterator +from typing import KeysView as KeysView +from typing import Mapping as Mapping +from typing import MappingView as MappingView +from typing import MutableMapping as MutableMapping +from typing import MutableSequence as MutableSequence +from typing import MutableSet as MutableSet +from typing import Protocol +from typing import Reversible as Reversible +from typing import Sequence as Sequence +from typing import Sized as Sized +from typing import TypeVar +from typing import ValuesView as ValuesView +from typing import final, runtime_checkable + +__all__ = [ + "Awaitable", + "Coroutine", + "AsyncIterable", + "AsyncIterator", + "AsyncGenerator", + "Hashable", + "Iterable", + "Iterator", + "Generator", + "Reversible", + "Sized", + "Container", + "Callable", + "Collection", + "Set", + "MutableSet", + "Mapping", + "MutableMapping", + "MappingView", + "KeysView", + "ItemsView", + "ValuesView", + "Sequence", + "MutableSequence", +] +if sys.version_info < (3, 14): + from typing import ByteString as ByteString # noqa: Y057 + + __all__ += ["ByteString"] + +if sys.version_info >= (3, 12): + __all__ += ["Buffer"] + +_KT_co = TypeVar("_KT_co", covariant=True) # Key type covariant containers. +_VT_co = TypeVar("_VT_co", covariant=True) # Value type covariant containers. + +@final +class dict_keys(KeysView[_KT_co], Generic[_KT_co, _VT_co]): # undocumented + def __eq__(self, value: object, /) -> bool: ... + if sys.version_info >= (3, 13): + def isdisjoint(self, other: Iterable[_KT_co], /) -> bool: ... + if sys.version_info >= (3, 10): + @property + def mapping(self) -> MappingProxyType[_KT_co, _VT_co]: ... + +@final +class dict_values(ValuesView[_VT_co], Generic[_KT_co, _VT_co]): # undocumented + if sys.version_info >= (3, 10): + @property + def mapping(self) -> MappingProxyType[_KT_co, _VT_co]: ... + +@final +class dict_items(ItemsView[_KT_co, _VT_co]): # undocumented + def __eq__(self, value: object, /) -> bool: ... + if sys.version_info >= (3, 13): + def isdisjoint(self, other: Iterable[tuple[_KT_co, _VT_co]], /) -> bool: ... + if sys.version_info >= (3, 10): + @property + def mapping(self) -> MappingProxyType[_KT_co, _VT_co]: ... + +if sys.version_info >= (3, 12): + @runtime_checkable + class Buffer(Protocol): + @abstractmethod + def __buffer__(self, flags: int, /) -> memoryview: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/blockdevice.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/blockdevice.pyi new file mode 100644 index 00000000..b2157730 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/blockdevice.pyi @@ -0,0 +1,211 @@ +""" +The AbstractBlockDev class is a template for the design of block device classes, +MicroPython does not actually provide that class. + +In the type stubs this is implemented as a Protocol, which is a Python 3.8 feature that allows for more flexible type checking. + +It has been moved to the _mpy_shed type library for convinience, but may be relocated to the `vfs` stub module in the future. + +- vfs.*(...) +- os.AbstractBlockDev(...) +- pyb.AbstractBlockDev(...) +- pyb.Flash(...) +- (u)os.AbstractBlockDev(...) +- esp32.Partition.ioctl +https://docs.micropython.org/en/v1.24.0/reference/filesystem.html?highlight=abstractblockdev +- https://docs.micropython.org/en/v1.24.0/library/vfs.html#vfs.AbstractBlockDev +- https://docs.micropython.org/en/v1.20.0/library/os.html?highlight=abstractblockdev#block-devices +- https://docs.micropython.org/en/v1.20.0/library/pyb.html?highlight=abstractblockdev#block-devices +- https://docs.micropython.org/en/latest/library/esp32.html#esp32.Partition.ioctl +""" + +from typing import Any, Literal, Protocol, overload, runtime_checkable + +from typing_extensions import TypeAlias + +# TODO: improve the typechecking implementation if possible +_OldAbstractReadOnlyBlockDev: TypeAlias = Any +_OldAbstractBlockDev: TypeAlias = Any + +@runtime_checkable +class AbstractBlockDev(Protocol): + """ + Block devices + ------------- + + A block device is an object which implements the block protocol. This enables a + device to support MicroPython filesystems. The physical hardware is represented + by a user defined class. The :class:`AbstractBlockDev` class is a template for + the design of such a class: MicroPython does not actually provide that class, + but an actual block device class must implement the methods described below. + + A concrete implementation of this class will usually allow access to the + memory-like functionality of a piece of hardware (like flash memory). A block + device can be formatted to any supported filesystem and mounted using ``os`` + methods. + + See :ref:`filesystem` for example implementations of block devices using the + two variants of the block protocol described below. + + .. _block-device-interface: + + Simple and extended interface + ............................. + + There are two compatible signatures for the ``readblocks`` and ``writeblocks`` + methods (see below), in order to support a variety of use cases. A given block + device may implement one form or the other, or both at the same time. The second + form (with the offset parameter) is referred to as the "extended interface". + + Some filesystems (such as littlefs) that require more control over write + operations, for example writing to sub-block regions without erasing, may require + that the block device supports the extended interface. + """ + + def __init__(self) -> None: + """ + Construct a block device object. The parameters to the constructor are + dependent on the specific block device. + """ + + @overload + def readblocks(self, block_num: int, buf: bytearray, /) -> None: + """ + The first form reads aligned, multiples of blocks. + Starting at the block given by the index *block_num*, read blocks from + the device into *buf* (an array of bytes). + The number of blocks to read is given by the length of *buf*, + which will be a multiple of the block size. + + The second form allows reading at arbitrary locations within a block, + and arbitrary lengths. + Starting at block index *block_num*, and byte offset within that block + of *offset*, read bytes from the device into *buf* (an array of bytes). + The number of bytes to read is given by the length of *buf*. + """ + + @overload + def readblocks(self, block_num: int, buf: bytearray, offset: int, /) -> None: + """ + The first form reads aligned, multiples of blocks. + Starting at the block given by the index *block_num*, read blocks from + the device into *buf* (an array of bytes). + The number of blocks to read is given by the length of *buf*, + which will be a multiple of the block size. + + The second form allows reading at arbitrary locations within a block, + and arbitrary lengths. + Starting at block index *block_num*, and byte offset within that block + of *offset*, read bytes from the device into *buf* (an array of bytes). + The number of bytes to read is given by the length of *buf*. + """ + + @overload + def writeblocks(self, block_num: int, buf: bytes | bytearray, /) -> None: + """ + The first form writes aligned, multiples of blocks, and requires that the + blocks that are written to be first erased (if necessary) by this method. + Starting at the block given by the index *block_num*, write blocks from + *buf* (an array of bytes) to the device. + The number of blocks to write is given by the length of *buf*, + which will be a multiple of the block size. + + The second form allows writing at arbitrary locations within a block, + and arbitrary lengths. Only the bytes being written should be changed, + and the caller of this method must ensure that the relevant blocks are + erased via a prior ``ioctl`` call. + Starting at block index *block_num*, and byte offset within that block + of *offset*, write bytes from *buf* (an array of bytes) to the device. + The number of bytes to write is given by the length of *buf*. + + Note that implementations must never implicitly erase blocks if the offset + argument is specified, even if it is zero. + """ + + @overload + def writeblocks(self, block_num: int, buf: bytes | bytearray, offset: int, /) -> None: + """ + The first form writes aligned, multiples of blocks, and requires that the + blocks that are written to be first erased (if necessary) by this method. + Starting at the block given by the index *block_num*, write blocks from + *buf* (an array of bytes) to the device. + The number of blocks to write is given by the length of *buf*, + which will be a multiple of the block size. + + The second form allows writing at arbitrary locations within a block, + and arbitrary lengths. Only the bytes being written should be changed, + and the caller of this method must ensure that the relevant blocks are + erased via a prior ``ioctl`` call. + Starting at block index *block_num*, and byte offset within that block + of *offset*, write bytes from *buf* (an array of bytes) to the device. + The number of bytes to write is given by the length of *buf*. + + Note that implementations must never implicitly erase blocks if the offset + argument is specified, even if it is zero. + """ + + @overload + def ioctl(self, op: Literal[4, 5], arg: int) -> int: + """ + Control the block device and query its parameters. The operation to + perform is given by *op* which is one of the following integers: + + - 1 -- initialise the device (*arg* is unused) + - 2 -- shutdown the device (*arg* is unused) + - 3 -- sync the device (*arg* is unused) + - 4 -- get a count of the number of blocks, should return an integer + (*arg* is unused) + - 5 -- get the number of bytes in a block, should return an integer, + or ``None`` in which case the default value of 512 is used + (*arg* is unused) + - 6 -- erase a block, *arg* is the block number to erase + + As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs + ``ioctl(6, ...)`` must also be intercepted. The need for others is + hardware dependent. + + Prior to any call to ``writeblocks(block, ...)`` littlefs issues + ``ioctl(6, block)``. This enables a device driver to erase the block + prior to a write if the hardware requires it. Alternatively a driver + might intercept ``ioctl(6, block)`` and return 0 (success). In this case + the driver assumes responsibility for detecting the need for erasure. + + Unless otherwise stated ``ioctl(op, arg)`` can return ``None``. + Consequently an implementation can ignore unused values of ``op``. Where + ``op`` is intercepted, the return value for operations 4 and 5 are as + detailed above. Other operations should return 0 on success and non-zero + for failure, with the value returned being an ``OSError`` errno code. + """ + + @overload + def ioctl(self, op: Literal[1, 2, 3, 6], arg: int) -> int | None: + """ + Control the block device and query its parameters. The operation to + perform is given by *op* which is one of the following integers: + + - 1 -- initialise the device (*arg* is unused) + - 2 -- shutdown the device (*arg* is unused) + - 3 -- sync the device (*arg* is unused) + - 4 -- get a count of the number of blocks, should return an integer + (*arg* is unused) + - 5 -- get the number of bytes in a block, should return an integer, + or ``None`` in which case the default value of 512 is used + (*arg* is unused) + - 6 -- erase a block, *arg* is the block number to erase + + As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs + ``ioctl(6, ...)`` must also be intercepted. The need for others is + hardware dependent. + + Prior to any call to ``writeblocks(block, ...)`` littlefs issues + ``ioctl(6, block)``. This enables a device driver to erase the block + prior to a write if the hardware requires it. Alternatively a driver + might intercept ``ioctl(6, block)`` and return 0 (success). In this case + the driver assumes responsibility for detecting the need for erasure. + + Unless otherwise stated ``ioctl(op, arg)`` can return ``None``. + Consequently an implementation can ignore unused values of ``op``. Where + ``op`` is intercepted, the return value for operations 4 and 5 are as + detailed above. Other operations should return 0 on success and non-zero + for failure, with the value returned being an ``OSError`` errno code. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/__init__.pyi new file mode 100644 index 00000000..81288001 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/__init__.pyi @@ -0,0 +1,525 @@ +import sys +from typing import Any, Generic, NoReturn, SupportsIndex, TypeVar, final, overload + +from _collections_abc import dict_items, dict_keys, dict_values +from _typeshed import ( + SupportsItems, + SupportsKeysAndGetItem, + SupportsRichComparison, + SupportsRichComparisonT, +) +from typing_extensions import Self + +if sys.version_info >= (3, 9): + # from types import GenericAlias + from _mpy_shed import GenericAlias + +if sys.version_info >= (3, 10): + from collections.abc import ( + Callable, + ItemsView, + Iterable, + Iterator, + KeysView, + Mapping, + MutableMapping, + MutableSequence, + Sequence, + ValuesView, + ) +else: + from _collections_abc import * + +__all__ = [ + "ChainMap", + "Counter", + "OrderedDict", + "UserDict", + "UserList", + "UserString", + "defaultdict", + "deque", + "namedtuple", +] + +_S = TypeVar("_S") +_T = TypeVar("_T") +_T1 = TypeVar("_T1") +_T2 = TypeVar("_T2") +_KT = TypeVar("_KT") +_VT = TypeVar("_VT") +_KT_co = TypeVar("_KT_co", covariant=True) +_VT_co = TypeVar("_VT_co", covariant=True) + +# namedtuple is special-cased in the type checker; the initializer is ignored. +def namedtuple( + typename: str, + field_names: str | Iterable[str], + *, + rename: bool = False, + module: str | None = None, + defaults: Iterable[Any] | None = None, +) -> type[tuple[Any, ...]]: ... + +class UserDict(MutableMapping[_KT, _VT]): + data: dict[_KT, _VT] + # __init__ should be kept roughly in line with `dict.__init__`, which has the same semantics + @overload + def __init__(self, dict: None = None, /) -> None: ... + @overload + def __init__( + self: UserDict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + dict: None = None, + /, + **kwargs: _VT, # pyright: ignore[reportInvalidTypeVarUse] #11780 + ) -> None: ... + @overload + def __init__(self, dict: SupportsKeysAndGetItem[_KT, _VT], /) -> None: ... + @overload + def __init__( + self: UserDict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + dict: SupportsKeysAndGetItem[str, _VT], + /, + **kwargs: _VT, + ) -> None: ... + @overload + def __init__(self, iterable: Iterable[tuple[_KT, _VT]], /) -> None: ... + @overload + def __init__( + self: UserDict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + iterable: Iterable[tuple[str, _VT]], + /, + **kwargs: _VT, + ) -> None: ... + @overload + def __init__(self: UserDict[str, str], iterable: Iterable[list[str]], /) -> None: ... + @overload + def __init__(self: UserDict[bytes, bytes], iterable: Iterable[list[bytes]], /) -> None: ... + def __len__(self) -> int: ... + def __getitem__(self, key: _KT) -> _VT: ... + def __setitem__(self, key: _KT, item: _VT) -> None: ... + def __delitem__(self, key: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __contains__(self, key: object) -> bool: ... + def copy(self) -> Self: ... + def __copy__(self) -> Self: ... + + # `UserDict.fromkeys` has the same semantics as `dict.fromkeys`, so should be kept in line with `dict.fromkeys`. + # TODO: Much like `dict.fromkeys`, the true signature of `UserDict.fromkeys` is inexpressible in the current type system. + # See #3800 & https://github.com/python/typing/issues/548#issuecomment-683336963. + @classmethod + @overload + def fromkeys(cls, iterable: Iterable[_T], value: None = None) -> UserDict[_T, Any | None]: ... + @classmethod + @overload + def fromkeys(cls, iterable: Iterable[_T], value: _S) -> UserDict[_T, _S]: ... + if sys.version_info >= (3, 9): + @overload + def __or__(self, other: UserDict[_KT, _VT] | dict[_KT, _VT]) -> Self: ... + @overload + def __or__(self, other: UserDict[_T1, _T2] | dict[_T1, _T2]) -> UserDict[_KT | _T1, _VT | _T2]: ... + @overload + def __ror__(self, other: UserDict[_KT, _VT] | dict[_KT, _VT]) -> Self: ... + @overload + def __ror__(self, other: UserDict[_T1, _T2] | dict[_T1, _T2]) -> UserDict[_KT | _T1, _VT | _T2]: ... + # UserDict.__ior__ should be kept roughly in line with MutableMapping.update() + @overload # type: ignore[misc] + def __ior__(self, other: SupportsKeysAndGetItem[_KT, _VT]) -> Self: ... + @overload + def __ior__(self, other: Iterable[tuple[_KT, _VT]]) -> Self: ... + if sys.version_info >= (3, 12): + @overload + def get(self, key: _KT, default: None = None) -> _VT | None: ... + @overload + def get(self, key: _KT, default: _T) -> _VT | _T: ... + +class UserList(MutableSequence[_T]): + data: list[_T] + @overload + def __init__(self, initlist: None = None) -> None: ... + @overload + def __init__(self, initlist: Iterable[_T]) -> None: ... + def __lt__(self, other: list[_T] | UserList[_T]) -> bool: ... + def __le__(self, other: list[_T] | UserList[_T]) -> bool: ... + def __gt__(self, other: list[_T] | UserList[_T]) -> bool: ... + def __ge__(self, other: list[_T] | UserList[_T]) -> bool: ... + def __eq__(self, other: object) -> bool: ... + def __contains__(self, item: object) -> bool: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self, i: SupportsIndex) -> _T: ... + @overload + def __getitem__(self, i: slice) -> Self: ... + @overload + def __setitem__(self, i: SupportsIndex, item: _T) -> None: ... + @overload + def __setitem__(self, i: slice, item: Iterable[_T]) -> None: ... + def __delitem__(self, i: SupportsIndex | slice) -> None: ... + def __add__(self, other: Iterable[_T]) -> Self: ... + def __radd__(self, other: Iterable[_T]) -> Self: ... + def __iadd__(self, other: Iterable[_T]) -> Self: ... + def __mul__(self, n: int) -> Self: ... + def __rmul__(self, n: int) -> Self: ... + def __imul__(self, n: int) -> Self: ... + def append(self, item: _T) -> None: ... + def insert(self, i: int, item: _T) -> None: ... + def pop(self, i: int = -1) -> _T: ... + def remove(self, item: _T) -> None: ... + def copy(self) -> Self: ... + def __copy__(self) -> Self: ... + def count(self, item: _T) -> int: ... + # The runtime signature is "item, *args", and the arguments are then passed + # to `list.index`. In order to give more precise types, we pretend that the + # `item` argument is positional-only. + def index(self, item: _T, start: SupportsIndex = 0, stop: SupportsIndex = sys.maxsize, /) -> int: ... + # All arguments are passed to `list.sort` at runtime, so the signature should be kept in line with `list.sort`. + @overload + def sort(self: UserList[SupportsRichComparisonT], *, key: None = None, reverse: bool = False) -> None: ... + @overload + def sort(self, *, key: Callable[[_T], SupportsRichComparison], reverse: bool = False) -> None: ... + def extend(self, other: Iterable[_T]) -> None: ... + +class UserString(Sequence[UserString]): + data: str + def __init__(self, seq: object) -> None: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + def __getnewargs__(self) -> tuple[str]: ... + def __lt__(self, string: str | UserString) -> bool: ... + def __le__(self, string: str | UserString) -> bool: ... + def __gt__(self, string: str | UserString) -> bool: ... + def __ge__(self, string: str | UserString) -> bool: ... + def __eq__(self, string: object) -> bool: ... + def __hash__(self) -> int: ... + def __contains__(self, char: object) -> bool: ... + def __len__(self) -> int: ... + def __getitem__(self, index: SupportsIndex | slice) -> Self: ... + def __iter__(self) -> Iterator[Self]: ... + def __reversed__(self) -> Iterator[Self]: ... + def __add__(self, other: object) -> Self: ... + def __radd__(self, other: object) -> Self: ... + def __mul__(self, n: int) -> Self: ... + def __rmul__(self, n: int) -> Self: ... + def __mod__(self, args: Any) -> Self: ... + def __rmod__(self, template: object) -> Self: ... + def capitalize(self) -> Self: ... + def casefold(self) -> Self: ... + def center(self, width: int, *args: Any) -> Self: ... + def count(self, sub: str | UserString, start: int = 0, end: int = sys.maxsize) -> int: ... + def encode(self: UserString, encoding: str | None = "utf-8", errors: str | None = "strict") -> bytes: ... + def endswith(self, suffix: str | tuple[str, ...], start: int | None = 0, end: int | None = sys.maxsize) -> bool: ... + def expandtabs(self, tabsize: int = 8) -> Self: ... + def find(self, sub: str | UserString, start: int = 0, end: int = sys.maxsize) -> int: ... + def format(self, *args: Any, **kwds: Any) -> str: ... + def format_map(self, mapping: Mapping[str, Any]) -> str: ... + def index(self, sub: str, start: int = 0, end: int = sys.maxsize) -> int: ... + def isalpha(self) -> bool: ... + def isalnum(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def isascii(self) -> bool: ... + def join(self, seq: Iterable[str]) -> str: ... + def ljust(self, width: int, *args: Any) -> Self: ... + def lower(self) -> Self: ... + def lstrip(self, chars: str | None = None) -> Self: ... + maketrans = str.maketrans + def partition(self, sep: str) -> tuple[str, str, str]: ... + if sys.version_info >= (3, 9): + def removeprefix(self, prefix: str | UserString, /) -> Self: ... + def removesuffix(self, suffix: str | UserString, /) -> Self: ... + + def replace(self, old: str | UserString, new: str | UserString, maxsplit: int = -1) -> Self: ... + def rfind(self, sub: str | UserString, start: int = 0, end: int = sys.maxsize) -> int: ... + def rindex(self, sub: str | UserString, start: int = 0, end: int = sys.maxsize) -> int: ... + def rjust(self, width: int, *args: Any) -> Self: ... + def rpartition(self, sep: str) -> tuple[str, str, str]: ... + def rstrip(self, chars: str | None = None) -> Self: ... + def split(self, sep: str | None = None, maxsplit: int = -1) -> list[str]: ... + def rsplit(self, sep: str | None = None, maxsplit: int = -1) -> list[str]: ... + def splitlines(self, keepends: bool = False) -> list[str]: ... + def startswith(self, prefix: str | tuple[str, ...], start: int | None = 0, end: int | None = sys.maxsize) -> bool: ... + def strip(self, chars: str | None = None) -> Self: ... + def swapcase(self) -> Self: ... + def title(self) -> Self: ... + def translate(self, *args: Any) -> Self: ... + def upper(self) -> Self: ... + def zfill(self, width: int) -> Self: ... + +class deque(MutableSequence[_T]): + @property + def maxlen(self) -> int | None: ... + @overload + def __init__(self, *, maxlen: int | None = None) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T], maxlen: int | None = None) -> None: ... + def append(self, x: _T, /) -> None: ... + def appendleft(self, x: _T, /) -> None: ... + def copy(self) -> Self: ... + def count(self, x: _T, /) -> int: ... + def extend(self, iterable: Iterable[_T], /) -> None: ... + def extendleft(self, iterable: Iterable[_T], /) -> None: ... + def insert(self, i: int, x: _T, /) -> None: ... + def index(self, x: _T, start: int = 0, stop: int = ..., /) -> int: ... + def pop(self) -> _T: ... # type: ignore[override] + def popleft(self) -> _T: ... + def remove(self, value: _T, /) -> None: ... + def rotate(self, n: int = 1, /) -> None: ... + def __copy__(self) -> Self: ... + def __len__(self) -> int: ... + # These methods of deque don't take slices, unlike MutableSequence, hence the type: ignores + def __getitem__(self, key: SupportsIndex, /) -> _T: ... # type: ignore[override] + def __setitem__(self, key: SupportsIndex, value: _T, /) -> None: ... # type: ignore[override] + def __delitem__(self, key: SupportsIndex, /) -> None: ... # type: ignore[override] + def __contains__(self, key: object, /) -> bool: ... + def __reduce__(self) -> tuple[type[Self], tuple[()], None, Iterator[_T]]: ... + def __iadd__(self, value: Iterable[_T], /) -> Self: ... + def __add__(self, value: Self, /) -> Self: ... + def __mul__(self, value: int, /) -> Self: ... + def __imul__(self, value: int, /) -> Self: ... + def __lt__(self, value: deque[_T], /) -> bool: ... + def __le__(self, value: deque[_T], /) -> bool: ... + def __gt__(self, value: deque[_T], /) -> bool: ... + def __ge__(self, value: deque[_T], /) -> bool: ... + def __eq__(self, value: object, /) -> bool: ... + if sys.version_info >= (3, 9): + def __class_getitem__(cls, item: Any, /) -> GenericAlias: ... + +class Counter(dict[_T, int], Generic[_T]): + @overload + def __init__(self, iterable: None = None, /) -> None: ... + @overload + def __init__(self: Counter[str], iterable: None = None, /, **kwargs: int) -> None: ... + @overload + def __init__(self, mapping: SupportsKeysAndGetItem[_T, int], /) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T], /) -> None: ... + def copy(self) -> Self: ... + def elements(self) -> Iterator[_T]: ... + def most_common(self, n: int | None = None) -> list[tuple[_T, int]]: ... + @classmethod + def fromkeys(cls, iterable: Any, v: int | None = None) -> NoReturn: ... # type: ignore[override] + @overload + def subtract(self, iterable: None = None, /) -> None: ... + @overload + def subtract(self, mapping: Mapping[_T, int], /) -> None: ... + @overload + def subtract(self, iterable: Iterable[_T], /) -> None: ... + # Unlike dict.update(), use Mapping instead of SupportsKeysAndGetItem for the first overload + # (source code does an `isinstance(other, Mapping)` check) + # + # The second overload is also deliberately different to dict.update() + # (if it were `Iterable[_T] | Iterable[tuple[_T, int]]`, + # the tuples would be added as keys, breaking type safety) + @overload # type: ignore[override] + def update(self, m: Mapping[_T, int], /, **kwargs: int) -> None: ... + @overload + def update(self, iterable: Iterable[_T], /, **kwargs: int) -> None: ... + @overload + def update(self, iterable: None = None, /, **kwargs: int) -> None: ... + def __missing__(self, key: _T) -> int: ... + def __delitem__(self, elem: object) -> None: ... + if sys.version_info >= (3, 10): + def __eq__(self, other: object) -> bool: ... + def __ne__(self, other: object) -> bool: ... + + def __add__(self, other: Counter[_S]) -> Counter[_T | _S]: ... + def __sub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __and__(self, other: Counter[_T]) -> Counter[_T]: ... + def __or__(self, other: Counter[_S]) -> Counter[_T | _S]: ... # type: ignore[override] + def __pos__(self) -> Counter[_T]: ... + def __neg__(self) -> Counter[_T]: ... + # several type: ignores because __iadd__ is supposedly incompatible with __add__, etc. + def __iadd__(self, other: SupportsItems[_T, int]) -> Self: ... # type: ignore[misc] + def __isub__(self, other: SupportsItems[_T, int]) -> Self: ... + def __iand__(self, other: SupportsItems[_T, int]) -> Self: ... + def __ior__(self, other: SupportsItems[_T, int]) -> Self: ... # type: ignore[override,misc] + if sys.version_info >= (3, 10): + def total(self) -> int: ... + def __le__(self, other: Counter[Any]) -> bool: ... + def __lt__(self, other: Counter[Any]) -> bool: ... + def __ge__(self, other: Counter[Any]) -> bool: ... + def __gt__(self, other: Counter[Any]) -> bool: ... + +# The pure-Python implementations of the "views" classes +# These are exposed at runtime in `collections/__init__.py` +class _OrderedDictKeysView(KeysView[_KT_co]): + def __reversed__(self) -> Iterator[_KT_co]: ... + +class _OrderedDictItemsView(ItemsView[_KT_co, _VT_co]): + def __reversed__(self) -> Iterator[tuple[_KT_co, _VT_co]]: ... + +class _OrderedDictValuesView(ValuesView[_VT_co]): + def __reversed__(self) -> Iterator[_VT_co]: ... + +# The C implementations of the "views" classes +# (At runtime, these are called `odict_keys`, `odict_items` and `odict_values`, +# but they are not exposed anywhere) +# pyright doesn't have a specific error code for subclassing error! +@final +class _odict_keys(dict_keys[_KT_co, _VT_co]): # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues] + def __reversed__(self) -> Iterator[_KT_co]: ... + +@final +class _odict_items(dict_items[_KT_co, _VT_co]): # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues] + def __reversed__(self) -> Iterator[tuple[_KT_co, _VT_co]]: ... + +@final +class _odict_values(dict_values[_KT_co, _VT_co]): # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues] + def __reversed__(self) -> Iterator[_VT_co]: ... + +class OrderedDict(dict[_KT, _VT]): + def popitem(self, last: bool = True) -> tuple[_KT, _VT]: ... + def move_to_end(self, key: _KT, last: bool = True) -> None: ... + def copy(self) -> Self: ... + def __reversed__(self) -> Iterator[_KT]: ... + def keys(self) -> _odict_keys[_KT, _VT]: ... + def items(self) -> _odict_items[_KT, _VT]: ... + def values(self) -> _odict_values[_KT, _VT]: ... + # The signature of OrderedDict.fromkeys should be kept in line with `dict.fromkeys`, modulo positional-only differences. + # Like dict.fromkeys, its true signature is not expressible in the current type system. + # See #3800 & https://github.com/python/typing/issues/548#issuecomment-683336963. + @classmethod + @overload + def fromkeys(cls, iterable: Iterable[_T], value: None = None) -> OrderedDict[_T, Any | None]: ... + @classmethod + @overload + def fromkeys(cls, iterable: Iterable[_T], value: _S) -> OrderedDict[_T, _S]: ... + # Keep OrderedDict.setdefault in line with MutableMapping.setdefault, modulo positional-only differences. + @overload + def setdefault(self: OrderedDict[_KT, _T | None], key: _KT, default: None = None) -> _T | None: ... + @overload + def setdefault(self, key: _KT, default: _VT) -> _VT: ... + # Same as dict.pop, but accepts keyword arguments + @overload + def pop(self, key: _KT) -> _VT: ... + @overload + def pop(self, key: _KT, default: _VT) -> _VT: ... + @overload + def pop(self, key: _KT, default: _T) -> _VT | _T: ... + def __eq__(self, value: object, /) -> bool: ... + if sys.version_info >= (3, 9): + @overload + def __or__(self, value: dict[_KT, _VT], /) -> Self: ... + @overload + def __or__(self, value: dict[_T1, _T2], /) -> OrderedDict[_KT | _T1, _VT | _T2]: ... + @overload + def __ror__(self, value: dict[_KT, _VT], /) -> Self: ... + @overload + def __ror__(self, value: dict[_T1, _T2], /) -> OrderedDict[_KT | _T1, _VT | _T2]: ... # type: ignore[misc] + +class defaultdict(dict[_KT, _VT]): + default_factory: Callable[[], _VT] | None + @overload + def __init__(self) -> None: ... + @overload + def __init__( + self: defaultdict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + **kwargs: _VT, + ) -> None: ... # pyright: ignore[reportInvalidTypeVarUse] #11780 + @overload + def __init__(self, default_factory: Callable[[], _VT] | None, /) -> None: ... + @overload + def __init__( + self: defaultdict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + default_factory: Callable[[], _VT] | None, + /, + **kwargs: _VT, + ) -> None: ... + @overload + def __init__(self, default_factory: Callable[[], _VT] | None, map: SupportsKeysAndGetItem[_KT, _VT], /) -> None: ... + @overload + def __init__( + self: defaultdict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + default_factory: Callable[[], _VT] | None, + map: SupportsKeysAndGetItem[str, _VT], + /, + **kwargs: _VT, + ) -> None: ... + @overload + def __init__(self, default_factory: Callable[[], _VT] | None, iterable: Iterable[tuple[_KT, _VT]], /) -> None: ... + @overload + def __init__( + self: defaultdict[str, _VT], # pyright: ignore[reportInvalidTypeVarUse] #11780 + default_factory: Callable[[], _VT] | None, + iterable: Iterable[tuple[str, _VT]], + /, + **kwargs: _VT, + ) -> None: ... + def __missing__(self, key: _KT, /) -> _VT: ... + def __copy__(self) -> Self: ... + def copy(self) -> Self: ... + if sys.version_info >= (3, 9): + @overload + def __or__(self, value: dict[_KT, _VT], /) -> Self: ... + @overload + def __or__(self, value: dict[_T1, _T2], /) -> defaultdict[_KT | _T1, _VT | _T2]: ... + @overload + def __ror__(self, value: dict[_KT, _VT], /) -> Self: ... + @overload + def __ror__(self, value: dict[_T1, _T2], /) -> defaultdict[_KT | _T1, _VT | _T2]: ... # type: ignore[misc] + +class ChainMap(MutableMapping[_KT, _VT]): + maps: list[MutableMapping[_KT, _VT]] + def __init__(self, *maps: MutableMapping[_KT, _VT]) -> None: ... + def new_child(self, m: MutableMapping[_KT, _VT] | None = None) -> Self: ... + @property + def parents(self) -> Self: ... + def __setitem__(self, key: _KT, value: _VT) -> None: ... + def __delitem__(self, key: _KT) -> None: ... + def __getitem__(self, key: _KT) -> _VT: ... + def __iter__(self) -> Iterator[_KT]: ... + def __len__(self) -> int: ... + def __contains__(self, key: object) -> bool: ... + @overload + def get(self, key: _KT, default: None = None) -> _VT | None: ... + @overload + def get(self, key: _KT, default: _T) -> _VT | _T: ... + def __missing__(self, key: _KT) -> _VT: ... # undocumented + def __bool__(self) -> bool: ... + # Keep ChainMap.setdefault in line with MutableMapping.setdefault, modulo positional-only differences. + @overload + def setdefault(self: ChainMap[_KT, _T | None], key: _KT, default: None = None) -> _T | None: ... + @overload + def setdefault(self, key: _KT, default: _VT) -> _VT: ... + @overload + def pop(self, key: _KT) -> _VT: ... + @overload + def pop(self, key: _KT, default: _VT) -> _VT: ... + @overload + def pop(self, key: _KT, default: _T) -> _VT | _T: ... + def copy(self) -> Self: ... + __copy__ = copy + # All arguments to `fromkeys` are passed to `dict.fromkeys` at runtime, + # so the signature should be kept in line with `dict.fromkeys`. + @classmethod + @overload + def fromkeys(cls, iterable: Iterable[_T]) -> ChainMap[_T, Any | None]: ... + @classmethod + @overload + # Special-case None: the user probably wants to add non-None values later. + def fromkeys(cls, iterable: Iterable[_T], value: None, /) -> ChainMap[_T, Any | None]: ... + @classmethod + @overload + def fromkeys(cls, iterable: Iterable[_T], value: _S, /) -> ChainMap[_T, _S]: ... + if sys.version_info >= (3, 9): + @overload + def __or__(self, other: Mapping[_KT, _VT]) -> Self: ... + @overload + def __or__(self, other: Mapping[_T1, _T2]) -> ChainMap[_KT | _T1, _VT | _T2]: ... + @overload + def __ror__(self, other: Mapping[_KT, _VT]) -> Self: ... + @overload + def __ror__(self, other: Mapping[_T1, _T2]) -> ChainMap[_KT | _T1, _VT | _T2]: ... + # ChainMap.__ior__ should be kept roughly in line with MutableMapping.update() + @overload # type: ignore[misc] + def __ior__(self, other: SupportsKeysAndGetItem[_KT, _VT]) -> Self: ... + @overload + def __ior__(self, other: Iterable[tuple[_KT, _VT]]) -> Self: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/abc.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/abc.pyi new file mode 100644 index 00000000..fbceeba0 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/collections/abc.pyi @@ -0,0 +1,3 @@ +from _collections_abc import * + +# from _collections_abc import __all__ as __all__ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_modes.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_modes.pyi new file mode 100644 index 00000000..9200e83b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_modes.pyi @@ -0,0 +1,83 @@ +""" +Type aliases for the Micropython specific modes used in the `open` function. + +References: + - https://docs.micropython.org/en/latest/library/io.html#conceptual-hierarchy + - https://docs.python.org/3/library/io.html +""" + +# MIT License +# Howard C Lovatt, 2020 onwards. +# Jos Verlinde, 2025 onwards. + +from typing import Literal + +from typing_extensions import TypeAlias + +_OpenTextModeUpdating: TypeAlias = Literal[ + "r+", + "+r", + "rt+", + "r+t", + "+rt", + "tr+", + "t+r", + "+tr", + "w+", + "+w", + "wt+", + "w+t", + "+wt", + "tw+", + "t+w", + "+tw", + "a+", + "+a", + "at+", + "a+t", + "+at", + "ta+", + "t+a", + "+ta", + "x+", + "+x", + "xt+", + "x+t", + "+xt", + "tx+", + "t+x", + "+tx", +] +_OpenTextModeWriting: TypeAlias = Literal["w", "wt", "tw", "a", "at", "ta", "x", "xt", "tx"] +_OpenTextModeReading: TypeAlias = Literal["r", "rt", "tr", "U", "rU", "Ur", "rtU", "rUt", "Urt", "trU", "tUr", "Utr"] +_OpenTextMode: TypeAlias = _OpenTextModeUpdating | _OpenTextModeWriting | _OpenTextModeReading + +_OpenBinaryModeUpdating: TypeAlias = Literal[ + "rb+", + "r+b", + "+rb", + "br+", + "b+r", + "+br", + "wb+", + "w+b", + "+wb", + "bw+", + "b+w", + "+bw", + "ab+", + "a+b", + "+ab", + "ba+", + "b+a", + "+ba", + "xb+", + "x+b", + "+xb", + "bx+", + "b+x", + "+bx", +] +_OpenBinaryModeWriting: TypeAlias = Literal["wb", "bw", "ab", "ba", "xb", "bx"] +_OpenBinaryModeReading: TypeAlias = Literal["rb", "br", "rbU", "rUb", "Urb", "brU", "bUr", "Ubr"] +_OpenBinaryMode: TypeAlias = _OpenBinaryModeUpdating | _OpenBinaryModeReading | _OpenBinaryModeWriting diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_mp.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_mp.pyi new file mode 100644 index 00000000..68f81135 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/io_mp.pyi @@ -0,0 +1,182 @@ +# ------------------ +# from typeshed/stdlib/io.pyi + +import abc +from _io import ( + BytesIO as BytesIO, +) +from _io import ( + FileIO as FileIO, +) +from _io import ( + IncrementalNewlineDecoder as IncrementalNewlineDecoder, +) +from _io import ( + StringIO as StringIO, +) +from _io import ( + TextIOWrapper as TextIOWrapper, +) +from _io import ( + _BufferedIOBase, + _IOBase, + _RawIOBase, + _TextIOBase, +) +from _io import ( + open as open, +) +from typing import TypeVar + +from .pathlike import PathLike + +class IOBase(_IOBase, metaclass=abc.ABCMeta): ... + +# Howard +_OpenFile = TypeVar("_OpenFile", str, bytes, PathLike[str], PathLike[bytes], int) + +# class TextIOWrapper(IOBase): +# """ +# Str stream from a file. +# """ + +# def __init__(self, name: _OpenFile, mode: str = ..., /, **kwargs): +# """ +# This is type of a file open in text mode, e.g. using ``open(name, "rt")``. +# You should not instantiate this class directly. +# """ + +# IO Base alternative from Howard + +# @runtime_checkable +# class IOBase_2(Protocol[AnyStr]): +# """A `Protocol` (structurally typed) for an IOStream.""" + +# __slots__ = () +# def __enter__(self) -> Self: +# """ +# Called on entry to a `with` block. +# The `with` statement will bind this method’s return value to the target(s) specified in the `as` clause +# of the statement, if any. +# """ + +# def __exit__( +# self, +# exc_type: type[BaseException] | None, +# exc_value: BaseException | None, +# # traceback: TracebackType | None, +# ) -> bool | None: +# """ +# Called on exit of a `with` block. +# The parameters describe the exception that caused the context to be exited. +# If the context was exited without an exception, all three arguments will be `None`. + +# If an exception is supplied, and the method wishes to suppress the exception +# (i.e., prevent it from being propagated), it should return a true value. +# Otherwise, the exception will be processed normally upon exit from this method. + +# *Note* that `__exit__()` methods should not re-raise the passed-in exception; +# this is the caller’s responsibility. +# """ + +# def __next__(self) -> AnyStr: +# """ +# Next string. +# """ + +# def __iter__(self) -> Self: +# """ +# Start new iteration. +# """ + +# def close(self) -> None: +# """ +# Flushes the write buffers and closes the IO stream; best not called directly, use a `with` block instead. +# Calling `f.close()` without using a `with` block might result in content not being completely written to the +# disk, even if the program exits successfully. +# A closed file cannot be read or written any more. +# Any operation which requires that the file be open will raise a `ValueError` after the file has been closed. +# Calling `f.close()` more than once is allowed. +# """ + +# def flush(self) -> None: +# """ +# Flushes the write buffers of the IO stream. +# `flush()` does not necessarily write the file’s data to disk. +# Use `f.flush()` followed by `os.sync()` to ensure this behavior. + +# This method does nothing for read-only and non-blocking streams. +# """ + +# def read(self, size: int | None = -1) -> AnyStr | None: +# """ +# Read up to `size` bytes from the object and return them as a `str` (text file) or `bytes` (binary file). +# As a convenience, if `size` is unspecified or -1, all bytes until EOF are returned. +# Otherwise, only one system call is ever made. +# Fewer than `size` bytes may be returned if the operating system call returns fewer than `size` bytes. + +# If 0 bytes are returned, and `size` was not 0, this indicates end of file. +# If `self` is in non-blocking mode and no bytes are available, `None` is returned. +# """ + +# def readinto(self, b: AnyWritableBuf) -> int | None: +# """ +# Read bytes into a pre-allocated, writable bytes-like object b, and return the number of bytes read. +# For example, b might be a bytearray. + +# If `self` is in non-blocking mode and no bytes are available, `None` is returned. +# """ + +# def readline(self, size: int = -1) -> AnyStr: +# """ +# Read and return, as a `str` (text file) or `bytes` (binary file), one line from the stream. +# If size is specified, at most size bytes will be read. + +# The line terminator is always ``b''`` for binary files; +# for text files, the newline argument to `open()` can be used to select the line terminator(s) recognized. +# """ + +# def readlines(self, hint: int | None = -1) -> list[AnyStr]: +# """ +# Read and return a list of lines, as a `list[str]` (text file) or `list[bytes]` (binary file), from the stream. +# `hint` can be specified to control the number of lines read: +# no more lines will be read if the total size (in bytes/characters) of all lines so far exceeds `hint`. + +# `hint` values of 0 or less, as well as `None`, are treated as no hint. +# The line terminator is always ``b''`` for binary files; +# for text files, the newline argument to `open()` can be used to select the line terminator(s) recognized. + +# *Note* that it’s already possible to iterate on file objects using `for line in file: ...` +# without calling `file.readlines()`. +# """ + +# def write(self, b: AnyReadableBuf) -> int | None: +# """ +# Write the given bytes-like object, `b`, to the underlying raw stream, and return the number of bytes written. +# This can be less than the length of `b` in bytes, depending on specifics of the underlying raw stream, +# and especially if it is in non-blocking mode. +# `None` is returned if the raw stream is set not to block and no single byte could be readily written to it. + +# The caller may release or mutate `b` after this method returns, +# so the implementation only access `b` during the method call. +# """ + +# def seek(self, offset: int, whence: int = 0) -> int: +# """ +# Change the stream position to the given byte `offset`. +# `offset` is interpreted relative to the position indicated by `whence`. +# The default value for whence is 0. + +# Values for whence are: + +# * 0 – start of the stream (the default); offset should be zero or positive. +# * 1 – current stream position; offset may be negative. +# * 2 – end of the stream; offset is usually negative. + +# Returns the new absolute position. +# """ + +# def tell(self) -> int: +# """ +# Return the current stream position. +# """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/pathlike.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/pathlike.pyi new file mode 100644 index 00000000..3edb9f43 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/pathlike.pyi @@ -0,0 +1,17 @@ +""" +pathlike is used in multiple stdlib stubs - but does not exists in MicroPython +copied from typeshed/stdlib/os.pyi as os.pyi cannot import from a module with the same name +""" + +import abc +from typing import Protocol, runtime_checkable + +from _typeshed import AnyStr_co + +# mypy and pyright object to this being both ABC and Protocol. +# At runtime it inherits from ABC and is not a Protocol, but it will be +# on the allowlist for use as a Protocol starting in 3.14. +@runtime_checkable +class PathLike(ABC, Protocol[AnyStr_co]): # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues] + @abc.abstractmethod + def __fspath__(self) -> AnyStr_co: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/subscriptable.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/subscriptable.pyi new file mode 100644 index 00000000..e58489e4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_mpy_shed/subscriptable.pyi @@ -0,0 +1,17 @@ +from typing import Protocol, TypeVar, runtime_checkable + +_T_Co = TypeVar("_T_Co", covariant=True) + +@runtime_checkable +class Subscriptable(Protocol[_T_Co]): + """A `Protocol` (structurally typed) for an object that is subscriptable and of finite length.""" + + __slots__ = () + def __len__(self) -> int: + """Number of elements, normally called via `len(x)` where `x` is an object that implements this protocol.""" + + def __getitem__(self, index: int) -> _T_Co: + """ + Element at the given index, + normally called via `x[index]` where `x` is an object that implements this protocol. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/_thread/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_thread/__init__.pyi new file mode 100644 index 00000000..f30beb45 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/_thread/__init__.pyi @@ -0,0 +1,16 @@ +""" +Multithreading support. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/_thread.html + +CPython module: :mod:`python:_thread` https://docs.python.org/3/library/_thread.html . + +This module implements multithreading support. + +This module is highly experimental and its API is not yet fully settled +and not yet described in this documentation. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/_thread.rst +from __future__ import annotations diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/array/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/array/__init__.pyi new file mode 100644 index 00000000..d58122f8 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/array/__init__.pyi @@ -0,0 +1,166 @@ +""" +Efficient arrays of numeric data. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/array.html + +CPython module: :mod:`python:array` https://docs.python.org/3/library/array.html . + +Supported format codes: ``b``, ``B``, ``h``, ``H``, ``i``, ``I``, ``l``, +``L``, ``q``, ``Q``, ``f``, ``d`` (the latter 2 depending on the +floating-point support). +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/array.rst +from __future__ import annotations + +from collections.abc import MutableSequence, Sequence +from typing import Any, Generic, overload + +from typing_extensions import TypeVar + +_T = TypeVar("_T", int, float, str) + +class array(MutableSequence[_T], Generic[_T]): + """ + |see_cpython_module| :mod:`python:array`. + + Supported format codes: ``b``, ``B``, ``h``, ``H``, ``i``, ``I``, ``l``, + ``L``, ``q``, ``Q``, ``f``, ``d`` (the latter 2 depending on the + floating-point support). + + +-----------+--------------------+-------------------+-----------------------+ + | Type code | C Type | Python Type | Minimum size in bytes | + +===========+====================+===================+=======================+ + | ``'b'`` | signed char | int | 1 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'B'`` | unsigned char | int | 1 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'h'`` | signed short | int | 2 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'H'`` | unsigned short | int | 2 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'i'`` | signed int | int | 2 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'I'`` | unsigned int | int | 2 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'l'`` | signed long | int | 4 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'L'`` | unsigned long | int | 4 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'q'`` | signed long long | int | 8 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'Q'`` | unsigned long long | int | 8 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'f'`` | float | float | 4 | + +-----------+--------------------+-------------------+-----------------------+ + | ``'d'`` | double | float | 8 | + +-----------+--------------------+-------------------+-----------------------+ + """ + + def __init__(self, typecode: str, iterable: Sequence[Any] = ..., /) -> None: + """ + Create array with elements of given type. Initial contents of the + array are given by *iterable*. If it is not provided, an empty + array is created. + """ + + def append(self, val: Any, /) -> None: + """ + Append new element *val* to the end of array, growing it. + """ + ... + + def extend(self, iterable: Sequence[Any], /) -> None: + """ + Append new elements as contained in *iterable* to the end of + array, growing it. + """ + ... + + @overload + def __getitem__(self, index: int) -> _T: + """ + Indexed read of the array, called as ``a[index]`` (where ``a`` is an ``array``). + Returns a value if *index* is an ``int`` and an ``array`` if *index* is a slice. + Negative indices count from the end and ``IndexError`` is thrown if the index is + out of range. + + **Note:** ``__getitem__`` cannot be called directly (``a.__getitem__(index)`` fails) and + is not present in ``__dict__``, however ``a[index]`` does work. + """ + + @overload + def __getitem__(self, sl: slice) -> array[_T]: + """ + Indexed read of the array, called as ``a[index]`` (where ``a`` is an ``array``). + Returns a value if *index* is an ``int`` and an ``array`` if *index* is a slice. + Negative indices count from the end and ``IndexError`` is thrown if the index is + out of range. + + **Note:** ``__getitem__`` cannot be called directly (``a.__getitem__(index)`` fails) and + is not present in ``__dict__``, however ``a[index]`` does work. + """ + + @overload + def __setitem__(self, index: int, value: _T) -> None: + """ + Indexed write into the array, called as ``a[index] = value`` (where ``a`` is an ``array``). + ``value`` is a single value if *index* is an ``int`` and an ``array`` if *index* is a slice. + Negative indices count from the end and ``IndexError`` is thrown if the index is out of range. + + **Note:** ``__setitem__`` cannot be called directly (``a.__setitem__(index, value)`` fails) and + is not present in ``__dict__``, however ``a[index] = value`` does work. + """ + + @overload + def __setitem__(self, sl: slice, values: array[_T]) -> None: + """ + Indexed write into the array, called as ``a[index] = value`` (where ``a`` is an ``array``). + ``value`` is a single value if *index* is an ``int`` and an ``array`` if *index* is a slice. + Negative indices count from the end and ``IndexError`` is thrown if the index is out of range. + + **Note:** ``__setitem__`` cannot be called directly (``a.__setitem__(index, value)`` fails) and + is not present in ``__dict__``, however ``a[index] = value`` does work. + """ + + def __len__(self) -> int: + """ + Returns the number of items in the array, called as ``len(a)`` (where ``a`` is an ``array``). + + **Note:** ``__len__`` cannot be called directly (``a.__len__()`` fails) and the + method is not present in ``__dict__``, however ``len(a)`` does work. + """ + ... + + def __add__(self, other: array[_T]) -> array[_T]: + """ + Return a new ``array`` that is the concatenation of the array with *other*, called as + ``a + other`` (where ``a`` and *other* are both ``arrays``). + + **Note:** ``__add__`` cannot be called directly (``a.__add__(other)`` fails) and + is not present in ``__dict__``, however ``a + other`` does work. + """ + ... + + def __iadd__(self, other: array[_T]) -> None: + """ + Concatenates the array with *other* in-place, called as ``a += other`` (where ``a`` and *other* + are both ``arrays``). Equivalent to ``extend(other)``. + + **Note:** ``__iadd__`` cannot be called directly (``a.__iadd__(other)`` fails) and + is not present in ``__dict__``, however ``a += other`` does work. + """ + ... + + def __repr__(self) -> str: + """ + Returns the string representation of the array, called as ``str(a)`` or ``repr(a)``` + (where ``a`` is an ``array``). Returns the string ``"array(, [])"``, + where ```` is the type code letter for the array and ```` is a comma + separated list of the elements of the array. + + **Note:** ``__repr__`` cannot be called directly (``a.__repr__()`` fails) and + is not present in ``__dict__``, however ``str(a)`` and ``repr(a)`` both work. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/__init__.pyi new file mode 100644 index 00000000..ae061fcf --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/__init__.pyi @@ -0,0 +1,45 @@ +""" +Asynchronous I/O scheduler for writing concurrent code. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/asyncio.html + +CPython module: +`asyncio ` + +Example:: + + import asyncio + + async def blink(led, period_ms): + while True: + led.on() + await asyncio.sleep_ms(5) + led.off() + await asyncio.sleep_ms(period_ms) + + async def main(led1, led2): + asyncio.create_task(blink(led1, 700)) + asyncio.create_task(blink(led2, 400)) + await asyncio.sleep_ms(10_000) + + # Running on a pyboard + from pyb import LED + asyncio.run(main(LED(1), LED(2))) + + # Running on a generic board + from machine import Pin + asyncio.run(main(Pin(1), Pin(2))) + +""" + +from __future__ import annotations + +from funcs import wait_for as wait_for, wait_for_ms as wait_for_ms, gather as gather +from event import Event as Event, ThreadSafeFlag as ThreadSafeFlag +from lock import Lock as Lock +from stream import ( + open_connection as open_connection, + start_server as start_server, + StreamReader as StreamReader, + StreamWriter as StreamWriter, +) diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/core.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/core.pyi new file mode 100644 index 00000000..0cfd7d71 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/core.pyi @@ -0,0 +1,169 @@ +""" +Asynchronous I/O scheduler for writing concurrent code. + +Core functions +""" + +from __future__ import annotations + +from typing import Any, Coroutine + +from _typeshed import Incomplete +from typing_extensions import Awaitable, TypeAlias, TypeVar # noqa: UP035 + +from .stream import Stream +from .task import Task as Task +from .task import TaskQueue as TaskQueue + +_T = TypeVar("_T") +_C: TypeAlias = Coroutine[Any, None, _T] | Awaitable[_T] +# StreamReader: TypeAlias = Stream +# StreamWriter: TypeAlias = Stream + +class CancelledError(BaseException): ... +class TimeoutError(Exception): ... + +_exc_context: Incomplete + +class SingletonGenerator: + state: Incomplete + exc: Incomplete + def __init__(self) -> None: ... + def __iter__(self): ... + def __next__(self) -> None: ... + +def sleep_ms(t, sgen=...) -> Coroutine[Incomplete, Any, Any]: + """ + Sleep for *t* milliseconds. + + This is a coroutine, and a MicroPython extension. + """ + ... + +def sleep(t) -> Coroutine[Incomplete, Any, Any]: + """ + Sleep for *t* seconds (can be a float). + + This is a coroutine. + """ + ... + +class IOQueue: + poller: Incomplete + map: Incomplete + def __init__(self) -> None: ... + def _enqueue(self, s, idx) -> None: ... + def _dequeue(self, s) -> None: ... + def queue_read(self, s) -> None: ... + def queue_write(self, s) -> None: ... + def remove(self, task) -> None: ... + def wait_io_event(self, dt) -> None: ... + +def _promote_to_task(aw): ... +def create_task(coro) -> Task: + """ + Create a new task from the given coroutine and schedule it to run. + + Returns the corresponding `Task` object. + """ + ... + +def run_until_complete(main_task: Incomplete | None = None): ... +def run(coro) -> _T: + """ + Create a new task from the given coroutine and run it until it completes. + + Returns the value returned by *coro*. + """ + ... + +async def _stopper() -> None: ... + +cur_task: Incomplete +_stop_task: Incomplete + +class Loop: + """ + This represents the object which schedules and runs tasks. It cannot be + created, use `get_event_loop` instead. + """ + + _exc_handler: Incomplete + def create_task(coro) -> Task: + """ + Create a task from the given *coro* and return the new `Task` object. + """ + ... + + def run_forever(self) -> None: + """ + Run the event loop until `stop()` is called. + """ + ... + + def run_until_complete(aw) -> None: + """ + Run the given *awaitable* until it completes. If *awaitable* is not a task + then it will be promoted to one. + """ + ... + + def stop(self) -> None: + """ + Stop the event loop. + """ + ... + + def close(self) -> None: + """ + Close the event loop. + """ + ... + + def set_exception_handler(handler) -> None: + """ + Set the exception handler to call when a Task raises an exception that is not + caught. The *handler* should accept two arguments: ``(loop, context)``. + """ + ... + + def get_exception_handler(self) -> None: + """ + Get the current exception handler. Returns the handler, or ``None`` if no + custom handler is set. + """ + ... + + def default_exception_handler(loop, context) -> None: + """ + The default exception handler that is called. + """ + ... + + def call_exception_handler(context) -> None: + """ + Call the current exception handler. The argument *context* is passed through and + is a dictionary containing keys: ``'message'``, ``'exception'``, ``'future'``. + """ + ... + +def get_event_loop(runq_len: int = 0, waitq_len: int = 0) -> Loop: + """ + Return the event loop used to schedule and run tasks. See `Loop`. + """ + ... + +def current_task() -> Task: + """ + Return the `Task` object associated with the currently running task. + """ + ... + +def new_event_loop() -> Loop: + """ + Reset the event loop and return it. + + Note: since MicroPython only has a single event loop this function just + resets the loop's state, it does not create a new one. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/event.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/event.pyi new file mode 100644 index 00000000..b6b944a9 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/event.pyi @@ -0,0 +1,102 @@ +""" +Asynchronous I/O scheduler for writing concurrent code. + +Eventfunctions +""" + +from __future__ import annotations + +from collections.abc import Generator +from typing import Any, Coroutine + +from _typeshed import Incomplete +from typing_extensions import Awaitable, TypeAlias, TypeVar # noqa: UP035 + +from . import core as core + +_T = TypeVar("_T") +_C: TypeAlias = Coroutine[Any, None, _T] | Awaitable[_T] + +class Event: + """ + class Event + ----------- + """ + + state: bool + waiting: Incomplete + def __init__(self) -> None: + """ + Create a new event which can be used to synchronise tasks. Events start + in the cleared state. + """ + + def is_set(self) -> bool: + """ + Returns ``True`` if the event is set, ``False`` otherwise. + """ + ... + + def set(self) -> None: + """ + Set the event. Any tasks waiting on the event will be scheduled to run. + + Note: This must be called from within a task. It is not safe to call this + from an IRQ, scheduler callback, or other thread. See `ThreadSafeFlag`. + """ + ... + + def clear(self) -> None: + """ + Clear the event. + """ + ... + + def wait(self) -> Generator[None, None, Incomplete]: + """ + Wait for the event to be set. If the event is already set then it returns + immediately. + + This is a coroutine. + """ + ... + +class ThreadSafeFlag: + """ + class ThreadSafeFlag + -------------------- + """ + + state: int + def __init__(self) -> None: + """ + Create a new flag which can be used to synchronise a task with code running + outside the asyncio loop, such as other threads, IRQs, or scheduler + callbacks. Flags start in the cleared state. + """ + + def ioctl(self, req, flags): ... + def set(self) -> None: + """ + Set the flag. If there is a task waiting on the flag, it will be scheduled + to run. + """ + ... + + def clear(self) -> None: + """ + Clear the flag. This may be used to ensure that a possibly previously-set + flag is clear before waiting for it. + """ + ... + + async def wait(self) -> Generator[Incomplete]: + """ + Wait for the flag to be set. If the flag is already set then it returns + immediately. The flag is automatically reset upon return from ``wait``. + + A flag may only be waited on by a single task at a time. + + This is a coroutine. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/funcs.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/funcs.pyi new file mode 100644 index 00000000..d36e21b0 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/funcs.pyi @@ -0,0 +1,57 @@ +""" +Asynchronous I/O scheduler for writing concurrent code. + +Common Functions +""" + +from __future__ import annotations + +from collections.abc import Generator +from typing import Any, Coroutine + +from _typeshed import Incomplete + +# from typing_extensions import Awaitable, TypeAlias, TypeVar + +# from . import core as core + +async def _run(waiter, aw) -> None: ... +async def wait_for(aw, timeout, sleep=...) -> Coroutine[Incomplete, Any, Any]: + """ + Wait for the *awaitable* to complete, but cancel it if it takes longer + than *timeout* seconds. If *awaitable* is not a task then a task will be + created from it. + + If a timeout occurs, it cancels the task and raises ``asyncio.TimeoutError``: + this should be trapped by the caller. The task receives + ``asyncio.CancelledError`` which may be ignored or trapped using ``try...except`` + or ``try...finally`` to run cleanup code. + + Returns the return value of *awaitable*. + + This is a coroutine. + """ + ... + +def wait_for_ms(aw, timeout) -> Coroutine[Incomplete, Any, Any]: + """ + Similar to `wait_for` but *timeout* is an integer in milliseconds. + + This is a coroutine, and a MicroPython extension. + """ + ... + +class _Remove: + @staticmethod + def remove(t) -> None: ... + +def gather(*aws, return_exceptions: bool = False) -> Generator[None, None, Incomplete]: + """ + Run all *awaitables* concurrently. Any *awaitables* that are not tasks are + promoted to tasks. + + Returns a list of return values of all *awaitables*. + + This is a coroutine. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/lock.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/lock.pyi new file mode 100644 index 00000000..803d2c28 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/lock.pyi @@ -0,0 +1,60 @@ +""" +Asynchronous I/O scheduler for writing concurrent code. + +Lock functions +""" + +from __future__ import annotations + +from abc import ABC +from collections.abc import Generator + +from _typeshed import Incomplete +from typing_extensions import Awaitable # noqa: UP035 + +# from . import core as core + +# _T = TypeVar("_T") +# _C: TypeAlias = Coroutine[Any, None, _T] | Awaitable[_T] + +class Lock(Awaitable[None], ABC): + """ + class Lock + ---------- + """ + + state: int + waiting: Incomplete + def __init__(self) -> None: + """ + Create a new lock which can be used to coordinate tasks. Locks start in + the unlocked state. + + In addition to the methods below, locks can be used in an ``async with`` statement. + """ + + def locked(self) -> bool: + """ + Returns ``True`` if the lock is locked, otherwise ``False``. + """ + ... + + def release(self) -> None: + """ + Release the lock. If any tasks are waiting on the lock then the next one in the + queue is scheduled to run and the lock remains locked. Otherwise, no tasks are + waiting an the lock becomes unlocked. + """ + ... + + def acquire(self) -> Generator[None, None, Incomplete]: + """ + Wait for the lock to be in the unlocked state and then lock it in an atomic + way. Only one task can acquire the lock at any one time. + + This is a coroutine. + """ + ... + + async def __aenter__(self): ... + async def __aexit__(self, exc_type, exc, tb): ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/stream.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/stream.pyi new file mode 100644 index 00000000..bff2e905 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/stream.pyi @@ -0,0 +1,170 @@ +""" +Asynchronous I/O scheduler for writing concurrent code. + +Stream functions +""" + +from __future__ import annotations + +from collections.abc import Generator +from typing import Any, Coroutine + +from _typeshed import Incomplete +from typing_extensions import TypeAlias + +# from . import core as core +# _T = TypeVar("_T") +# _C: TypeAlias = Coroutine[Any, None, _T] | Awaitable[_T] + +StreamReader: TypeAlias = Stream +StreamWriter: TypeAlias = Stream + +class Stream: + """ + This represents a TCP stream connection. To minimise code this class implements + both a reader and a writer, and both ``StreamReader`` and ``StreamWriter`` alias to + this class. + """ + + s: Incomplete + e: Incomplete + out_buf: bytes + def __init__(self, s, e={}) -> None: + """ + This represents a TCP stream connection. To minimise code this class implements + both a reader and a writer, and both ``StreamReader`` and ``StreamWriter`` alias to + this class. + """ + + def get_extra_info(self, v) -> str: + """ + Get extra information about the stream, given by *v*. The valid values for *v* are: + ``peername``. + """ + ... + + def close(self) -> None: + """ + Close the stream. + """ + ... + + async def wait_closed(self) -> None: + """ + Wait for the stream to close. + + This is a coroutine. + """ + ... + + def read(self, n: int = -1) -> Generator[Incomplete, None, Incomplete]: + """ + Read up to *n* bytes and return them. If *n* is not provided or -1 then read all + bytes until EOF. The returned value will be an empty bytes object if EOF is + encountered before any bytes are read. + + This is a coroutine. + """ + ... + + def readinto(self, buf) -> Generator[Incomplete, None, Incomplete]: + """ + Read up to n bytes into *buf* with n being equal to the length of *buf*. + + Return the number of bytes read into *buf*. + + This is a coroutine, and a MicroPython extension. + """ + ... + + def readexactly(self, n) -> Generator[Incomplete, None, Incomplete]: + """ + Read exactly *n* bytes and return them as a bytes object. + + Raises an ``EOFError`` exception if the stream ends before reading *n* bytes. + + This is a coroutine. + """ + ... + + def readline(self) -> Generator[Incomplete, None, Incomplete]: + """ + Read a line and return it. + + This is a coroutine. + """ + ... + + def write(self, buf) -> None: + """ + Accumulated *buf* to the output buffer. The data is only flushed when + `Stream.drain` is called. It is recommended to call `Stream.drain` immediately + after calling this function. + """ + ... + + def drain(self) -> Generator[Incomplete, Incomplete, Incomplete]: + """ + Drain (write) all buffered output data out to the stream. + + This is a coroutine. + """ + ... + +def open_connection( + host, port, ssl: Incomplete | None = None, server_hostname: Incomplete | None = None +) -> Generator[Incomplete, None, Incomplete]: + """ + Open a TCP connection to the given *host* and *port*. The *host* address will be + resolved using `socket.getaddrinfo`, which is currently a blocking call. + If *ssl* is a `ssl.SSLContext` object, this context is used to create the transport; + if *ssl* is ``True``, a default context is used. + + Returns a pair of streams: a reader and a writer stream. + Will raise a socket-specific ``OSError`` if the host could not be resolved or if + the connection could not be made. + + This is a coroutine. + """ + ... + +class Server: + """ + This represents the server class returned from `start_server`. It can be used + in an ``async with`` statement to close the server upon exit. + """ + + async def __aenter__(self): ... + async def __aexit__(self, exc_type, exc, tb) -> None: ... + state: bool + def close(self) -> None: + """ + Close the server. + """ + ... + + async def wait_closed(self) -> None: + """ + Wait for the server to close. + + This is a coroutine. + """ + ... + + async def _serve(self, s, cb, ssl) -> Generator[Incomplete]: ... + +async def start_server(cb, host, port, backlog: int = 5, ssl: Incomplete | None = None) -> Coroutine[Server, Any, Any]: + """ + Start a TCP server on the given *host* and *port*. The *callback* will be + called with incoming, accepted connections, and be passed 2 arguments: reader + and writer streams for the connection. + + If *ssl* is a `ssl.SSLContext` object, this context is used to create the transport. + + Returns a `Server` object. + + This is a coroutine. + """ + ... + +async def stream_awrite(self, buf, off: int = 0, sz: int = -1) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/task.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/task.pyi new file mode 100644 index 00000000..1b58cf82 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/asyncio/task.pyi @@ -0,0 +1,17 @@ +# copied from: +# Module: '_asyncio' on micropython-v1.24.1-rp2-RPI_PICO_W +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO_W', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} + +from __future__ import annotations + +from _typeshed import Incomplete + +class TaskQueue: + def __init__(self, *argv, **kwargs) -> None: ... + def push(self, *args, **kwargs) -> Incomplete: ... + def peek(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + +class Task: + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/binascii/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/binascii/__init__.pyi new file mode 100644 index 00000000..d603e81c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/binascii/__init__.pyi @@ -0,0 +1,47 @@ +""" +Binary/ASCII conversions. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/binascii.html + +CPython module: :mod:`python:binascii` https://docs.python.org/3/library/binascii.html . + +This module implements conversions between binary data and various +encodings of it in ASCII form (in both directions). +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/binascii.rst +from __future__ import annotations + +def hexlify(data: bytes, sep: str | bytes = ..., /) -> bytes: + """ + Convert the bytes in the *data* object to a hexadecimal representation. + Returns a bytes object. + + If the additional argument *sep* is supplied it is used as a separator + between hexadecimal values. + """ + ... + +def unhexlify(data: str | bytes, /) -> bytes: + """ + Convert hexadecimal data to binary representation. Returns bytes string. + (i.e. inverse of hexlify) + """ + ... + +def a2b_base64(data: str | bytes, /) -> bytes: + """ + Decode base64-encoded data, ignoring invalid characters in the input. + Conforms to `RFC 2045 s.6.8 `_. + Returns a bytes object. + """ + ... + +def b2a_base64(data: bytes, /) -> bytes: + """ + Encode binary data in base64 format, as in `RFC 3548 + `_. Returns the encoded data + followed by a newline character if newline is true, as a bytes object. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/bluetooth/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/bluetooth/__init__.pyi new file mode 100644 index 00000000..31274b7c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/bluetooth/__init__.pyi @@ -0,0 +1,982 @@ +""" +Low-level Bluetooth radio functionality. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/bluetooth.html + +This module provides an interface to a Bluetooth controller on a board. +Currently this supports Bluetooth Low Energy (BLE) in Central, Peripheral, +Broadcaster, and Observer roles, as well as GATT Server and Client and L2CAP +connection-oriented-channels. A device may operate in multiple roles +concurrently. Pairing (and bonding) is supported on some ports. + +This API is intended to match the low-level Bluetooth protocol and provide +building-blocks for higher-level abstractions such as specific device types. + +``Note:`` For most applications, we recommend using the higher-level + `aioble library `_. + +``Note:`` This module is still under development and its classes, functions, + methods and constants are subject to change. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/bluetooth.rst +from __future__ import annotations + +from typing import Any, Callable, overload + +from _mpy_shed import _IRQ, AnyReadableBuf, AnyWritableBuf +from typing_extensions import TypeAlias + +_Flag: TypeAlias = int +_Descriptor: TypeAlias = tuple["UUID", _Flag] +_Characteristic: TypeAlias = tuple["UUID", _Flag] | tuple["UUID", _Flag, tuple[_Descriptor, ...]] +_Service: TypeAlias = tuple["UUID", tuple[_Characteristic, ...]] + +class BLE: + """ + class BLE + --------- + """ + + def __init__(self) -> None: + """ + Returns the singleton BLE object. + """ + + @overload + def active(self) -> bool: + """ + Optionally changes the active state of the BLE radio, and returns the + current state. + + The radio must be made active before using any other methods on this class. + """ + + @overload + def active(self, active: bool, /) -> None: + """ + Optionally changes the active state of the BLE radio, and returns the + current state. + + The radio must be made active before using any other methods on this class. + """ + + @overload + def active(self) -> bool: + """ + Optionally changes the active state of the BLE radio, and returns the + current state. + + The radio must be made active before using any other methods on this class. + """ + + @overload + def active(self, active: bool, /) -> None: + """ + Optionally changes the active state of the BLE radio, and returns the + current state. + + The radio must be made active before using any other methods on this class. + """ + + @overload + def config(self, param: str, /) -> Any: + """ + Get or set configuration values of the BLE interface. To get a value the + parameter name should be quoted as a string, and just one parameter is + queried at a time. To set values use the keyword syntax, and one or more + parameter can be set at a time. + + Currently supported values are: + + - ``'mac'``: The current address in use, depending on the current address mode. + This returns a tuple of ``(addr_type, addr)``. + + See :meth:`gatts_write ` for details about address type. + + This may only be queried while the interface is currently active. + + - ``'addr_mode'``: Sets the address mode. Values can be: + + * 0x00 - PUBLIC - Use the controller's public address. + * 0x01 - RANDOM - Use a generated static address. + * 0x02 - RPA - Use resolvable private addresses. + * 0x03 - NRPA - Use non-resolvable private addresses. + + By default the interface mode will use a PUBLIC address if available, otherwise + it will use a RANDOM address. + + - ``'gap_name'``: Get/set the GAP device name used by service 0x1800, + characteristic 0x2a00. This can be set at any time and changed multiple + times. + + - ``'rxbuf'``: Get/set the size in bytes of the internal buffer used to store + incoming events. This buffer is global to the entire BLE driver and so + handles incoming data for all events, including all characteristics. + Increasing this allows better handling of bursty incoming data (for + example scan results) and the ability to receive larger characteristic values. + + - ``'mtu'``: Get/set the MTU that will be used during a ATT MTU exchange. The + resulting MTU will be the minimum of this and the remote device's MTU. + ATT MTU exchange will not happen automatically (unless the remote device initiates + it), and must be manually initiated with + :meth:`gattc_exchange_mtu`. + Use the ``_IRQ_MTU_EXCHANGED`` event to discover the MTU for a given connection. + + - ``'bond'``: Sets whether bonding will be enabled during pairing. When + enabled, pairing requests will set the "bond" flag and the keys will be stored + by both devices. + + - ``'mitm'``: Sets whether MITM-protection is required for pairing. + + - ``'io'``: Sets the I/O capabilities of this device. + + Available options are:: + + _IO_CAPABILITY_DISPLAY_ONLY = const(0) + _IO_CAPABILITY_DISPLAY_YESNO = const(1) + _IO_CAPABILITY_KEYBOARD_ONLY = const(2) + _IO_CAPABILITY_NO_INPUT_OUTPUT = const(3) + _IO_CAPABILITY_KEYBOARD_DISPLAY = const(4) + + - ``'le_secure'``: Sets whether "LE Secure" pairing is required. Default is + false (i.e. allow "Legacy Pairing"). + """ + + @overload + def config(self, **kwargs) -> None: + """ + Get or set configuration values of the BLE interface. To get a value the + parameter name should be quoted as a string, and just one parameter is + queried at a time. To set values use the keyword syntax, and one or more + parameter can be set at a time. + + Currently supported values are: + + - ``'mac'``: The current address in use, depending on the current address mode. + This returns a tuple of ``(addr_type, addr)``. + + See :meth:`gatts_write ` for details about address type. + + This may only be queried while the interface is currently active. + + - ``'addr_mode'``: Sets the address mode. Values can be: + + * 0x00 - PUBLIC - Use the controller's public address. + * 0x01 - RANDOM - Use a generated static address. + * 0x02 - RPA - Use resolvable private addresses. + * 0x03 - NRPA - Use non-resolvable private addresses. + + By default the interface mode will use a PUBLIC address if available, otherwise + it will use a RANDOM address. + + - ``'gap_name'``: Get/set the GAP device name used by service 0x1800, + characteristic 0x2a00. This can be set at any time and changed multiple + times. + + - ``'rxbuf'``: Get/set the size in bytes of the internal buffer used to store + incoming events. This buffer is global to the entire BLE driver and so + handles incoming data for all events, including all characteristics. + Increasing this allows better handling of bursty incoming data (for + example scan results) and the ability to receive larger characteristic values. + + - ``'mtu'``: Get/set the MTU that will be used during a ATT MTU exchange. The + resulting MTU will be the minimum of this and the remote device's MTU. + ATT MTU exchange will not happen automatically (unless the remote device initiates + it), and must be manually initiated with + :meth:`gattc_exchange_mtu`. + Use the ``_IRQ_MTU_EXCHANGED`` event to discover the MTU for a given connection. + + - ``'bond'``: Sets whether bonding will be enabled during pairing. When + enabled, pairing requests will set the "bond" flag and the keys will be stored + by both devices. + + - ``'mitm'``: Sets whether MITM-protection is required for pairing. + + - ``'io'``: Sets the I/O capabilities of this device. + + Available options are:: + + _IO_CAPABILITY_DISPLAY_ONLY = const(0) + _IO_CAPABILITY_DISPLAY_YESNO = const(1) + _IO_CAPABILITY_KEYBOARD_ONLY = const(2) + _IO_CAPABILITY_NO_INPUT_OUTPUT = const(3) + _IO_CAPABILITY_KEYBOARD_DISPLAY = const(4) + + - ``'le_secure'``: Sets whether "LE Secure" pairing is required. Default is + false (i.e. allow "Legacy Pairing"). + """ + + @overload + def config(self, param: str, /) -> Any: + """ + Get or set configuration values of the BLE interface. To get a value the + parameter name should be quoted as a string, and just one parameter is + queried at a time. To set values use the keyword syntax, and one or more + parameter can be set at a time. + + Currently supported values are: + + - ``'mac'``: The current address in use, depending on the current address mode. + This returns a tuple of ``(addr_type, addr)``. + + See :meth:`gatts_write ` for details about address type. + + This may only be queried while the interface is currently active. + + - ``'addr_mode'``: Sets the address mode. Values can be: + + * 0x00 - PUBLIC - Use the controller's public address. + * 0x01 - RANDOM - Use a generated static address. + * 0x02 - RPA - Use resolvable private addresses. + * 0x03 - NRPA - Use non-resolvable private addresses. + + By default the interface mode will use a PUBLIC address if available, otherwise + it will use a RANDOM address. + + - ``'gap_name'``: Get/set the GAP device name used by service 0x1800, + characteristic 0x2a00. This can be set at any time and changed multiple + times. + + - ``'rxbuf'``: Get/set the size in bytes of the internal buffer used to store + incoming events. This buffer is global to the entire BLE driver and so + handles incoming data for all events, including all characteristics. + Increasing this allows better handling of bursty incoming data (for + example scan results) and the ability to receive larger characteristic values. + + - ``'mtu'``: Get/set the MTU that will be used during a ATT MTU exchange. The + resulting MTU will be the minimum of this and the remote device's MTU. + ATT MTU exchange will not happen automatically (unless the remote device initiates + it), and must be manually initiated with + :meth:`gattc_exchange_mtu`. + Use the ``_IRQ_MTU_EXCHANGED`` event to discover the MTU for a given connection. + + - ``'bond'``: Sets whether bonding will be enabled during pairing. When + enabled, pairing requests will set the "bond" flag and the keys will be stored + by both devices. + + - ``'mitm'``: Sets whether MITM-protection is required for pairing. + + - ``'io'``: Sets the I/O capabilities of this device. + + Available options are:: + + _IO_CAPABILITY_DISPLAY_ONLY = const(0) + _IO_CAPABILITY_DISPLAY_YESNO = const(1) + _IO_CAPABILITY_KEYBOARD_ONLY = const(2) + _IO_CAPABILITY_NO_INPUT_OUTPUT = const(3) + _IO_CAPABILITY_KEYBOARD_DISPLAY = const(4) + + - ``'le_secure'``: Sets whether "LE Secure" pairing is required. Default is + false (i.e. allow "Legacy Pairing"). + """ + + @overload + def config(self, **kwargs) -> None: + """ + Get or set configuration values of the BLE interface. To get a value the + parameter name should be quoted as a string, and just one parameter is + queried at a time. To set values use the keyword syntax, and one or more + parameter can be set at a time. + + Currently supported values are: + + - ``'mac'``: The current address in use, depending on the current address mode. + This returns a tuple of ``(addr_type, addr)``. + + See :meth:`gatts_write ` for details about address type. + + This may only be queried while the interface is currently active. + + - ``'addr_mode'``: Sets the address mode. Values can be: + + * 0x00 - PUBLIC - Use the controller's public address. + * 0x01 - RANDOM - Use a generated static address. + * 0x02 - RPA - Use resolvable private addresses. + * 0x03 - NRPA - Use non-resolvable private addresses. + + By default the interface mode will use a PUBLIC address if available, otherwise + it will use a RANDOM address. + + - ``'gap_name'``: Get/set the GAP device name used by service 0x1800, + characteristic 0x2a00. This can be set at any time and changed multiple + times. + + - ``'rxbuf'``: Get/set the size in bytes of the internal buffer used to store + incoming events. This buffer is global to the entire BLE driver and so + handles incoming data for all events, including all characteristics. + Increasing this allows better handling of bursty incoming data (for + example scan results) and the ability to receive larger characteristic values. + + - ``'mtu'``: Get/set the MTU that will be used during a ATT MTU exchange. The + resulting MTU will be the minimum of this and the remote device's MTU. + ATT MTU exchange will not happen automatically (unless the remote device initiates + it), and must be manually initiated with + :meth:`gattc_exchange_mtu`. + Use the ``_IRQ_MTU_EXCHANGED`` event to discover the MTU for a given connection. + + - ``'bond'``: Sets whether bonding will be enabled during pairing. When + enabled, pairing requests will set the "bond" flag and the keys will be stored + by both devices. + + - ``'mitm'``: Sets whether MITM-protection is required for pairing. + + - ``'io'``: Sets the I/O capabilities of this device. + + Available options are:: + + _IO_CAPABILITY_DISPLAY_ONLY = const(0) + _IO_CAPABILITY_DISPLAY_YESNO = const(1) + _IO_CAPABILITY_KEYBOARD_ONLY = const(2) + _IO_CAPABILITY_NO_INPUT_OUTPUT = const(3) + _IO_CAPABILITY_KEYBOARD_DISPLAY = const(4) + + - ``'le_secure'``: Sets whether "LE Secure" pairing is required. Default is + false (i.e. allow "Legacy Pairing"). + """ + + def irq(self, handler: Callable[[int, tuple[memoryview, ...]], Any], /) -> _IRQ: + """ + Registers a callback for events from the BLE stack. The *handler* takes two + arguments, ``event`` (which will be one of the codes below) and ``data`` + (which is an event-specific tuple of values). + + **Note:** As an optimisation to prevent unnecessary allocations, the ``addr``, + ``adv_data``, ``char_data``, ``notify_data``, and ``uuid`` entries in the + tuples are read-only memoryview instances pointing to :mod:`bluetooth`'s internal + ringbuffer, and are only valid during the invocation of the IRQ handler + function. If your program needs to save one of these values to access after + the IRQ handler has returned (e.g. by saving it in a class instance or global + variable), then it needs to take a copy of the data, either by using ``bytes()`` + or ``bluetooth.UUID()``, like this:: + + connected_addr = bytes(addr) # equivalently: adv_data, char_data, or notify_data + matched_uuid = bluetooth.UUID(uuid) + + For example, the IRQ handler for a scan result might inspect the ``adv_data`` + to decide if it's the correct device, and only then copy the address data to be + used elsewhere in the program. And to print data from within the IRQ handler, + ``print(bytes(addr))`` will be needed. + + An event handler showing all possible events:: + + def bt_irq(event, data): + if event == _IRQ_CENTRAL_CONNECT: + # A central has connected to this peripheral. + conn_handle, addr_type, addr = data + elif event == _IRQ_CENTRAL_DISCONNECT: + # A central has disconnected from this peripheral. + conn_handle, addr_type, addr = data + elif event == _IRQ_GATTS_WRITE: + # A client has written to this characteristic or descriptor. + conn_handle, attr_handle = data + elif event == _IRQ_GATTS_READ_REQUEST: + # A client has issued a read. Note: this is only supported on STM32. + # Return a non-zero integer to deny the read (see below), or zero (or None) + # to accept the read. + conn_handle, attr_handle = data + elif event == _IRQ_SCAN_RESULT: + # A single scan result. + addr_type, addr, adv_type, rssi, adv_data = data + elif event == _IRQ_SCAN_DONE: + # Scan duration finished or manually stopped. + pass + elif event == _IRQ_PERIPHERAL_CONNECT: + # A successful gap_connect(). + conn_handle, addr_type, addr = data + elif event == _IRQ_PERIPHERAL_DISCONNECT: + # Connected peripheral has disconnected. + conn_handle, addr_type, addr = data + elif event == _IRQ_GATTC_SERVICE_RESULT: + # Called for each service found by gattc_discover_services(). + conn_handle, start_handle, end_handle, uuid = data + elif event == _IRQ_GATTC_SERVICE_DONE: + # Called once service discovery is complete. + # Note: Status will be zero on success, implementation-specific value otherwise. + conn_handle, status = data + elif event == _IRQ_GATTC_CHARACTERISTIC_RESULT: + # Called for each characteristic found by gattc_discover_services(). + conn_handle, end_handle, value_handle, properties, uuid = data + elif event == _IRQ_GATTC_CHARACTERISTIC_DONE: + # Called once service discovery is complete. + # Note: Status will be zero on success, implementation-specific value otherwise. + conn_handle, status = data + elif event == _IRQ_GATTC_DESCRIPTOR_RESULT: + # Called for each descriptor found by gattc_discover_descriptors(). + conn_handle, dsc_handle, uuid = data + elif event == _IRQ_GATTC_DESCRIPTOR_DONE: + # Called once service discovery is complete. + # Note: Status will be zero on success, implementation-specific value otherwise. + conn_handle, status = data + elif event == _IRQ_GATTC_READ_RESULT: + # A gattc_read() has completed. + conn_handle, value_handle, char_data = data + elif event == _IRQ_GATTC_READ_DONE: + # A gattc_read() has completed. + # Note: Status will be zero on success, implementation-specific value otherwise. + conn_handle, value_handle, status = data + elif event == _IRQ_GATTC_WRITE_DONE: + # A gattc_write() has completed. + # Note: Status will be zero on success, implementation-specific value otherwise. + conn_handle, value_handle, status = data + elif event == _IRQ_GATTC_NOTIFY: + # A server has sent a notify request. + conn_handle, value_handle, notify_data = data + elif event == _IRQ_GATTC_INDICATE: + # A server has sent an indicate request. + conn_handle, value_handle, notify_data = data + elif event == _IRQ_GATTS_INDICATE_DONE: + # A client has acknowledged the indication. + # Note: Status will be zero on successful acknowledgment, implementation-specific value otherwise. + conn_handle, value_handle, status = data + elif event == _IRQ_MTU_EXCHANGED: + # ATT MTU exchange complete (either initiated by us or the remote device). + conn_handle, mtu = data + elif event == _IRQ_L2CAP_ACCEPT: + # A new channel has been accepted. + # Return a non-zero integer to reject the connection, or zero (or None) to accept. + conn_handle, cid, psm, our_mtu, peer_mtu = data + elif event == _IRQ_L2CAP_CONNECT: + # A new channel is now connected (either as a result of connecting or accepting). + conn_handle, cid, psm, our_mtu, peer_mtu = data + elif event == _IRQ_L2CAP_DISCONNECT: + # Existing channel has disconnected (status is zero), or a connection attempt failed (non-zero status). + conn_handle, cid, psm, status = data + elif event == _IRQ_L2CAP_RECV: + # New data is available on the channel. Use l2cap_recvinto to read. + conn_handle, cid = data + elif event == _IRQ_L2CAP_SEND_READY: + # A previous l2cap_send that returned False has now completed and the channel is ready to send again. + # If status is non-zero, then the transmit buffer overflowed and the application should re-send the data. + conn_handle, cid, status = data + elif event == _IRQ_CONNECTION_UPDATE: + # The remote device has updated connection parameters. + conn_handle, conn_interval, conn_latency, supervision_timeout, status = data + elif event == _IRQ_ENCRYPTION_UPDATE: + # The encryption state has changed (likely as a result of pairing or bonding). + conn_handle, encrypted, authenticated, bonded, key_size = data + elif event == _IRQ_GET_SECRET: + # Return a stored secret. + # If key is None, return the index'th value of this sec_type. + # Otherwise return the corresponding value for this sec_type and key. + sec_type, index, key = data + return value + elif event == _IRQ_SET_SECRET: + # Save a secret to the store for this sec_type and key. + sec_type, key, value = data + return True + elif event == _IRQ_PASSKEY_ACTION: + # Respond to a passkey request during pairing. + # See gap_passkey() for details. + # action will be an action that is compatible with the configured "io" config. + # passkey will be non-zero if action is "numeric comparison". + conn_handle, action, passkey = data + + + The event codes are:: + + from micropython import const + _IRQ_CENTRAL_CONNECT = const(1) + _IRQ_CENTRAL_DISCONNECT = const(2) + _IRQ_GATTS_WRITE = const(3) + _IRQ_GATTS_READ_REQUEST = const(4) + _IRQ_SCAN_RESULT = const(5) + _IRQ_SCAN_DONE = const(6) + _IRQ_PERIPHERAL_CONNECT = const(7) + _IRQ_PERIPHERAL_DISCONNECT = const(8) + _IRQ_GATTC_SERVICE_RESULT = const(9) + _IRQ_GATTC_SERVICE_DONE = const(10) + _IRQ_GATTC_CHARACTERISTIC_RESULT = const(11) + _IRQ_GATTC_CHARACTERISTIC_DONE = const(12) + _IRQ_GATTC_DESCRIPTOR_RESULT = const(13) + _IRQ_GATTC_DESCRIPTOR_DONE = const(14) + _IRQ_GATTC_READ_RESULT = const(15) + _IRQ_GATTC_READ_DONE = const(16) + _IRQ_GATTC_WRITE_DONE = const(17) + _IRQ_GATTC_NOTIFY = const(18) + _IRQ_GATTC_INDICATE = const(19) + _IRQ_GATTS_INDICATE_DONE = const(20) + _IRQ_MTU_EXCHANGED = const(21) + _IRQ_L2CAP_ACCEPT = const(22) + _IRQ_L2CAP_CONNECT = const(23) + _IRQ_L2CAP_DISCONNECT = const(24) + _IRQ_L2CAP_RECV = const(25) + _IRQ_L2CAP_SEND_READY = const(26) + _IRQ_CONNECTION_UPDATE = const(27) + _IRQ_ENCRYPTION_UPDATE = const(28) + _IRQ_GET_SECRET = const(29) + _IRQ_SET_SECRET = const(30) + + For the ``_IRQ_GATTS_READ_REQUEST`` event, the available return codes are:: + + _GATTS_NO_ERROR = const(0x00) + _GATTS_ERROR_READ_NOT_PERMITTED = const(0x02) + _GATTS_ERROR_WRITE_NOT_PERMITTED = const(0x03) + _GATTS_ERROR_INSUFFICIENT_AUTHENTICATION = const(0x05) + _GATTS_ERROR_INSUFFICIENT_AUTHORIZATION = const(0x08) + _GATTS_ERROR_INSUFFICIENT_ENCRYPTION = const(0x0f) + + For the ``_IRQ_PASSKEY_ACTION`` event, the available actions are:: + + _PASSKEY_ACTION_NONE = const(0) + _PASSKEY_ACTION_INPUT = const(2) + _PASSKEY_ACTION_DISPLAY = const(3) + _PASSKEY_ACTION_NUMERIC_COMPARISON = const(4) + + In order to save space in the firmware, these constants are not included on the + :mod:`bluetooth` module. Add the ones that you need from the list above to your + program. + """ + ... + + def gap_advertise( + self, + interval_us: int, + adv_data: AnyReadableBuf | None = None, + /, + *, + resp_data: AnyReadableBuf | None = None, + connectable: bool = True, + ) -> None: + """ + Starts advertising at the specified interval (in **micro** seconds). This + interval will be rounded down to the nearest 625us. To stop advertising, set + *interval_us* to ``None``. + + *adv_data* and *resp_data* can be any type that implements the buffer + protocol (e.g. ``bytes``, ``bytearray``, ``str``). *adv_data* is included + in all broadcasts, and *resp_data* is send in reply to an active scan. + + **Note:** if *adv_data* (or *resp_data*) is ``None``, then the data passed + to the previous call to ``gap_advertise`` will be reused. This allows a + broadcaster to resume advertising with just ``gap_advertise(interval_us)``. + To clear the advertising payload pass an empty ``bytes``, i.e. ``b''``. + """ + ... + + def gap_scan( + self, + duration_ms: int, + interval_us: int = 1280000, + window_us: int = 11250, + active: bool = False, + /, + ) -> None: + """ + Run a scan operation lasting for the specified duration (in **milli** seconds). + + To scan indefinitely, set *duration_ms* to ``0``. + + To stop scanning, set *duration_ms* to ``None``. + + Use *interval_us* and *window_us* to optionally configure the duty cycle. + The scanner will run for *window_us* **micro** seconds every *interval_us* + **micro** seconds for a total of *duration_ms* **milli** seconds. The default + interval and window are 1.28 seconds and 11.25 milliseconds respectively + (background scanning). + + For each scan result the ``_IRQ_SCAN_RESULT`` event will be raised, with event + data ``(addr_type, addr, adv_type, rssi, adv_data)``. + + ``addr_type`` values indicate public or random addresses: + * 0x00 - PUBLIC + * 0x01 - RANDOM (either static, RPA, or NRPA, the type is encoded in the address itself) + + ``adv_type`` values correspond to the Bluetooth Specification: + + * 0x00 - ADV_IND - connectable and scannable undirected advertising + * 0x01 - ADV_DIRECT_IND - connectable directed advertising + * 0x02 - ADV_SCAN_IND - scannable undirected advertising + * 0x03 - ADV_NONCONN_IND - non-connectable undirected advertising + * 0x04 - SCAN_RSP - scan response + + ``active`` can be set ``True`` if you want to receive scan responses in the results. + + When scanning is stopped (either due to the duration finishing or when + explicitly stopped), the ``_IRQ_SCAN_DONE`` event will be raised. + """ + ... + + def gap_connect( + self, + addr_type: int, + addr: bytes, + scan_duration_ms: int = 2000, + min_conn_interval_us: int | None = None, + max_conn_interval_us: int | None = None, + /, + ) -> None: + """ + Connect to a peripheral. + + See :meth:`gap_scan ` for details about address types. + + To cancel an outstanding connection attempt early, call + ``gap_connect(None)``. + + On success, the ``_IRQ_PERIPHERAL_CONNECT`` event will be raised. If + cancelling a connection attempt, the ``_IRQ_PERIPHERAL_DISCONNECT`` event + will be raised. + + The device will wait up to *scan_duration_ms* to receive an advertising + payload from the device. + + The connection interval can be configured in **micro** seconds using either + or both of *min_conn_interval_us* and *max_conn_interval_us*. Otherwise a + default interval will be chosen, typically between 30000 and 50000 + microseconds. A shorter interval will increase throughput, at the expense + of power usage. + """ + ... + + def gap_disconnect(self, conn_handle: memoryview, /) -> bool: + """ + Disconnect the specified connection handle. This can either be a + central that has connected to this device (if acting as a peripheral) + or a peripheral that was previously connected to by this device (if acting + as a central). + + On success, the ``_IRQ_PERIPHERAL_DISCONNECT`` or ``_IRQ_CENTRAL_DISCONNECT`` + event will be raised. + + Returns ``False`` if the connection handle wasn't connected, and ``True`` + otherwise. + """ + ... + + def gatts_register_services(self, services_definition: tuple[_Service, ...], /) -> tuple[tuple[memoryview, ...], ...]: + """ + Configures the server with the specified services, replacing any + existing services. + + *services_definition* is a list of **services**, where each **service** is a + two-element tuple containing a UUID and a list of **characteristics**. + + Each **characteristic** is a two-or-three-element tuple containing a UUID, a + **flags** value, and optionally a list of *descriptors*. + + Each **descriptor** is a two-element tuple containing a UUID and a **flags** + value. + + The **flags** are a bitwise-OR combination of the flags defined below. These + set both the behaviour of the characteristic (or descriptor) as well as the + security and privacy requirements. + + The return value is a list (one element per service) of tuples (each element + is a value handle). Characteristics and descriptor handles are flattened + into the same tuple, in the order that they are defined. + + The following example registers two services (Heart Rate, and Nordic UART):: + + HR_UUID = bluetooth.UUID(0x180D) + HR_CHAR = (bluetooth.UUID(0x2A37), bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY,) + HR_SERVICE = (HR_UUID, (HR_CHAR,),) + UART_UUID = bluetooth.UUID('6E400001-B5A3-F393-E0A9-E50E24DCCA9E') + UART_TX = (bluetooth.UUID('6E400003-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY,) + UART_RX = (bluetooth.UUID('6E400002-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_WRITE,) + UART_SERVICE = (UART_UUID, (UART_TX, UART_RX,),) + SERVICES = (HR_SERVICE, UART_SERVICE,) + ( (hr,), (tx, rx,), ) = bt.gatts_register_services(SERVICES) + + The three value handles (``hr``, ``tx``, ``rx``) can be used with + :meth:`gatts_read `, :meth:`gatts_write `, :meth:`gatts_notify `, and + :meth:`gatts_indicate `. + + **Note:** Advertising must be stopped before registering services. + + Available flags for characteristics and descriptors are:: + + from micropython import const + _FLAG_BROADCAST = const(0x0001) + _FLAG_READ = const(0x0002) + _FLAG_WRITE_NO_RESPONSE = const(0x0004) + _FLAG_WRITE = const(0x0008) + _FLAG_NOTIFY = const(0x0010) + _FLAG_INDICATE = const(0x0020) + _FLAG_AUTHENTICATED_SIGNED_WRITE = const(0x0040) + + _FLAG_AUX_WRITE = const(0x0100) + _FLAG_READ_ENCRYPTED = const(0x0200) + _FLAG_READ_AUTHENTICATED = const(0x0400) + _FLAG_READ_AUTHORIZED = const(0x0800) + _FLAG_WRITE_ENCRYPTED = const(0x1000) + _FLAG_WRITE_AUTHENTICATED = const(0x2000) + _FLAG_WRITE_AUTHORIZED = const(0x4000) + + As for the IRQs above, any required constants should be added to your Python code. + """ + ... + + def gatts_read(self, value_handle: memoryview, /) -> bytes: + """ + Reads the local value for this handle (which has either been written by + :meth:`gatts_write ` or by a remote client). + """ + ... + + def gatts_write(self, value_handle: memoryview, data: bytes, send_update: bool = False, /) -> None: + """ + Writes the local value for this handle, which can be read by a client. + + If *send_update* is ``True``, then any subscribed clients will be notified + (or indicated, depending on what they're subscribed to and which operations + the characteristic supports) about this write. + """ + ... + + def gatts_notify(self, value_handle: memoryview, data: bytes, /) -> None: + """ + Sends a notification request to a connected client. + + If *data* is ``None`` (the default), then the current local value (as set + with :meth:`gatts_write `) will be sent. + + Otherwise, if *data* is not ``None``, then that value is sent to the client + as part of the notification. The local value will not be modified. + + **Note:** The notification will be sent regardless of the subscription + status of the client to this characteristic. + """ + ... + + def gatts_indicate(self, conn_handle: memoryview, value_handle: memoryview, /) -> None: + """ + Sends a indication request to a connected client. + + If *data* is ``None`` (the default), then the current local value (as set + with :meth:`gatts_write `) will be sent. + + Otherwise, if *data* is not ``None``, then that value is sent to the client + as part of the indication. The local value will not be modified. + + On acknowledgment (or failure, e.g. timeout), the + ``_IRQ_GATTS_INDICATE_DONE`` event will be raised. + + **Note:** The indication will be sent regardless of the subscription + status of the client to this characteristic. + """ + ... + + def gatts_set_buffer(self, conn_handle: memoryview, len: int, append: bool = False, /) -> None: + """ + Sets the internal buffer size for a value in bytes. This will limit the + largest possible write that can be received. The default is 20. + + Setting *append* to ``True`` will make all remote writes append to, rather + than replace, the current value. At most *len* bytes can be buffered in + this way. When you use :meth:`gatts_read `, the value will + be cleared after reading. This feature is useful when implementing something + like the Nordic UART Service. + """ + ... + + def gattc_discover_services(self, conn_handle: memoryview, uuid: UUID | None = None, /) -> None: + """ + Query a connected server for its services. + + Optionally specify a service *uuid* to query for that service only. + + For each service discovered, the ``_IRQ_GATTC_SERVICE_RESULT`` event will + be raised, followed by ``_IRQ_GATTC_SERVICE_DONE`` on completion. + """ + ... + + def gattc_discover_characteristics( + self, + conn_handle: memoryview, + start_handle: int, + end_handle: int, + uuid: UUID | None = None, + /, + ) -> None: + """ + Query a connected server for characteristics in the specified range. + + Optionally specify a characteristic *uuid* to query for that + characteristic only. + + You can use ``start_handle=1``, ``end_handle=0xffff`` to search for a + characteristic in any service. + + For each characteristic discovered, the ``_IRQ_GATTC_CHARACTERISTIC_RESULT`` + event will be raised, followed by ``_IRQ_GATTC_CHARACTERISTIC_DONE`` on completion. + """ + ... + + def gattc_discover_descriptors(self, conn_handle: memoryview, start_handle: int, end_handle: int, /) -> None: + """ + Query a connected server for descriptors in the specified range. + + For each descriptor discovered, the ``_IRQ_GATTC_DESCRIPTOR_RESULT`` event + will be raised, followed by ``_IRQ_GATTC_DESCRIPTOR_DONE`` on completion. + """ + ... + + def gattc_read(self, conn_handle: memoryview, value_handle: memoryview, /) -> None: + """ + Issue a remote read to a connected server for the specified + characteristic or descriptor handle. + + When a value is available, the ``_IRQ_GATTC_READ_RESULT`` event will be + raised. Additionally, the ``_IRQ_GATTC_READ_DONE`` will be raised. + """ + ... + + def gattc_write( + self, + conn_handle: memoryview, + value_handle: memoryview, + data: bytes, + mode: int = 0, + /, + ) -> None: + """ + Issue a remote write to a connected server for the specified + characteristic or descriptor handle. + + The argument *mode* specifies the write behaviour, with the currently + supported values being: + + * ``mode=0`` (default) is a write-without-response: the write will + be sent to the remote server but no confirmation will be + returned, and no event will be raised. + * ``mode=1`` is a write-with-response: the remote server is + requested to send a response/acknowledgement that it received the + data. + + If a response is received from the remote server the + ``_IRQ_GATTC_WRITE_DONE`` event will be raised. + """ + ... + + def gattc_exchange_mtu(self, conn_handle: memoryview, /) -> None: + """ + Initiate MTU exchange with a connected server, using the preferred MTU + set using ``BLE.config(mtu=value)``. + + The ``_IRQ_MTU_EXCHANGED`` event will be raised when MTU exchange + completes. + + **Note:** MTU exchange is typically initiated by the central. When using + the BlueKitchen stack in the central role, it does not support a remote + peripheral initiating the MTU exchange. NimBLE works for both roles. + """ + ... + + def l2cap_listen(self, psm: memoryview, mtu: memoryview, /) -> None: + """ + Start listening for incoming L2CAP channel requests on the specified *psm* + with the local MTU set to *mtu*. + + When a remote device initiates a connection, the ``_IRQ_L2CAP_ACCEPT`` + event will be raised, which gives the listening server a chance to reject + the incoming connection (by returning a non-zero integer). + + Once the connection is accepted, the ``_IRQ_L2CAP_CONNECT`` event will be + raised, allowing the server to obtain the channel id (CID) and the local and + remote MTU. + + **Note:** It is not currently possible to stop listening. + """ + ... + + def l2cap_connect(self, conn_handle: memoryview, psm: memoryview, mtu: memoryview, /) -> None: + """ + Connect to a listening peer on the specified *psm* with local MTU set to *mtu*. + + On successful connection, the the ``_IRQ_L2CAP_CONNECT`` event will be + raised, allowing the client to obtain the CID and the local and remote (peer) MTU. + + An unsuccessful connection will raise the ``_IRQ_L2CAP_DISCONNECT`` event + with a non-zero status. + """ + ... + + def l2cap_disconnect(self, conn_handle: memoryview, cid: memoryview, /) -> None: + """ + Disconnect an active L2CAP channel with the specified *conn_handle* and + *cid*. + """ + ... + + def l2cap_send(self, conn_handle: memoryview, cid: memoryview, /) -> bool: + """ + Send the specified *buf* (which must support the buffer protocol) on the + L2CAP channel identified by *conn_handle* and *cid*. + + The specified buffer cannot be larger than the remote (peer) MTU, and no + more than twice the size of the local MTU. + + This will return ``False`` if the channel is now "stalled", which means that + :meth:`l2cap_send ` must not be called again until the + ``_IRQ_L2CAP_SEND_READY`` event is received (which will happen when the + remote device grants more credits, typically after it has received and + processed the data). + """ + ... + + def l2cap_recvinto(self, conn_handle: memoryview, cid: memoryview, buf: AnyWritableBuf | None, /) -> int: + """ + Receive data from the specified *conn_handle* and *cid* into the provided + *buf* (which must support the buffer protocol, e.g. bytearray or + memoryview). + + Returns the number of bytes read from the channel. + + If *buf* is None, then returns the number of bytes available. + + **Note:** After receiving the ``_IRQ_L2CAP_RECV`` event, the application should + continue calling :meth:`l2cap_recvinto ` until no more + bytes are available in the receive buffer (typically up to the size of the + remote (peer) MTU). + + Until the receive buffer is empty, the remote device will not be granted + more channel credits and will be unable to send any more data. + """ + ... + + def gap_pair(self, conn_handle: memoryview, /) -> None: + """ + Initiate pairing with the remote device. + + Before calling this, ensure that the ``io``, ``mitm``, ``le_secure``, and + ``bond`` configuration options are set (via :meth:`config`). + + On successful pairing, the ``_IRQ_ENCRYPTION_UPDATE`` event will be raised. + """ + ... + + def gap_passkey(self, conn_handle: memoryview, action: int, passkey: int, /) -> None: + """ + Respond to a ``_IRQ_PASSKEY_ACTION`` event for the specified *conn_handle* + and *action*. + + The *passkey* is a numeric value and will depend on on the + *action* (which will depend on what I/O capability has been set): + + * When the *action* is ``_PASSKEY_ACTION_INPUT``, then the application should + prompt the user to enter the passkey that is shown on the remote device. + * When the *action* is ``_PASSKEY_ACTION_DISPLAY``, then the application should + generate a random 6-digit passkey and show it to the user. + * When the *action* is ``_PASSKEY_ACTION_NUMERIC_COMPARISON``, then the application + should show the passkey that was provided in the ``_IRQ_PASSKEY_ACTION`` event + and then respond with either ``0`` (cancel pairing), or ``1`` (accept pairing). + """ + ... + +class UUID: + """ + class UUID + ---------- + """ + + def __init__(self, value: int | str, /) -> None: + """ + Creates a UUID instance with the specified **value**. + + The **value** can be either: + + - A 16-bit integer. e.g. ``0x2908``. + - A 128-bit UUID string. e.g. ``'6E400001-B5A3-F393-E0A9-E50E24DCCA9E'``. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/btree/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/btree/__init__.pyi new file mode 100644 index 00000000..d01cb5bd --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/btree/__init__.pyi @@ -0,0 +1,253 @@ +""" +Simple BTree database. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/btree.html + +The ``btree`` module implements a simple key-value database using external +storage (disk files, or in general case, a random-access `stream`). Keys are +stored sorted in the database, and besides efficient retrieval by a key +value, a database also supports efficient ordered range scans (retrieval +of values with the keys in a given range). On the application interface +side, BTree database work as close a possible to a way standard `dict` +type works, one notable difference is that both keys and values must +be `bytes`-like objects (so, if you want to store objects of other types, you +need to first serialize them to `str` or `bytes` or another type that supports +the buffer protocol). + +The module is based on the well-known BerkelyDB library, version 1.xx. + +Example:: + + import btree + + # First, we need to open a stream which holds a database + # This is usually a file, but can be in-memory database + # using io.BytesIO, a raw flash partition, etc. + # Oftentimes, you want to create a database file if it doesn't + # exist and open if it exists. Idiom below takes care of this. + # DO NOT open database with "a+b" access mode. + try: + f = open("mydb", "r+b") + except OSError: + f = open("mydb", "w+b") + + # Now open a database itself + db = btree.open(f) + + # The keys you add will be sorted internally in the database + db[b"3"] = b"three" + db[b"1"] = b"one" + db[b"2"] = b"two" + + # Assume that any changes are cached in memory unless + # explicitly flushed (or database closed). Flush database + # at the end of each "transaction". + db.flush() + + # Prints b'two' + print(db[b"2"]) + + # Iterate over sorted keys in the database, starting from b"2" + # until the end of the database, returning only values. + # Mind that arguments passed to values() method are *key* values. + # Prints: + # b'two' + # b'three' + for word in db.values(b"2"): + print(word) + + del db[b"2"] + + # No longer true, prints False + print(b"2" in db) + + # Prints: + # b"1" + # b"3" + for key in db: + print(key) + + db.close() + + # Don't forget to close the underlying stream! + f.close() +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/btree.rst +from __future__ import annotations + +from typing import Dict, Iterable + +from _mpy_shed import IOBase +from _typeshed import Incomplete + +INCL: Incomplete +"""\ +A flag for `keys()`, `values()`, `items()` methods to specify that +scanning should be inclusive of the end key. +""" +DESC: Incomplete +"""\ +A flag for `keys()`, `values()`, `items()` methods to specify that +scanning should be in descending direction of keys. +""" + +class btree: + """ """ + + def close(self) -> None: + """ + Close the database. It's mandatory to close the database at the end of + processing, as some unwritten data may be still in the cache. Note that + this does not close underlying stream with which the database was opened, + it should be closed separately (which is also mandatory to make sure that + data flushed from buffer to the underlying storage). + """ + ... + + def flush(self) -> None: + """ + Flush any data in cache to the underlying stream. + """ + ... + + def __getitem__(self, key: bytes, /) -> bytes: + """ + Standard dictionary methods. + """ + ... + + def get(self, key: bytes, default: bytes | None = None, /) -> bytes | None: + """ + Standard dictionary methods. + """ + ... + + def __setitem__(self, key: bytes, val: bytes, /) -> None: + """ + Standard dictionary methods. + """ + ... + + def __delitem__(self, key: bytes, /) -> None: + """ + Standard dictionary methods. + """ + ... + + def __contains__(self, key: bytes, /) -> bool: + """ + Standard dictionary methods. + """ + ... + + def __iter__(self) -> Iterable[bytes]: + """ + A BTree object can be iterated over directly (similar to a dictionary) + to get access to all keys in order. + """ + ... + + def keys( + self, + start_key: bytes | None = None, + end_key: bytes | None = None, + flags: int = 0, + /, + ) -> Iterable[bytes]: + """ + These methods are similar to standard dictionary methods, but also can + take optional parameters to iterate over a key sub-range, instead of + the entire database. Note that for all 3 methods, *start_key* and + *end_key* arguments represent key values. For example, `values()` + method will iterate over values corresponding to they key range + given. None values for *start_key* means "from the first key", no + *end_key* or its value of None means "until the end of database". + By default, range is inclusive of *start_key* and exclusive of + *end_key*, you can include *end_key* in iteration by passing *flags* + of `btree.INCL`. You can iterate in descending key direction + by passing *flags* of `btree.DESC`. The flags values can be ORed + together. + """ + ... + + def values( + self, + start_key: bytes | None = None, + end_key: bytes | None = None, + flags: int = 0, + /, + ) -> Iterable[bytes]: + """ + These methods are similar to standard dictionary methods, but also can + take optional parameters to iterate over a key sub-range, instead of + the entire database. Note that for all 3 methods, *start_key* and + *end_key* arguments represent key values. For example, `values()` + method will iterate over values corresponding to they key range + given. None values for *start_key* means "from the first key", no + *end_key* or its value of None means "until the end of database". + By default, range is inclusive of *start_key* and exclusive of + *end_key*, you can include *end_key* in iteration by passing *flags* + of `btree.INCL`. You can iterate in descending key direction + by passing *flags* of `btree.DESC`. The flags values can be ORed + together. + """ + ... + + def items( + self, + start_key: bytes | None = None, + end_key: bytes | None = None, + flags: int = 0, + /, + ) -> Iterable[tuple[bytes, bytes]]: + """ + These methods are similar to standard dictionary methods, but also can + take optional parameters to iterate over a key sub-range, instead of + the entire database. Note that for all 3 methods, *start_key* and + *end_key* arguments represent key values. For example, `values()` + method will iterate over values corresponding to they key range + given. None values for *start_key* means "from the first key", no + *end_key* or its value of None means "until the end of database". + By default, range is inclusive of *start_key* and exclusive of + *end_key*, you can include *end_key* in iteration by passing *flags* + of `btree.INCL`. You can iterate in descending key direction + by passing *flags* of `btree.DESC`. The flags values can be ORed + together. + """ + ... + +def open( + stream: IOBase, # [bytes, Any], + /, + *, + flags: int = 0, + pagesize: int = 0, + cachesize: int = 0, + minkeypage: int = 0, +) -> Dict: + """ + Open a database from a random-access `stream` (like an open file). All + other parameters are optional and keyword-only, and allow to tweak advanced + parameters of the database operation (most users will not need them): + + * *flags* - Currently unused. + * *pagesize* - Page size used for the nodes in BTree. Acceptable range + is 512-65536. If 0, a port-specific default will be used, optimized for + port's memory usage and/or performance. + * *cachesize* - Suggested memory cache size in bytes. For a + board with enough memory using larger values may improve performance. + Cache policy is as follows: entire cache is not allocated at once; + instead, accessing a new page in database will allocate a memory buffer + for it, until value specified by *cachesize* is reached. Then, these + buffers will be managed using LRU (least recently used) policy. More + buffers may still be allocated if needed (e.g., if a database contains + big keys and/or values). Allocated cache buffers aren't reclaimed. + * *minkeypage* - Minimum number of keys to store per page. Default value + of 0 equivalent to 2. + + Returns a BTree object, which implements a dictionary protocol (set + of methods), and some additional methods described below. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/cmath/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/cmath/__init__.pyi new file mode 100644 index 00000000..977d80df --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/cmath/__init__.pyi @@ -0,0 +1,82 @@ +""" +Mathematical functions for complex numbers. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/cmath.html + +CPython module: :mod:`python:cmath` https://docs.python.org/3/library/cmath.html . + +The ``cmath`` module provides some basic mathematical functions for +working with complex numbers. + +Availability: not available on WiPy and ESP8266. Floating point support +required for this module. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/cmath.rst +from __future__ import annotations + +from typing import SupportsComplex, SupportsFloat, SupportsIndex, Tuple + +from typing_extensions import TypeAlias + +_C: TypeAlias = SupportsFloat | SupportsComplex | SupportsIndex | complex + +e: float +"""base of the natural logarithm""" +pi: float +"""the ratio of a circle's circumference to its diameter""" + +def cos(z: _C, /) -> float: + """ + Return the cosine of ``z``. + """ + ... + +def exp(z: _C, /) -> float: + """ + Return the exponential of ``z``. + """ + ... + +def log(z: _C, /) -> float: + """ + Return the natural logarithm of ``z``. The branch cut is along the negative real axis. + """ + ... + +def log10(z: _C, /) -> float: + """ + Return the base-10 logarithm of ``z``. The branch cut is along the negative real axis. + """ + ... + +def phase(z: _C, /) -> float: + """ + Returns the phase of the number ``z``, in the range (-pi, +pi]. + """ + ... + +def polar(z: _C, /) -> Tuple: + """ + Returns, as a tuple, the polar form of ``z``. + """ + ... + +def rect(r: float, phi: float, /) -> float: + """ + Returns the complex number with modulus ``r`` and phase ``phi``. + """ + ... + +def sin(z: _C, /) -> float: + """ + Return the sine of ``z``. + """ + ... + +def sqrt(z: _C, /) -> complex: + """ + Return the square-root of ``z``. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/collections/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/collections/__init__.pyi new file mode 100644 index 00000000..06c53c33 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/collections/__init__.pyi @@ -0,0 +1,207 @@ +""" +Collection and container types. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/collections.html + +CPython module: :mod:`python:collections` https://docs.python.org/3/library/collections.html . + +This module implements advanced collection and container types to +hold/accumulate various objects. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/collections.rst +from __future__ import annotations + +from collections.abc import Iterable, Mapping, MutableSequence +from typing import Any, Tuple, TypeVar, overload + +from _collections_abc import * +from typing_extensions import TypeVar + +_KT = TypeVar("_KT") +_VT = TypeVar("_VT") +_S = TypeVar("_S") +_T = TypeVar("_T") +_T1 = TypeVar("_T1") +_T2 = TypeVar("_T2") +_KT_co = TypeVar("_KT_co", covariant=True) +_VT_co = TypeVar("_VT_co", covariant=True) + +class deque(MutableSequence[_T]): + """ + Minimal implementation of a deque that implements a FIFO buffer. + """ + + @overload + def __init__(self, *, maxlen: int | None = None) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T], maxlen: int | None = None) -> None: ... + def append(self, x: _T, /) -> None: + """ + Add *x* to the right side of the deque. + Raises ``IndexError`` if overflow checking is enabled and there is + no more room in the queue. + """ + ... + + def appendleft(self, x: _T, /) -> None: + """ + Add *x* to the left side of the deque. + Raises ``IndexError`` if overflow checking is enabled and there is + no more room in the queue. + """ + ... + + def pop(self) -> _T: + """ + Remove and return an item from the right side of the deque. + Raises ``IndexError`` if no items are present. + """ + ... + + def popleft(self) -> _T: + """ + Remove and return an item from the left side of the deque. + Raises ``IndexError`` if no items are present. + """ + ... + + def extend(self, iterable: Iterable[_T], /) -> None: + """ + Extend the deque by appending all the items from *iterable* to + the right of the deque. + Raises ``IndexError`` if overflow checking is enabled and there is + no more room in the deque. + """ + ... + +class OrderedDict(dict[_KT, _VT]): + """ + ``dict`` type subclass which remembers and preserves the order of keys + added. When ordered dict is iterated over, keys/items are returned in + the order they were added:: + + from collections import OrderedDict + + # To make benefit of ordered keys, OrderedDict should be initialized + # from sequence of (key, value) pairs. + d = OrderedDict([("z", 1), ("a", 2)]) + # More items can be added as usual + d["w"] = 5 + d["b"] = 3 + for k, v in d.items(): + print(k, v) + + Output:: + + z 1 + a 2 + w 5 + b 3 + """ + + @overload + def __init__(self): + """ + ``dict`` type subclass which remembers and preserves the order of keys + added. When ordered dict is iterated over, keys/items are returned in + the order they were added:: + + from collections import OrderedDict + + # To make benefit of ordered keys, OrderedDict should be initialized + # from sequence of (key, value) pairs. + d = OrderedDict([("z", 1), ("a", 2)]) + # More items can be added as usual + d["w"] = 5 + d["b"] = 3 + for k, v in d.items(): + print(k, v) + + Output:: + + z 1 + a 2 + w 5 + b 3 + """ + + @overload + def __init__(self, **kwargs: _VT): + """ + ``dict`` type subclass which remembers and preserves the order of keys + added. When ordered dict is iterated over, keys/items are returned in + the order they were added:: + + from collections import OrderedDict + + # To make benefit of ordered keys, OrderedDict should be initialized + # from sequence of (key, value) pairs. + d = OrderedDict([("z", 1), ("a", 2)]) + # More items can be added as usual + d["w"] = 5 + d["b"] = 3 + for k, v in d.items(): + print(k, v) + + Output:: + + z 1 + a 2 + w 5 + b 3 + """ + + @overload + def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT): + """ + ``dict`` type subclass which remembers and preserves the order of keys + added. When ordered dict is iterated over, keys/items are returned in + the order they were added:: + + from collections import OrderedDict + + # To make benefit of ordered keys, OrderedDict should be initialized + # from sequence of (key, value) pairs. + d = OrderedDict([("z", 1), ("a", 2)]) + # More items can be added as usual + d["w"] = 5 + d["b"] = 3 + for k, v in d.items(): + print(k, v) + + Output:: + + z 1 + a 2 + w 5 + b 3 + """ + +def namedtuple( + typename: str, + field_names: str | Iterable[str], + *, + rename: bool = False, + module: str | None = None, + defaults: Iterable[Any] | None = None, +) -> type[Tuple[Any, ...]]: + """ + This is factory function to create a new namedtuple type with a specific + name and set of fields. A namedtuple is a subclass of tuple which allows + to access its fields not just by numeric index, but also with an attribute + access syntax using symbolic field names. Fields is a sequence of strings + specifying field names. For compatibility with CPython it can also be a + a string with space-separated field named (but this is less efficient). + Example of use:: + + from collections import namedtuple + + MyTuple = namedtuple("MyTuple", ("id", "name")) + t1 = MyTuple(1, "foo") + t2 = MyTuple(2, "bar") + print(t1.name) + assert t2.name == t2[1] + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/cryptolib/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/cryptolib/__init__.pyi new file mode 100644 index 00000000..a67a95b5 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/cryptolib/__init__.pyi @@ -0,0 +1,162 @@ +""" +Cryptographic ciphers. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/cryptolib.html +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/cryptolib.rst +from __future__ import annotations + +from typing import overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf + +class aes: + """ + .. class:: aes + """ + + @overload + def __init__(self, key: AnyReadableBuf, mode: int, /): + """ + Initialize cipher object, suitable for encryption/decryption. Note: + after initialization, cipher object can be use only either for + encryption or decryption. Running decrypt() operation after encrypt() + or vice versa is not supported. + + Parameters are: + + * *key* is an encryption/decryption key (bytes-like). + * *mode* is: + + * ``1`` (or ``cryptolib.MODE_ECB`` if it exists) for Electronic Code Book (ECB). + * ``2`` (or ``cryptolib.MODE_CBC`` if it exists) for Cipher Block Chaining (CBC). + * ``6`` (or ``cryptolib.MODE_CTR`` if it exists) for Counter mode (CTR). + + * *IV* is an initialization vector for CBC mode. + * For Counter mode, *IV* is the initial value for the counter. + """ + + @overload + def __init__(self, key: AnyReadableBuf, mode: int, IV: AnyReadableBuf, /): + """ + Initialize cipher object, suitable for encryption/decryption. Note: + after initialization, cipher object can be use only either for + encryption or decryption. Running decrypt() operation after encrypt() + or vice versa is not supported. + + Parameters are: + + * *key* is an encryption/decryption key (bytes-like). + * *mode* is: + + * ``1`` (or ``cryptolib.MODE_ECB`` if it exists) for Electronic Code Book (ECB). + * ``2`` (or ``cryptolib.MODE_CBC`` if it exists) for Cipher Block Chaining (CBC). + * ``6`` (or ``cryptolib.MODE_CTR`` if it exists) for Counter mode (CTR). + + * *IV* is an initialization vector for CBC mode. + * For Counter mode, *IV* is the initial value for the counter. + """ + + @overload + def __init__(self, key: AnyReadableBuf, mode: int, /): + """ + Initialize cipher object, suitable for encryption/decryption. Note: + after initialization, cipher object can be use only either for + encryption or decryption. Running decrypt() operation after encrypt() + or vice versa is not supported. + + Parameters are: + + * *key* is an encryption/decryption key (bytes-like). + * *mode* is: + + * ``1`` (or ``cryptolib.MODE_ECB`` if it exists) for Electronic Code Book (ECB). + * ``2`` (or ``cryptolib.MODE_CBC`` if it exists) for Cipher Block Chaining (CBC). + * ``6`` (or ``cryptolib.MODE_CTR`` if it exists) for Counter mode (CTR). + + * *IV* is an initialization vector for CBC mode. + * For Counter mode, *IV* is the initial value for the counter. + """ + + @overload + def __init__(self, key: AnyReadableBuf, mode: int, IV: AnyReadableBuf, /): + """ + Initialize cipher object, suitable for encryption/decryption. Note: + after initialization, cipher object can be use only either for + encryption or decryption. Running decrypt() operation after encrypt() + or vice versa is not supported. + + Parameters are: + + * *key* is an encryption/decryption key (bytes-like). + * *mode* is: + + * ``1`` (or ``cryptolib.MODE_ECB`` if it exists) for Electronic Code Book (ECB). + * ``2`` (or ``cryptolib.MODE_CBC`` if it exists) for Cipher Block Chaining (CBC). + * ``6`` (or ``cryptolib.MODE_CTR`` if it exists) for Counter mode (CTR). + + * *IV* is an initialization vector for CBC mode. + * For Counter mode, *IV* is the initial value for the counter. + """ + + @overload + def encrypt(self, in_buf: AnyReadableBuf, /) -> bytes: + """ + Encrypt *in_buf*. If no *out_buf* is given result is returned as a + newly allocated `bytes` object. Otherwise, result is written into + mutable buffer *out_buf*. *in_buf* and *out_buf* can also refer + to the same mutable buffer, in which case data is encrypted in-place. + """ + + @overload + def encrypt(self, in_buf: AnyReadableBuf, out_buf: AnyWritableBuf, /) -> None: + """ + Encrypt *in_buf*. If no *out_buf* is given result is returned as a + newly allocated `bytes` object. Otherwise, result is written into + mutable buffer *out_buf*. *in_buf* and *out_buf* can also refer + to the same mutable buffer, in which case data is encrypted in-place. + """ + + @overload + def encrypt(self, in_buf: AnyReadableBuf, /) -> bytes: + """ + Encrypt *in_buf*. If no *out_buf* is given result is returned as a + newly allocated `bytes` object. Otherwise, result is written into + mutable buffer *out_buf*. *in_buf* and *out_buf* can also refer + to the same mutable buffer, in which case data is encrypted in-place. + """ + + @overload + def encrypt(self, in_buf: AnyReadableBuf, out_buf: AnyWritableBuf, /) -> None: + """ + Encrypt *in_buf*. If no *out_buf* is given result is returned as a + newly allocated `bytes` object. Otherwise, result is written into + mutable buffer *out_buf*. *in_buf* and *out_buf* can also refer + to the same mutable buffer, in which case data is encrypted in-place. + """ + + @overload + def decrypt(self, in_buf: AnyReadableBuf, /) -> bytes: + """ + Like `encrypt()`, but for decryption. + """ + + @overload + def decrypt(self, in_buf: AnyReadableBuf, out_buf: AnyWritableBuf, /) -> None: + """ + Like `encrypt()`, but for decryption. + """ + + @overload + def decrypt(self, in_buf: AnyReadableBuf, /) -> bytes: + """ + Like `encrypt()`, but for decryption. + """ + + @overload + def decrypt(self, in_buf: AnyReadableBuf, out_buf: AnyWritableBuf, /) -> None: + """ + Like `encrypt()`, but for decryption. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/deflate/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/deflate/__init__.pyi new file mode 100644 index 00000000..89cfde45 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/deflate/__init__.pyi @@ -0,0 +1,81 @@ +""" +Deflate compression & decompression. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/deflate.html + +This module allows compression and decompression of binary data with the +`DEFLATE algorithm `_ +(commonly used in the zlib library and gzip archiver). + +**Availability:** + +* Added in MicroPython v1.21. + +* Decompression: Enabled via the ``MICROPY_PY_DEFLATE`` build option, on by default + on ports with the "extra features" level or higher (which is most boards). + +* Compression: Enabled via the ``MICROPY_PY_DEFLATE_COMPRESS`` build option, on + by default on ports with the "full features" level or higher (generally this means + you need to build your own firmware to enable this). +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/deflate.rst +from __future__ import annotations + +from _typeshed import Incomplete + +AUTO: Incomplete +"""Supported values for the *format* parameter.""" +RAW: Incomplete +"""Supported values for the *format* parameter.""" +ZLIB: Incomplete +"""Supported values for the *format* parameter.""" +GZIP: Incomplete +"""Supported values for the *format* parameter.""" + +class DeflateIO: + """ + This class can be used to wrap a *stream* which is any + :term:`stream-like ` object such as a file, socket, or stream + (including :class:`io.BytesIO`). It is itself a stream and implements the + standard read/readinto/write/close methods. + + The *stream* must be a blocking stream. Non-blocking streams are currently + not supported. + + The *format* can be set to any of the constants defined below, and defaults + to ``AUTO`` which for decompressing will auto-detect gzip or zlib streams, + and for compressing it will generate a raw stream. + + The *wbits* parameter sets the base-2 logarithm of the DEFLATE dictionary + window size. So for example, setting *wbits* to ``10`` sets the window size + to 1024 bytes. Valid values are ``5`` to ``15`` inclusive (corresponding to + window sizes of 32 to 32k bytes). + + If *wbits* is set to ``0`` (the default), then for compression a window size + of 256 bytes will be used (as if *wbits* was set to 8). For decompression, it + depends on the format: + + * ``RAW`` will use 256 bytes (corresponding to *wbits* set to 8). + * ``ZLIB`` (or ``AUTO`` with zlib detected) will use the value from the zlib + header. + * ``GZIP`` (or ``AUTO`` with gzip detected) will use 32 kilobytes + (corresponding to *wbits* set to 15). + + See the :ref:`window size ` notes below for more information + about the window size, zlib, and gzip streams. + + If *close* is set to ``True`` then the underlying stream will be closed + automatically when the :class:`deflate.DeflateIO` stream is closed. This is + useful if you want to return a :class:`deflate.DeflateIO` stream that wraps + another stream and not have the caller need to know about managing the + underlying stream. + + If compression is enabled, a given :class:`deflate.DeflateIO` instance + supports both reading and writing. For example, a bidirectional stream like + a socket can be wrapped, which allows for compression/decompression in both + directions. + """ + + def __init__(self, stream, format=AUTO, wbits=0, close=False, /) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/errno/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/errno/__init__.pyi new file mode 100644 index 00000000..4bce2c48 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/errno/__init__.pyi @@ -0,0 +1,53 @@ +""" +System error codes. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/errno.html + +CPython module: :mod:`python:errno` https://docs.python.org/3/library/errno.html . + +This module provides access to symbolic error codes for `OSError` exception. +A particular inventory of codes depends on :term:`MicroPython port`. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/errno.rst +from __future__ import annotations + +from typing import Dict + +from _typeshed import Incomplete + +EEXIST: Incomplete +"""\ +Error codes, based on ANSI C/POSIX standard. All error codes start with +"E". As mentioned above, inventory of the codes depends on +:term:`MicroPython port`. Errors are usually accessible as ``exc.errno`` +where ``exc`` is an instance of `OSError`. Usage example:: + +try: +os.mkdir("my_dir") +except OSError as exc: +if exc.errno == errno.EEXIST: +print("Directory already exists") +""" +EAGAIN: Incomplete +"""\ +Error codes, based on ANSI C/POSIX standard. All error codes start with +"E". As mentioned above, inventory of the codes depends on +:term:`MicroPython port`. Errors are usually accessible as ``exc.errno`` +where ``exc`` is an instance of `OSError`. Usage example:: + +try: +os.mkdir("my_dir") +except OSError as exc: +if exc.errno == errno.EEXIST: +print("Directory already exists") +""" +errorcode: Dict +"""\ +Dictionary mapping numeric error codes to strings with symbolic error +code (see above):: + +>>> print(errno.errorcode[errno.EEXIST]) +EEXIST +""" diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/esp/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/esp/__init__.pyi new file mode 100644 index 00000000..a0e38d5d --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/esp/__init__.pyi @@ -0,0 +1,243 @@ +""" +Functions related to the ESP8266 and ESP32. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/esp.html + +The ``esp`` module contains specific functions related to both the ESP8266 and +ESP32 modules. Some functions are only available on one or the other of these +ports. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/esp.rst +from __future__ import annotations + +from typing import Any, Optional, overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete + +# noinspection PyShadowingNames +@overload +def sleep_type(sleep_type: int, /) -> None: + """ + **Note**: ESP8266 only + + Get or set the sleep type. + + If the *sleep_type* parameter is provided, sets the sleep type to its + value. If the function is called without parameters, returns the current + sleep type. + + The possible sleep types are defined as constants: + + * ``SLEEP_NONE`` -- all functions enabled, + * ``SLEEP_MODEM`` -- modem sleep, shuts down the WiFi Modem circuit. + * ``SLEEP_LIGHT`` -- light sleep, shuts down the WiFi Modem circuit + and suspends the processor periodically. + + The system enters the set sleep mode automatically when possible. + """ + +# noinspection PyShadowingNames +@overload +def sleep_type() -> int: + """ + **Note**: ESP8266 only + + Get or set the sleep type. + + If the *sleep_type* parameter is provided, sets the sleep type to its + value. If the function is called without parameters, returns the current + sleep type. + + The possible sleep types are defined as constants: + + * ``SLEEP_NONE`` -- all functions enabled, + * ``SLEEP_MODEM`` -- modem sleep, shuts down the WiFi Modem circuit. + * ``SLEEP_LIGHT`` -- light sleep, shuts down the WiFi Modem circuit + and suspends the processor periodically. + + The system enters the set sleep mode automatically when possible. + """ + +def deepsleep(time_us: int = 0, /) -> None: + """ + **Note**: ESP8266 only - use `machine.deepsleep()` on ESP32 + + Enter deep sleep. + + The whole module powers down, except for the RTC clock circuit, which can + be used to restart the module after the specified time if the pin 16 is + connected to the reset pin. Otherwise the module will sleep until manually + reset. + """ + ... + +def flash_id() -> int: + """ + **Note**: ESP8266 only + + Read the device ID of the flash memory. + """ + ... + +def flash_size() -> int: + """ + Read the total size of the flash memory. + """ + ... + +def flash_user_start() -> int: + """ + Read the memory offset at which the user flash space begins. + """ + ... + +@overload +def flash_read(byte_offset: int, length_or_buffer: int, /) -> bytes: + """ + Reads bytes from the flash memory starting at the given byte offset. + If length is specified: reads the given length of bytes and returns them as ``bytes``. + If a buffer is given: reads the buf length of bytes and writes them into the buffer. + Note: esp32 doesn't support passing a length, just a buffer. + """ + +@overload +def flash_read(byte_offset: int, length_or_buffer: AnyWritableBuf, /) -> None: + """ + Reads bytes from the flash memory starting at the given byte offset. + If length is specified: reads the given length of bytes and returns them as ``bytes``. + If a buffer is given: reads the buf length of bytes and writes them into the buffer. + Note: esp32 doesn't support passing a length, just a buffer. + """ + +def flash_write(byte_offset: int, bytes: AnyReadableBuf, /) -> None: + """ + Writes given bytes buffer to the flash memory starting at the given byte offset. + """ + +def flash_erase(sector_no: int, /) -> None: + """ + Erases the given *sector* of flash memory. + """ + +def osdebug(uart_no, level: Optional[Any] = None) -> Incomplete: + """ + :no-index: + + ``Note:`` This is the ESP32 form of this function. + + Change the level of OS serial debug log messages. On boot, OS + serial debug log messages are limited to Error output only. + + The behaviour of this function depends on the arguments passed to it. The + following combinations are supported: + + ``osdebug(None)`` restores the default OS debug log message level + (``LOG_ERROR``). + + ``osdebug(0)`` enables all available OS debug log messages (in the + default build configuration this is ``LOG_INFO``). + + ``osdebug(0, level)`` sets the OS debug log message level to the + specified value. The log levels are defined as constants: + + * ``LOG_NONE`` -- No log output + * ``LOG_ERROR`` -- Critical errors, software module can not recover on its own + * ``LOG_WARN`` -- Error conditions from which recovery measures have been taken + * ``LOG_INFO`` -- Information messages which describe normal flow of events + * ``LOG_DEBUG`` -- Extra information which is not necessary for normal use (values, pointers, sizes, etc) + * ``LOG_VERBOSE`` -- Bigger chunks of debugging information, or frequent messages + which can potentially flood the output + + ``Note:`` ``LOG_DEBUG`` and ``LOG_VERBOSE`` are not compiled into the + MicroPython binary by default, to save size. A custom build with a + modified "``sdkconfig``" source file is needed to see any output + at these log levels. + + ``Note:`` Log output on ESP32 is automatically suspended in "Raw REPL" mode, + to prevent communications issues. This means OS level logging is never + seen when using ``mpremote run`` and similar tools. + """ + ... + +@overload +def set_native_code_location(start: None, length: None, /) -> None: + """ + **Note**: ESP8266 only + + Set the location that native code will be placed for execution after it is + compiled. Native code is emitted when the ``@micropython.native``, + ``@micropython.viper`` and ``@micropython.asm_xtensa`` decorators are applied + to a function. The ESP8266 must execute code from either iRAM or the lower + 1MByte of flash (which is memory mapped), and this function controls the + location. + + If *start* and *length* are both ``None`` then the native code location is + set to the unused portion of memory at the end of the iRAM1 region. The + size of this unused portion depends on the firmware and is typically quite + small (around 500 bytes), and is enough to store a few very small + functions. The advantage of using this iRAM1 region is that it does not + get worn out by writing to it. + + If neither *start* nor *length* are ``None`` then they should be integers. + *start* should specify the byte offset from the beginning of the flash at + which native code should be stored. *length* specifies how many bytes of + flash from *start* can be used to store native code. *start* and *length* + should be multiples of the sector size (being 4096 bytes). The flash will + be automatically erased before writing to it so be sure to use a region of + flash that is not otherwise used, for example by the firmware or the + filesystem. + + When using the flash to store native code *start+length* must be less + than or equal to 1MByte. Note that the flash can be worn out if repeated + erasures (and writes) are made so use this feature sparingly. + In particular, native code needs to be recompiled and rewritten to flash + on each boot (including wake from deepsleep). + + In both cases above, using iRAM1 or flash, if there is no more room left + in the specified region then the use of a native decorator on a function + will lead to `MemoryError` exception being raised during compilation of + that function. + """ + +@overload +def set_native_code_location(start: int, length: int, /) -> None: + """ + **Note**: ESP8266 only + + Set the location that native code will be placed for execution after it is + compiled. Native code is emitted when the ``@micropython.native``, + ``@micropython.viper`` and ``@micropython.asm_xtensa`` decorators are applied + to a function. The ESP8266 must execute code from either iRAM or the lower + 1MByte of flash (which is memory mapped), and this function controls the + location. + + If *start* and *length* are both ``None`` then the native code location is + set to the unused portion of memory at the end of the iRAM1 region. The + size of this unused portion depends on the firmware and is typically quite + small (around 500 bytes), and is enough to store a few very small + functions. The advantage of using this iRAM1 region is that it does not + get worn out by writing to it. + + If neither *start* nor *length* are ``None`` then they should be integers. + *start* should specify the byte offset from the beginning of the flash at + which native code should be stored. *length* specifies how many bytes of + flash from *start* can be used to store native code. *start* and *length* + should be multiples of the sector size (being 4096 bytes). The flash will + be automatically erased before writing to it so be sure to use a region of + flash that is not otherwise used, for example by the firmware or the + filesystem. + + When using the flash to store native code *start+length* must be less + than or equal to 1MByte. Note that the flash can be worn out if repeated + erasures (and writes) are made so use this feature sparingly. + In particular, native code needs to be recompiled and rewritten to flash + on each boot (including wake from deepsleep). + + In both cases above, using iRAM1 or flash, if there is no more room left + in the specified region then the use of a native decorator on a function + will lead to `MemoryError` exception being raised during compilation of + that function. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/esp32/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/esp32/__init__.pyi new file mode 100644 index 00000000..5ed83609 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/esp32/__init__.pyi @@ -0,0 +1,508 @@ +""" +Functionality specific to the ESP32. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/esp32.html + +The ``esp32`` module contains functions and classes specifically aimed at +controlling ESP32 modules. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/esp32.rst +from __future__ import annotations + +from typing import Any, List, Optional, Tuple, overload + +from _mpy_shed import AbstractBlockDev, AnyReadableBuf +from _typeshed import Incomplete +from machine import Pin + +HEAP_DATA: Incomplete +"""Used in `idf_heap_info`.""" +HEAP_EXEC: Incomplete +"""Used in `idf_heap_info`.""" +WAKEUP_ALL_LOW: Incomplete +"""Selects the wake level for pins.""" +WAKEUP_ANY_HIGH: Incomplete +"""Selects the wake level for pins.""" + +class Partition(AbstractBlockDev): + """ + This class gives access to the partitions in the device's flash memory and includes + methods to enable over-the-air (OTA) updates. + """ + + BOOT: Incomplete + """\ + Used in the `Partition` constructor to fetch various partitions: ``BOOT`` is the + partition that will be booted at the next reset and ``RUNNING`` is the currently + running partition. + """ + RUNNING: Incomplete + """\ + Used in the `Partition` constructor to fetch various partitions: ``BOOT`` is the + partition that will be booted at the next reset and ``RUNNING`` is the currently + running partition. + """ + TYPE_APP: Incomplete + """\ + Used in `Partition.find` to specify the partition type: ``APP`` is for bootable + firmware partitions (typically labelled ``factory``, ``ota_0``, ``ota_1``), and + ``DATA`` is for other partitions, e.g. ``nvs``, ``otadata``, ``phy_init``, ``vfs``. + """ + TYPE_DATA: Incomplete + """\ + Used in `Partition.find` to specify the partition type: ``APP`` is for bootable + firmware partitions (typically labelled ``factory``, ``ota_0``, ``ota_1``), and + ``DATA`` is for other partitions, e.g. ``nvs``, ``otadata``, ``phy_init``, ``vfs``. + """ + def __init__(self, id: str, block_size=4096, /) -> None: + """ + Create an object representing a partition. + + """ + + @staticmethod + def find(type: int = TYPE_APP, subtype: int = 0xFF, label: str | None = None, /) -> List: + """ + Find a partition specified by *type*, *subtype* and *label*. Returns a + (possibly empty) list of Partition objects. Note: ``subtype=0xff`` matches any subtype + and ``label=None`` matches any label. + + *block_size* specifies the byte size of an individual block used by the returned + objects. + """ + ... + + def info(self) -> Tuple: + """ + Returns a 6-tuple ``(type, subtype, addr, size, label, encrypted)``. + """ + ... + + def readblocks(self, block_num, buf, offset: Optional[int] = 0) -> None: ... + def writeblocks(self, block_num, buf, offset: Optional[int] = 0) -> None: ... + def ioctl(self, cmd, arg) -> Incomplete: + """ + These methods implement the simple and :ref:`extended + ` block protocol defined by + :class:`vfs.AbstractBlockDev`. + """ + ... + + def set_boot(self) -> None: + """ + Sets the partition as the boot partition. + + ``Note:`` Do not enter :func:`deepsleep` after changing + the OTA boot partition, without first performing a hard + :func:`reset` or power cycle. This ensures the bootloader + will validate the new image before booting. + """ + ... + + def get_next_update(self) -> Partition: + """ + Gets the next update partition after this one, and returns a new Partition object. + Typical usage is ``Partition(Partition.RUNNING).get_next_update()`` + which returns the next partition to update given the current running one. + """ + ... + + @classmethod + def mark_app_valid_cancel_rollback(cls) -> None: + """ + Signals that the current boot is considered successful. + Calling ``mark_app_valid_cancel_rollback`` is required on the first boot of a new + partition to avoid an automatic rollback at the next boot. + This uses the ESP-IDF "app rollback" feature with "CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE" + and an ``OSError(-261)`` is raised if called on firmware that doesn't have the + feature enabled. + It is OK to call ``mark_app_valid_cancel_rollback`` on every boot and it is not + necessary when booting firmware that was loaded using esptool. + """ + ... + +class RMT: + """ + The RMT (Remote Control) module, specific to the ESP32, was originally designed + to send and receive infrared remote control signals. However, due to a flexible + design and very accurate (as low as 12.5ns) pulse generation, it can also be + used to transmit or receive many other types of digital signals:: + + import esp32 + from machine import Pin + + r = esp32.RMT(0, pin=Pin(18), clock_div=8) + r # RMT(channel=0, pin=18, source_freq=80000000, clock_div=8, idle_level=0) + + # To apply a carrier frequency to the high output + r = esp32.RMT(0, pin=Pin(18), clock_div=8, tx_carrier=(38000, 50, 1)) + + # The channel resolution is 100ns (1/(source_freq/clock_div)). + r.write_pulses((1, 20, 2, 40), 0) # Send 0 for 100ns, 1 for 2000ns, 0 for 200ns, 1 for 4000ns + + The input to the RMT module is an 80MHz clock (in the future it may be able to + configure the input clock but, for now, it's fixed). ``clock_div`` *divides* + the clock input which determines the resolution of the RMT channel. The + numbers specified in ``write_pulses`` are multiplied by the resolution to + define the pulses. + + ``clock_div`` is an 8-bit divider (0-255) and each pulse can be defined by + multiplying the resolution by a 15-bit (0-32,768) number. There are eight + channels (0-7) and each can have a different clock divider. + + So, in the example above, the 80MHz clock is divided by 8. Thus the + resolution is (1/(80Mhz/8)) 100ns. Since the ``start`` level is 0 and toggles + with each number, the bitstream is ``0101`` with durations of [100ns, 2000ns, + 100ns, 4000ns]. + + For more details see Espressif's `ESP-IDF RMT documentation. + `_. + + .. Warning:: + The current MicroPython RMT implementation lacks some features, most notably + receiving pulses. RMT should be considered a + *beta feature* and the interface may change in the future. + """ + + PULSE_MAX: int + """Maximum integer that can be set for a pulse duration.""" + def __init__( + self, + channel: int, + /, + *, + pin: Pin | None = None, + clock_div: int = 8, + idle_level: bool = False, + tx_carrier: Tuple[int, int, bool] | None = None, + ) -> None: + """ + This class provides access to one of the eight RMT channels. *channel* is + required and identifies which RMT channel (0-7) will be configured. *pin*, + also required, configures which Pin is bound to the RMT channel. *clock_div* + is an 8-bit clock divider that divides the source clock (80MHz) to the RMT + channel allowing the resolution to be specified. *idle_level* specifies + what level the output will be when no transmission is in progress and can + be any value that converts to a boolean, with ``True`` representing high + voltage and ``False`` representing low. + + To enable the transmission carrier feature, *tx_carrier* should be a tuple + of three positive integers: carrier frequency, duty percent (``0`` to + ``100``) and the output level to apply the carrier to (a boolean as per + *idle_level*). + """ + + @classmethod + def source_freq(cls) -> int: + """ + Returns the source clock frequency. Currently the source clock is not + configurable so this will always return 80MHz. + """ + ... + + def clock_div(self) -> int: + """ + Return the clock divider. Note that the channel resolution is + ``1 / (source_freq / clock_div)``. + """ + ... + + def wait_done(self, *, timeout: int = 0) -> bool: + """ + Returns ``True`` if the channel is idle or ``False`` if a sequence of + pulses started with `RMT.write_pulses` is being transmitted. If the + *timeout* keyword argument is given then block for up to this many + milliseconds for transmission to complete. + """ + ... + + def loop(self, enable_loop: bool, /) -> None: + """ + Configure looping on the channel. *enable_loop* is bool, set to ``True`` to + enable looping on the *next* call to `RMT.write_pulses`. If called with + ``False`` while a looping sequence is currently being transmitted then the + current loop iteration will be completed and then transmission will stop. + """ + ... + + @overload + def write_pulses(self, duration: List[int] | Tuple[int, ...], data: bool = True, /) -> None: + """ + Begin transmitting a sequence. There are three ways to specify this: + + **Mode 1:** *duration* is a list or tuple of durations. The optional *data* + argument specifies the initial output level. The output level will toggle + after each duration. + + **Mode 2:** *duration* is a positive integer and *data* is a list or tuple + of output levels. *duration* specifies a fixed duration for each. + + **Mode 3:** *duration* and *data* are lists or tuples of equal length, + specifying individual durations and the output level for each. + + Durations are in integer units of the channel resolution (as + described above), between 1 and ``PULSE_MAX`` units. Output levels + are any value that can be converted to a boolean, with ``True`` + representing high voltage and ``False`` representing low. + + If transmission of an earlier sequence is in progress then this method will + block until that transmission is complete before beginning the new sequence. + + If looping has been enabled with `RMT.loop`, the sequence will be + repeated indefinitely. Further calls to this method will block until the + end of the current loop iteration before immediately beginning to loop the + new sequence of pulses. Looping sequences longer than 126 pulses is not + supported by the hardware. + """ + + @overload + def write_pulses(self, duration: int, data: List[bool] | Tuple[bool, ...], /) -> None: + """ + Begin transmitting a sequence. There are three ways to specify this: + + **Mode 1:** *duration* is a list or tuple of durations. The optional *data* + argument specifies the initial output level. The output level will toggle + after each duration. + + **Mode 2:** *duration* is a positive integer and *data* is a list or tuple + of output levels. *duration* specifies a fixed duration for each. + + **Mode 3:** *duration* and *data* are lists or tuples of equal length, + specifying individual durations and the output level for each. + + Durations are in integer units of the channel resolution (as + described above), between 1 and ``PULSE_MAX`` units. Output levels + are any value that can be converted to a boolean, with ``True`` + representing high voltage and ``False`` representing low. + + If transmission of an earlier sequence is in progress then this method will + block until that transmission is complete before beginning the new sequence. + + If looping has been enabled with `RMT.loop`, the sequence will be + repeated indefinitely. Further calls to this method will block until the + end of the current loop iteration before immediately beginning to loop the + new sequence of pulses. Looping sequences longer than 126 pulses is not + supported by the hardware. + """ + + @overload + def write_pulses( + self, + duration: List[int] | Tuple[int, ...], + data: List[bool] | Tuple[bool, ...], + /, + ) -> None: + """ + Begin transmitting a sequence. There are three ways to specify this: + + **Mode 1:** *duration* is a list or tuple of durations. The optional *data* + argument specifies the initial output level. The output level will toggle + after each duration. + + **Mode 2:** *duration* is a positive integer and *data* is a list or tuple + of output levels. *duration* specifies a fixed duration for each. + + **Mode 3:** *duration* and *data* are lists or tuples of equal length, + specifying individual durations and the output level for each. + + Durations are in integer units of the channel resolution (as + described above), between 1 and ``PULSE_MAX`` units. Output levels + are any value that can be converted to a boolean, with ``True`` + representing high voltage and ``False`` representing low. + + If transmission of an earlier sequence is in progress then this method will + block until that transmission is complete before beginning the new sequence. + + If looping has been enabled with `RMT.loop`, the sequence will be + repeated indefinitely. Further calls to this method will block until the + end of the current loop iteration before immediately beginning to loop the + new sequence of pulses. Looping sequences longer than 126 pulses is not + supported by the hardware. + """ + + @staticmethod + def bitstream_channel(value: Optional[Any] = None) -> int: + """ + Select which RMT channel is used by the `machine.bitstream` implementation. + *value* can be ``None`` or a valid RMT channel number. The default RMT + channel is the highest numbered one. + + Passing in ``None`` disables the use of RMT and instead selects a bit-banging + implementation for `machine.bitstream`. + + Passing in no argument will not change the channel. This function returns + the current channel number. + """ + ... + +class ULP: + """ + This class provides access to the Ultra-Low-Power co-processor. + """ + + def __init__(self) -> None: + """ + This class provides access to the Ultra-Low-Power co-processor. + """ + + def set_wakeup_period(self, period_index: int, period_us: int, /) -> None: + """ + Set the wake-up period. + """ + ... + + def load_binary(self, load_addr: int, program_binary: AnyReadableBuf, /) -> None: + """ + Load a *program_binary* into the ULP at the given *load_addr*. + """ + ... + + def run(self, entry_point: int, /) -> None: + """ + Start the ULP running at the given *entry_point*. + """ + ... + +class NVS: + """ + This class gives access to the Non-Volatile storage managed by ESP-IDF. The NVS is partitioned + into namespaces and each namespace contains typed key-value pairs. The keys are strings and the + values may be various integer types, strings, and binary blobs. The driver currently only + supports 32-bit signed integers and blobs. + + .. warning:: + + Changes to NVS need to be committed to flash by calling the commit method. Failure + to call commit results in changes being lost at the next reset. + """ + + def __init__(self, namespace: str, /) -> None: + """ + Create an object providing access to a namespace (which is automatically created if not + present). + """ + + def set_i32(self, key: str, value: int, /) -> None: + """ + Sets a 32-bit signed integer value for the specified key. Remember to call *commit*! + """ + ... + + def get_i32(self, key: str, /) -> int: + """ + Returns the signed integer value for the specified key. Raises an OSError if the key does not + exist or has a different type. + """ + ... + + def set_blob(self, key: str, value: AnyReadableBuf, /) -> None: + """ + Sets a binary blob value for the specified key. The value passed in must support the buffer + protocol, e.g. bytes, bytearray, str. (Note that esp-idf distinguishes blobs and strings, this + method always writes a blob even if a string is passed in as value.) + Remember to call *commit*! + """ + ... + + def get_blob(self, key: str, buffer: bytearray, /) -> int: + """ + Reads the value of the blob for the specified key into the buffer, which must be a bytearray. + Returns the actual length read. Raises an OSError if the key does not exist, has a different + type, or if the buffer is too small. + """ + ... + + def erase_key(self, key: str, /) -> None: + """ + Erases a key-value pair. + """ + ... + + def commit(self) -> None: + """ + Commits changes made by *set_xxx* methods to flash. + """ + ... + +def wake_on_touch(wake: bool, /) -> None: + """ + Configure whether or not a touch will wake the device from sleep. + *wake* should be a boolean value. + """ + ... + +def wake_on_ulp(wake) -> None: + """ + Configure whether or not the Ultra-Low-Power co-processor can wake the + device from sleep. *wake* should be a boolean value. + """ + ... + +def wake_on_ext0(pin: Pin | None, level: int, /) -> None: + """ + Configure how EXT0 wakes the device from sleep. *pin* can be ``None`` + or a valid Pin object. *level* should be ``esp32.WAKEUP_ALL_LOW`` or + ``esp32.WAKEUP_ANY_HIGH``. + """ + ... + +def wake_on_ext1(pins: List[Pin] | Tuple[Pin, ...] | None, level: int, /) -> None: + """ + Configure how EXT1 wakes the device from sleep. *pins* can be ``None`` + or a tuple/list of valid Pin objects. *level* should be ``esp32.WAKEUP_ALL_LOW`` + or ``esp32.WAKEUP_ANY_HIGH``. + """ + ... + +def gpio_deep_sleep_hold(enable) -> None: + """ + Configure whether non-RTC GPIO pin configuration is retained during + deep-sleep mode for held pads. *enable* should be a boolean value. + """ + ... + +def raw_temperature() -> int: + """ + Read the raw value of the internal temperature sensor, returning an integer. + """ + ... + +def idf_heap_info(capabilities: int) -> List[Tuple]: + """ + Returns information about the ESP-IDF heap memory regions. One of them contains + the MicroPython heap and the others are used by ESP-IDF, e.g., for network + buffers and other data. This data is useful to get a sense of how much memory + is available to ESP-IDF and the networking stack in particular. It may shed + some light on situations where ESP-IDF operations fail due to allocation failures. + + The capabilities parameter corresponds to ESP-IDF's ``MALLOC_CAP_XXX`` values but the + two most useful ones are predefined as `esp32.HEAP_DATA` for data heap regions and + `esp32.HEAP_EXEC` for executable regions as used by the native code emitter. + + The return value is a list of 4-tuples, where each 4-tuple corresponds to one heap + and contains: the total bytes, the free bytes, the largest free block, and + the minimum free seen over time. + + Example after booting:: + + >>> import esp32; esp32.idf_heap_info(esp32.HEAP_DATA) + [(240, 0, 0, 0), (7288, 0, 0, 0), (16648, 4, 4, 4), (79912, 35712, 35512, 35108), + (15072, 15036, 15036, 15036), (113840, 0, 0, 0)] + + ``Note:`` Free IDF heap memory in the `esp32.HEAP_DATA` region is available + to be automatically added to the MicroPython heap to prevent a + MicroPython allocation from failing. However, the information returned + here is otherwise *not* useful to troubleshoot Python allocation + failures. :func:`micropython.mem_info()` and :func:`gc.mem_free()` should + be used instead: + + The "max new split" value in :func:`micropython.mem_info()` output + corresponds to the largest free block of ESP-IDF heap that could be + automatically added on demand to the MicroPython heap. + + The result of :func:`gc.mem_free()` is the total of the current "free" + and "max new split" values printed by :func:`micropython.mem_info()`. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/espnow/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/espnow/__init__.pyi new file mode 100644 index 00000000..2d174243 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/espnow/__init__.pyi @@ -0,0 +1,577 @@ +""" +ESP-NOW :doc:`asyncio` support. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/aioespnow.html +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/espnow.rst +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/espnow.rst +from __future__ import annotations + +from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union + +from _espnow import ESPNowBase # type: ignore +from _typeshed import Incomplete, TypeAlias +from typing_extensions import TypeAlias + +_MACAddress: TypeAlias = bytes +_PeerInfo: TypeAlias = Tuple[_MACAddress, bytes, int, int, bool] + +MAX_DATA_LEN: Incomplete = 250 +KEY_LEN: Incomplete = 16 +ADDR_LEN: Incomplete = 6 +MAX_TOTAL_PEER_NUM: Incomplete = 20 +MAX_ENCRYPT_PEER_NUM: Incomplete = 6 + +class ESPNow(ESPNowBase, Iterator): + """ + Returns the singleton ESPNow object. As this is a singleton, all calls to + `espnow.ESPNow()` return a reference to the same object. + + .. note:: + Some methods are available only on the ESP32 due to code size + restrictions on the ESP8266 and differences in the Espressif API. + """ + + peers_table: Dict + """\ + A reference to the **peer device table**: a dict of known peer devices + and rssi values:: + + {peer: [rssi, time_ms], ...} + + where: + + - ``peer`` is the peer MAC address (as `bytes`); + - ``rssi`` is the wifi signal strength in dBm (-127 to 0) of the last + message received from the peer; and + - ``time_ms`` is the time the message was received (in milliseconds since + system boot - wraps every 12 days). + + Example:: + + >>> e.peers_table + {b'\xaa\xaa\xaa\xaa\xaa\xaa': [-31, 18372], + b'\xbb\xbb\xbb\xbb\xbb\xbb': [-43, 12541]} + + **Note**: the ``mac`` addresses returned by `recv()` are references to + the ``peer`` key values in the **peer device table**. + + **Note**: RSSI and timestamp values in the device table are updated only + when the message is read by the application. + """ + def __init__(self) -> None: ... + def active(self, flag: Optional[Any] = None) -> Incomplete: + """ + Initialise or de-initialise the ESP-NOW communication protocol depending on + the value of the ``flag`` optional argument. + + Arguments: + + - *flag*: Any python value which can be converted to a boolean type. + + - ``True``: Prepare the software and hardware for use of the ESP-NOW + communication protocol, including: + + - initialise the ESPNow data structures, + - allocate the recv data buffer, + - invoke esp_now_init() and + - register the send and recv callbacks. + + - ``False``: De-initialise the Espressif ESP-NOW software stack + (esp_now_deinit()), disable callbacks, deallocate the recv + data buffer and deregister all peers. + + If *flag* is not provided, return the current status of the ESPNow + interface. + + Returns: + + ``True`` if interface is currently *active*, else ``False``. + """ + ... + + def config(self, param) -> str: + """ + Set or get configuration values of the ESPNow interface. To set values, use + the keyword syntax, and one or more parameters can be set at a time. To get + a value the parameter name should be quoted as a string, and just one + parameter is queried at a time. + + **Note:** *Getting* parameters is not supported on the ESP8266. + + Options: + + *rxbuf*: (default=526) Get/set the size in bytes of the internal + buffer used to store incoming ESPNow packet data. The default size is + selected to fit two max-sized ESPNow packets (250 bytes) with associated + mac_address (6 bytes), a message byte count (1 byte) and RSSI data plus + buffer overhead. Increase this if you expect to receive a lot of large + packets or expect bursty incoming traffic. + + **Note:** The recv buffer is allocated by `ESPNow.active()`. Changing + this value will have no effect until the next call of + `ESPNow.active(True)`. + + *timeout_ms*: (default=300,000) Default timeout (in milliseconds) + for receiving ESPNow messages. If *timeout_ms* is less than zero, then + wait forever. The timeout can also be provided as arg to + `recv()`/`irecv()`/`recvinto()`. + + *rate*: (ESP32 only, IDF>=4.3.0 only) Set the transmission speed for + ESPNow packets. Must be set to a number from the allowed numeric values + in `enum wifi_phy_rate_t + `_. + + Returns: + + ``None`` or the value of the parameter being queried. + + Raises: + + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_INIT")`` if not initialised. + - ``ValueError()`` on invalid configuration options or values. + """ + ... + + def send(self, peer, msg, mac: _MACAddress | None = None, sync=True) -> Incomplete: + """ + Send the data contained in ``msg`` to the peer with given network ``mac`` + address. In the second form, ``mac=None`` and ``sync=True``. The peer must + be registered with `ESPNow.add_peer()` before the + message can be sent. + + Arguments: + + - *mac*: byte string exactly ``espnow.ADDR_LEN`` (6 bytes) long or + ``None``. If *mac* is ``None`` (ESP32 only) the message will be sent + to all registered peers, except any broadcast or multicast MAC + addresses. + + - *msg*: string or byte-string up to ``espnow.MAX_DATA_LEN`` (250) + bytes long. + + - *sync*: + + - ``True``: (default) send ``msg`` to the peer(s) and wait for a + response (or not). + + - ``False`` send ``msg`` and return immediately. Responses from the + peers will be discarded. + + Returns: + + ``True`` if ``sync=False`` or if ``sync=True`` and *all* peers respond, + else ``False``. + + Raises: + + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_INIT")`` if not initialised. + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_FOUND")`` if peer is not registered. + - ``OSError(num, "ESP_ERR_ESPNOW_IF")`` the wifi interface is not + `active()`. + - ``OSError(num, "ESP_ERR_ESPNOW_NO_MEM")`` internal ESP-NOW buffers are + full. + - ``ValueError()`` on invalid values for the parameters. + + **Note**: A peer will respond with success if its wifi interface is + `active()` and set to the same channel as the sender, + regardless of whether it has initialised it's ESP-NOW system or is + actively listening for ESP-NOW traffic (see the Espressif ESP-NOW docs). + """ + ... + + def recv(self, timeout_ms: Optional[Any] = None) -> Union[List, Tuple[None, None]]: + """ + Wait for an incoming message and return the ``mac`` address of the peer and + the message. **Note**: It is **not** necessary to register a peer (using + `add_peer()`) to receive a message from that peer. + + Arguments: + + - *timeout_ms*: (Optional): May have the following values. + + - ``0``: No timeout. Return immediately if no data is available; + - ``> 0``: Specify a timeout value in milliseconds; + - ``< 0``: Do not timeout, ie. wait forever for new messages; or + - ``None`` (or not provided): Use the default timeout value set with + `ESPNow.config()`. + + Returns: + + - ``(None, None)`` if timeout is reached before a message is received, or + + - ``[mac, msg]``: where: + + - ``mac`` is a bytestring containing the address of the device which + sent the message, and + - ``msg`` is a bytestring containing the message. + + Raises: + + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_INIT")`` if not initialised. + - ``OSError(num, "ESP_ERR_ESPNOW_IF")`` if the wifi interface is not + `active()`. + - ``ValueError()`` on invalid *timeout_ms* values. + + `ESPNow.recv()` will allocate new storage for the returned list and the + ``peer`` and ``msg`` bytestrings. This can lead to memory fragmentation if + the data rate is high. See `ESPNow.irecv()` for a memory-friendly + alternative. + """ + ... + + def irecv(self, timeout_ms: Optional[int] = None) -> Tuple[_MACAddress | bytearray | None, bytearray | None]: + """ + Works like `ESPNow.recv()` but will reuse internal bytearrays to store the + return values: ``[mac, msg]``, so that no new memory is allocated on each + call. + + Arguments: + + *timeout_ms*: (Optional) Timeout in milliseconds (see `ESPNow.recv()`). + + Returns: + + - As for `ESPNow.recv()`, except that ``msg`` is a bytearray, instead of + a bytestring. On the ESP8266, ``mac`` will also be a bytearray. + + Raises: + + - See `ESPNow.recv()`. + + **Note:** You may also read messages by iterating over the ESPNow object, + which will use the `irecv()` method for alloc-free reads, eg: :: + + import espnow + e = espnow.ESPNow(); e.active(True) + for mac, msg in e: + print(mac, msg) + if mac is None: # mac, msg will equal (None, None) on timeout + break + """ + ... + + def recvinto(self, data: List, timeout_ms: Optional[int] = None) -> int: + """ + Wait for an incoming message and return the length of the message in bytes. + This is the low-level method used by both `recv()` and + `irecv()` to read messages. + + Arguments: + + *data*: A list of at least two elements, ``[peer, msg]``. ``msg`` must + be a bytearray large enough to hold the message (250 bytes). On the + ESP8266, ``peer`` should be a bytearray of 6 bytes. The MAC address of + the sender and the message will be stored in these bytearrays (see Note + on ESP32 below). + + *timeout_ms*: (Optional) Timeout in milliseconds (see `ESPNow.recv()`). + + Returns: + + - Length of message in bytes or 0 if *timeout_ms* is reached before a + message is received. + + Raises: + + - See `ESPNow.recv()`. + + **Note:** On the ESP32: + + - It is unnecessary to provide a bytearray in the first element of the + ``data`` list because it will be replaced by a reference to a unique + ``peer`` address in the **peer device table** (see `ESPNow.peers_table`). + - If the list is at least 4 elements long, the rssi and timestamp values + will be saved as the 3rd and 4th elements. + """ + ... + + def any(self) -> bool: + """ + Check if data is available to be read with `ESPNow.recv()`. + + For more sophisticated querying of available characters use `select.poll()`:: + + import select + import espnow + + e = espnow.ESPNow() + poll = select.poll() + poll.register(e, select.POLLIN) + poll.poll(timeout) + + Returns: + + ``True`` if data is available to be read, else ``False``. + """ + ... + + def stats(self) -> Tuple[int, int, int, int, int]: + """ + Returns: + + A 5-tuple containing the number of packets sent/received/lost: + + ``(tx_pkts, tx_responses, tx_failures, rx_packets, rx_dropped_packets)`` + + Incoming packets are *dropped* when the recv buffers are full. To reduce + packet loss, increase the ``rxbuf`` config parameters and ensure you are + reading messages as quickly as possible. + + **Note**: Dropped packets will still be acknowledged to the sender as + received. + """ + ... + + def set_pmk(self, pmk: bytes | bytearray | str) -> None: + """ + Set the Primary Master Key (PMK) which is used to encrypt the Local Master + Keys (LMK) for encrypting messages. If this is not set, a default PMK is + used by the underlying Espressif ESP-NOW software stack. + + **Note:** messages will only be encrypted if *lmk* is also set in + `ESPNow.add_peer()` (see `Security + `_ in the Espressif API + docs). + + Arguments: + + *pmk*: Must be a byte string, bytearray or string of length + `espnow.KEY_LEN` (16 bytes). + + Returns: + + ``None`` + + Raises: + + ``ValueError()`` on invalid *pmk* values. + """ + ... + + def add_peer( + self, + mac: _MACAddress, + lmk: Optional[bytes | bytearray | str] = None, + channel: Optional[int] = None, + ifidx: Optional[int] = None, + encrypt: Optional[bool] = True, + ) -> Incomplete: + """ + Add/register the provided *mac* address as a peer. Additional parameters may + also be specified as positional or keyword arguments (any parameter set to + ``None`` will be set to it's default value): + + Arguments: + + - *mac*: The MAC address of the peer (as a 6-byte byte-string). + + - *lmk*: The Local Master Key (LMK) key used to encrypt data + transfers with this peer (unless the *encrypt* parameter is set to + ``False``). Must be: + + - a byte-string or bytearray or string of length ``espnow.KEY_LEN`` + (16 bytes), or + + - any non ``True`` python value (default= ``b''``), signifying an + *empty* key which will disable encryption. + + - *channel*: The wifi channel (2.4GHz) to communicate with this peer. + Must be an integer from 0 to 14. If channel is set to 0 the current + channel of the wifi device will be used. (default=0) + + - *ifidx*: (ESP32 only) Index of the wifi interface which will be + used to send data to this peer. Must be an integer set to + ``network.STA_IF`` (=0) or ``network.AP_IF`` (=1). + (default=0/``network.STA_IF``). See `ESPNow and Wifi Operation`_ + below for more information. + + - *encrypt*: (ESP32 only) If set to ``True`` data exchanged with + this peer will be encrypted with the PMK and LMK. (default = + ``True`` if *lmk* is set to a valid key, else ``False``) + + **ESP8266**: Keyword args may not be used on the ESP8266. + + **Note:** The maximum number of peers which may be registered is 20 + (`espnow.MAX_TOTAL_PEER_NUM`), with a maximum of 6 + (`espnow.MAX_ENCRYPT_PEER_NUM`) of those peers with encryption enabled + (see `ESP_NOW_MAX_ENCRYPT_PEER_NUM `_ in the Espressif API + docs). + + Raises: + + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_INIT")`` if not initialised. + - ``OSError(num, "ESP_ERR_ESPNOW_EXIST")`` if *mac* is already + registered. + - ``OSError(num, "ESP_ERR_ESPNOW_FULL")`` if too many peers are + already registered. + - ``ValueError()`` on invalid keyword args or values. + """ + ... + + def del_peer(self, mac: _MACAddress) -> None: + """ + Deregister the peer associated with the provided *mac* address. + + Returns: + + ``None`` + + Raises: + + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_INIT")`` if not initialised. + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_FOUND")`` if *mac* is not + registered. + - ``ValueError()`` on invalid *mac* values. + """ + ... + + def get_peer(self, mac: _MACAddress) -> _PeerInfo: + """ + Return information on a registered peer. + + Returns: + + ``(mac, lmk, channel, ifidx, encrypt)``: a tuple of the "peer + info" associated with the given *mac* address. + + Raises: + + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_INIT")`` if not initialised. + - ``OSError(num, "ESP_ERR_ESPNOW_NOT_FOUND")`` if *mac* is not + registered. + - ``ValueError()`` on invalid *mac* values. + """ + ... + + def peer_count(self) -> int: + """ + Return the number of registered peers: + + - ``(peer_num, encrypt_num)``: where + + - ``peer_num`` is the number of peers which are registered, and + - ``encrypt_num`` is the number of encrypted peers. + """ + ... + + def get_peers(self) -> Tuple: + """ + Return the "peer info" parameters for all the registered peers (as a tuple + of tuples). + """ + ... + + def mod_peer( + self, + mac: _MACAddress, + lmk: Optional[bytes | bytearray | str] = None, + channel: Optional[int] = None, + ifidx: Optional[int] = None, + encrypt: Optional[bool] = True, + ) -> None: + """ + Modify the parameters of the peer associated with the provided *mac* + address. Parameters may be provided as positional or keyword arguments + (see `ESPNow.add_peer()`). Any parameter that is not set (or set to + ``None``) will retain the existing value for that parameter. + """ + ... + + def irq(self, callback: Callable) -> Incomplete: + """ + Set a callback function to be called *as soon as possible* after a message has + been received from another ESPNow device. The callback function will be called + with the `ESPNow` instance object as an argument. For more reliable operation, + it is recommended to read out as many messages as are available when the + callback is invoked and to set the read timeout to zero, eg: :: + + def recv_cb(e): + while True: # Read out all messages waiting in the buffer + mac, msg = e.irecv(0) # Don't wait if no messages left + if mac is None: + return + print(mac, msg) + e.irq(recv_cb) + + The `irq()` callback method is an alternative method for + processing incoming messages, especially if the data rate is moderate + and the device is *not too busy* but there are some caveats: + + - The scheduler stack *can* overflow and callbacks will be missed if + packets are arriving at a sufficient rate or if other MicroPython components + (eg, bluetooth, machine.Pin.irq(), machine.timer, i2s, ...) are exercising + the scheduler stack. This method may be less reliable for dealing with + bursts of messages, or high throughput or on a device which is busy dealing + with other hardware operations. + + - For more information on *scheduled* function callbacks see: + `micropython.schedule()`. + """ + ... + +class AIOESPNow(ESPNow): + """ + The `AIOESPNow` class inherits all the methods of `ESPNow` + and extends the interface with the following async methods. + """ + + def __init__(self) -> None: ... + async def arecv(self) -> Incomplete: + """ + Asyncio support for `ESPNow.recv()`. Note that this method does not take a + timeout value as argument. + """ + ... + + async def airecv(self) -> Incomplete: + """ + Asyncio support for `ESPNow.irecv()`. Note that this method does not take a + timeout value as argument. + """ + ... + + async def asend(self, msg) -> Incomplete: + """ + Asyncio support for `ESPNow.send()`. + """ + ... + + def _aiter__(self) -> Incomplete: + """ + `AIOESPNow` also supports reading incoming messages by asynchronous + iteration using ``async for``; eg:: + + e = AIOESPNow() + e.active(True) + async def recv_till_halt(e): + async for mac, msg in e: + print(mac, msg) + if msg == b'halt': + break + asyncio.run(recv_till_halt(e)) + """ + ... + + async def __anext__(self) -> Incomplete: + """ + `AIOESPNow` also supports reading incoming messages by asynchronous + iteration using ``async for``; eg:: + + e = AIOESPNow() + e.active(True) + async def recv_till_halt(e): + async for mac, msg in e: + print(mac, msg) + if msg == b'halt': + break + asyncio.run(recv_till_halt(e)) + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/framebuf/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/framebuf/__init__.pyi new file mode 100644 index 00000000..f9ee39e3 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/framebuf/__init__.pyi @@ -0,0 +1,237 @@ +""" +Frame buffer manipulation. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/framebuf.html + +This module provides a general frame buffer which can be used to create +bitmap images, which can then be sent to a display. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/framebuf.rst +from __future__ import annotations + +from typing import Any, Optional, overload + +from _mpy_shed import AnyWritableBuf +from _typeshed import Incomplete + +MONO_VLSB: bytes +"""\ +Monochrome (1-bit) color format +This defines a mapping where the bits in a byte are vertically mapped with +bit 0 being nearest the top of the screen. Consequently each byte occupies +8 vertical pixels. Subsequent bytes appear at successive horizontal +locations until the rightmost edge is reached. Further bytes are rendered +at locations starting at the leftmost edge, 8 pixels lower. +""" +MONO_HLSB: bytes +"""\ +Monochrome (1-bit) color format +This defines a mapping where the bits in a byte are horizontally mapped. +Each byte occupies 8 horizontal pixels with bit 7 being the leftmost. +Subsequent bytes appear at successive horizontal locations until the +rightmost edge is reached. Further bytes are rendered on the next row, one +pixel lower. +""" +MONO_HMSB: bytes +"""\ +Monochrome (1-bit) color format +This defines a mapping where the bits in a byte are horizontally mapped. +Each byte occupies 8 horizontal pixels with bit 0 being the leftmost. +Subsequent bytes appear at successive horizontal locations until the +rightmost edge is reached. Further bytes are rendered on the next row, one +pixel lower. +""" +RGB565: Incomplete +"""Red Green Blue (16-bit, 5+6+5) color format""" +GS2_HMSB: Incomplete +"""Grayscale (2-bit) color format""" +GS4_HMSB: Incomplete +"""Grayscale (4-bit) color format""" +GS8: Incomplete +"""Grayscale (8-bit) color format""" + +class FrameBuffer: + """ + The FrameBuffer class provides a pixel buffer which can be drawn upon with + pixels, lines, rectangles, text and even other FrameBuffer's. It is useful + when generating output for displays. + + For example:: + + import framebuf + + # FrameBuffer needs 2 bytes for every RGB565 pixel + fbuf = framebuf.FrameBuffer(bytearray(100 * 10 * 2), 100, 10, framebuf.RGB565) + + fbuf.fill(0) + fbuf.text('MicroPython!', 0, 0, 0xffff) + fbuf.hline(0, 9, 96, 0xffff) + """ + + def __init__( + self, + buffer: AnyWritableBuf, + width: int, + height: int, + format: int, + stride: int = ..., + /, + ) -> None: + """ + Construct a FrameBuffer object. The parameters are: + + - *buffer* is an object with a buffer protocol which must be large + enough to contain every pixel defined by the width, height and + format of the FrameBuffer. + - *width* is the width of the FrameBuffer in pixels + - *height* is the height of the FrameBuffer in pixels + - *format* specifies the type of pixel used in the FrameBuffer; + permissible values are listed under Constants below. These set the + number of bits used to encode a color value and the layout of these + bits in *buffer*. + Where a color value c is passed to a method, c is a small integer + with an encoding that is dependent on the format of the FrameBuffer. + - *stride* is the number of pixels between each horizontal line + of pixels in the FrameBuffer. This defaults to *width* but may + need adjustments when implementing a FrameBuffer within another + larger FrameBuffer or screen. The *buffer* size must accommodate + an increased step size. + + One must specify valid *buffer*, *width*, *height*, *format* and + optionally *stride*. Invalid *buffer* size or dimensions may lead to + unexpected errors. + """ + + def fill(self, c: int, /) -> None: + """ + Fill the entire FrameBuffer with the specified color. + """ + ... + + @overload + def pixel(self, x: int, y: int, /) -> int: + """ + If *c* is not given, get the color value of the specified pixel. + If *c* is given, set the specified pixel to the given color. + """ + + @overload + def pixel(self, x: int, y: int, c: int, /) -> None: + """ + If *c* is not given, get the color value of the specified pixel. + If *c* is given, set the specified pixel to the given color. + """ + + def hline(self, x: int, y: int, w: int, c: int, /) -> None: + """ + Draw a line from a set of coordinates using the given color and + a thickness of 1 pixel. The `line` method draws the line up to + a second set of coordinates whereas the `hline` and `vline` + methods draw horizontal and vertical lines respectively up to + a given length. + """ + + def vline(self, x: int, y: int, h: int, c: int, /) -> None: + """ + Draw a line from a set of coordinates using the given color and + a thickness of 1 pixel. The `line` method draws the line up to + a second set of coordinates whereas the `hline` and `vline` + methods draw horizontal and vertical lines respectively up to + a given length. + """ + + def line(self, x1: int, y1: int, x2: int, y2: int, c: int, /) -> None: + """ + Draw a line from a set of coordinates using the given color and + a thickness of 1 pixel. The `line` method draws the line up to + a second set of coordinates whereas the `hline` and `vline` + methods draw horizontal and vertical lines respectively up to + a given length. + """ + ... + + def rect(self, x: int, y: int, w: int, h: int, c: int, /) -> None: + """ + Draw a rectangle at the given location, size and color. + + The optional *f* parameter can be set to ``True`` to fill the rectangle. + Otherwise just a one pixel outline is drawn. + """ + ... + + def ellipse(self, x, y, xr, yr, c, f, m: Optional[Any] = None) -> None: + """ + Draw an ellipse at the given location. Radii *xr* and *yr* define the + geometry; equal values cause a circle to be drawn. The *c* parameter + defines the color. + + The optional *f* parameter can be set to ``True`` to fill the ellipse. + Otherwise just a one pixel outline is drawn. + + The optional *m* parameter enables drawing to be restricted to certain + quadrants of the ellipse. The LS four bits determine which quadrants are + to be drawn, with bit 0 specifying Q1, b1 Q2, b2 Q3 and b3 Q4. Quadrants + are numbered counterclockwise with Q1 being top right. + """ + ... + + def poly(self, x, y, coords, c, f: Optional[Any] = None) -> Incomplete: + """ + Given a list of coordinates, draw an arbitrary (convex or concave) closed + polygon at the given x, y location using the given color. + + The *coords* must be specified as a :mod:`array` of integers, e.g. + ``array('h', [x0, y0, x1, y1, ... xn, yn])``. + + The optional *f* parameter can be set to ``True`` to fill the polygon. + Otherwise just a one pixel outline is drawn. + """ + ... + + def text(self, s: str, x: int, y: int, c: int = 1, /) -> None: + """ + Write text to the FrameBuffer using the the coordinates as the upper-left + corner of the text. The color of the text can be defined by the optional + argument but is otherwise a default value of 1. All characters have + dimensions of 8x8 pixels and there is currently no way to change the font. + """ + ... + + def scroll(self, xstep: int, ystep: int, /) -> None: + """ + Shift the contents of the FrameBuffer by the given vector. This may + leave a footprint of the previous colors in the FrameBuffer. + """ + ... + + def blit( + self, + fbuf: FrameBuffer, + x: int, + y: int, + key: int = -1, + pallet: FrameBuffer | None = None, + /, + ) -> None: + """ + Draw another FrameBuffer on top of the current one at the given coordinates. + If *key* is specified then it should be a color integer and the + corresponding color will be considered transparent: all pixels with that + color value will not be drawn. (If the *palette* is specified then the *key* + is compared to the value from *palette*, not to the value directly from + *fbuf*.) + + The *palette* argument enables blitting between FrameBuffers with differing + formats. Typical usage is to render a monochrome or grayscale glyph/icon to + a color display. The *palette* is a FrameBuffer instance whose format is + that of the current FrameBuffer. The *palette* height is one pixel and its + pixel width is the number of colors in the source FrameBuffer. The *palette* + for an N-bit source needs 2**N pixels; the *palette* for a monochrome source + would have 2 pixels representing background and foreground colors. The + application assigns a color to each pixel in the *palette*. The color of the + current pixel will be that of that *palette* pixel whose x position is the + color of the corresponding source pixel. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/gc/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/gc/__init__.pyi new file mode 100644 index 00000000..62bafa32 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/gc/__init__.pyi @@ -0,0 +1,107 @@ +""" +Control the garbage collector. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/gc.html + +CPython module: :mod:`python:gc` https://docs.python.org/3/library/gc.html . +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/gc.rst +from __future__ import annotations + +from typing import overload + +def enable() -> None: + """ + Enable automatic garbage collection. + """ + ... + +def disable() -> None: + """ + Disable automatic garbage collection. Heap memory can still be allocated, + and garbage collection can still be initiated manually using :meth:`gc.collect`. + """ + ... + +def collect() -> None: + """ + Run a garbage collection. + """ + ... + +def mem_alloc() -> int: + """ + Return the number of bytes of heap RAM that are allocated by Python code. + + Admonition:Difference to CPython + :class: attention + + This function is MicroPython extension. + """ + ... + +def mem_free() -> int: + """ + Return the number of bytes of heap RAM that is available for Python + code to allocate, or -1 if this amount is not known. + + Admonition:Difference to CPython + :class: attention + + This function is MicroPython extension. + """ + ... + +@overload +def threshold() -> int: + """ + Set or query the additional GC allocation threshold. Normally, a collection + is triggered only when a new allocation cannot be satisfied, i.e. on an + out-of-memory (OOM) condition. If this function is called, in addition to + OOM, a collection will be triggered each time after *amount* bytes have been + allocated (in total, since the previous time such an amount of bytes + have been allocated). *amount* is usually specified as less than the + full heap size, with the intention to trigger a collection earlier than when the + heap becomes exhausted, and in the hope that an early collection will prevent + excessive memory fragmentation. This is a heuristic measure, the effect + of which will vary from application to application, as well as + the optimal value of the *amount* parameter. + + Calling the function without argument will return the current value of + the threshold. A value of -1 means a disabled allocation threshold. + + Admonition:Difference to CPython + :class: attention + + This function is a MicroPython extension. CPython has a similar + function - ``set_threshold()``, but due to different GC + implementations, its signature and semantics are different. + """ + +@overload +def threshold(amount: int) -> None: + """ + Set or query the additional GC allocation threshold. Normally, a collection + is triggered only when a new allocation cannot be satisfied, i.e. on an + out-of-memory (OOM) condition. If this function is called, in addition to + OOM, a collection will be triggered each time after *amount* bytes have been + allocated (in total, since the previous time such an amount of bytes + have been allocated). *amount* is usually specified as less than the + full heap size, with the intention to trigger a collection earlier than when the + heap becomes exhausted, and in the hope that an early collection will prevent + excessive memory fragmentation. This is a heuristic measure, the effect + of which will vary from application to application, as well as + the optimal value of the *amount* parameter. + + Calling the function without argument will return the current value of + the threshold. A value of -1 means a disabled allocation threshold. + + Admonition:Difference to CPython + :class: attention + + This function is a MicroPython extension. CPython has a similar + function - ``set_threshold()``, but due to different GC + implementations, its signature and semantics are different. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/gzip/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/gzip/__init__.pyi new file mode 100644 index 00000000..0107792c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/gzip/__init__.pyi @@ -0,0 +1,78 @@ +""" +Gzip compression & decompression. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/gzip.html + +CPython module: :mod:`python:gzip` https://docs.python.org/3/library/gzip.html . + +This module allows compression and decompression of binary data with the +`DEFLATE algorithm `_ used by the gzip +file format. + +``Note:`` Prefer to use :class:`deflate.DeflateIO` instead of the functions in this + module as it provides a streaming interface to compression and decompression + which is convenient and more memory efficient when working with reading or + writing compressed data to a file, socket, or stream. + +**Availability:** + +* This module is **not present by default** in official MicroPython firmware + releases as it duplicates functionality available in the :mod:`deflate + ` module. + +* A copy of this module can be installed (or frozen) + from :term:`micropython-lib` (`source `_). + See :ref:`packages` for more information. This documentation describes that module. + +* Compression support will only be available if compression support is enabled + in the built-in :mod:`deflate ` module. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/gzip.rst +from __future__ import annotations + +from _typeshed import Incomplete + +class GzipFile: + """ + This class can be used to wrap a *fileobj* which is any + :term:`stream-like ` object such as a file, socket, or stream + (including :class:`io.BytesIO`). It is itself a stream and implements the + standard read/readinto/write/close methods. + + When the *mode* argument is ``"rb"``, reads from the GzipFile instance will + decompress the data in the underlying stream and return decompressed data. + + If compression support is enabled then the *mode* argument can be set to + ``"wb"``, and writes to the GzipFile instance will be compressed and written + to the underlying stream. + + By default the GzipFile class will read and write data using the gzip file + format, including a header and footer with checksum and a window size of 512 + bytes. + + The **file**, **compresslevel**, and **mtime** arguments are not + supported. **fileobj** and **mode** must always be specified as keyword + arguments. + """ + + def __init__(self, *, fileobj, mode) -> None: ... + +def open(filename, mode, /) -> Incomplete: + """ + Wrapper around built-in :func:`open` returning a GzipFile instance. + """ + ... + +def decompress(data, /) -> Incomplete: + """ + Decompresses *data* into a bytes object. + """ + ... + +def compress(data, /) -> Incomplete: + """ + Compresses *data* into a bytes object. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/hashlib/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/hashlib/__init__.pyi new file mode 100644 index 00000000..5cf05302 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/hashlib/__init__.pyi @@ -0,0 +1,133 @@ +""" +Hashing algorithms. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/hashlib.html + +CPython module: :mod:`python:hashlib` https://docs.python.org/3/library/hashlib.html . + +This module implements binary data hashing algorithms. The exact inventory +of available algorithms depends on a board. Among the algorithms which may +be implemented: + +* SHA256 - The current generation, modern hashing algorithm (of SHA2 series). + It is suitable for cryptographically-secure purposes. Included in the + MicroPython core and any board is recommended to provide this, unless + it has particular code size constraints. + +* SHA1 - A previous generation algorithm. Not recommended for new usages, + but SHA1 is a part of number of Internet standards and existing + applications, so boards targeting network connectivity and + interoperability will try to provide this. + +* MD5 - A legacy algorithm, not considered cryptographically secure. Only + selected boards, targeting interoperability with legacy applications, + will offer this. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/hashlib.rst +from __future__ import annotations + +from typing import overload + +from _mpy_shed import AnyReadableBuf, _Hash +from _typeshed import Incomplete + +class sha256(_Hash): + """ + The current generation, modern hashing algorithm (of SHA2 series). + It is suitable for cryptographically-secure purposes. Included in the + MicroPython core and any board is recommended to provide this, unless + it has particular code size constraints. + """ + + @overload + def __init__(self): + """ + Create an SHA256 hasher object and optionally feed ``data`` into it. + """ + + @overload + def __init__(self, data: AnyReadableBuf): + """ + Create an SHA256 hasher object and optionally feed ``data`` into it. + """ + + @overload + def __init__(self): + """ + Create an SHA256 hasher object and optionally feed ``data`` into it. + """ + + @overload + def __init__(self, data: AnyReadableBuf): + """ + Create an SHA256 hasher object and optionally feed ``data`` into it. + """ + +class sha1(_Hash): + """ + A previous generation algorithm. Not recommended for new usages, + but SHA1 is a part of number of Internet standards and existing + applications, so boards targeting network connectivity and + interoperability will try to provide this. + """ + + @overload + def __init__(self): + """ + Create an SHA1 hasher object and optionally feed ``data`` into it. + """ + + @overload + def __init__(self, data: AnyReadableBuf): + """ + Create an SHA1 hasher object and optionally feed ``data`` into it. + """ + + @overload + def __init__(self): + """ + Create an SHA1 hasher object and optionally feed ``data`` into it. + """ + + @overload + def __init__(self, data: AnyReadableBuf): + """ + Create an SHA1 hasher object and optionally feed ``data`` into it. + """ + +class md5(_Hash): + """ + A legacy algorithm, not considered cryptographically secure. Only + selected boards, targeting interoperability with legacy applications, + will offer this. + """ + + def __init__(self, data: AnyReadableBuf = ..., /) -> None: + """ + Create an MD5 hasher object and optionally feed ``data`` into it. + """ + +class hash: + """ """ + + def update(self, data) -> Incomplete: + """ + Feed more binary data into hash. + """ + ... + + def digest(self) -> bytes: + """ + Return hash for all data passed through hash, as a bytes object. After this + method is called, more data cannot be fed into the hash any longer. + """ + ... + + def hexdigest(self) -> Incomplete: + """ + This method is NOT implemented. Use ``binascii.hexlify(hash.digest())`` + to achieve a similar effect. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/heapq/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/heapq/__init__.pyi new file mode 100644 index 00000000..331c55d2 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/heapq/__init__.pyi @@ -0,0 +1,44 @@ +""" +Heap queue algorithm. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/heapq.html + +CPython module: :mod:`python:heapq` https://docs.python.org/3/library/heapq.html . + +This module implements the +`min heap queue algorithm `_. + +A heap queue is essentially a list that has its elements stored in such a way +that the first item of the list is always the smallest. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/heapq.rst +from __future__ import annotations + +from typing import Any + +from typing_extensions import TypeVar + +_T = TypeVar("_T") + +def heappush(heap: list[_T], item: _T, /) -> None: + """ + Push the ``item`` onto the ``heap``. + """ + ... + +def heappop(heap: list[_T], /) -> _T: + """ + Pop the first item from the ``heap``, and return it. Raise ``IndexError`` if + ``heap`` is empty. + + The returned item will be the smallest item in the ``heap``. + """ + ... + +def heapify(x: list[Any], /) -> None: + """ + Convert the list ``x`` into a heap. This is an in-place operation. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/io/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/io/__init__.pyi new file mode 100644 index 00000000..7e72a0a3 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/io/__init__.pyi @@ -0,0 +1,230 @@ +""" +Input/output streams. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/io.html + +CPython module: :mod:`python:io` https://docs.python.org/3/library/io.html . + +This module contains additional types of `stream` (file-like) objects +and helper functions. + +Conceptual hierarchy +-------------------- + +Admonition:Difference to CPython + :class: attention + + Conceptual hierarchy of stream base classes is simplified in MicroPython, + as described in this section. + +(Abstract) base stream classes, which serve as a foundation for behaviour +of all the concrete classes, adhere to few dichotomies (pair-wise +classifications) in CPython. In MicroPython, they are somewhat simplified +and made implicit to achieve higher efficiencies and save resources. + +An important dichotomy in CPython is unbuffered vs buffered streams. In +MicroPython, all streams are currently unbuffered. This is because all +modern OSes, and even many RTOSes and filesystem drivers already perform +buffering on their side. Adding another layer of buffering is counter- +productive (an issue known as "bufferbloat") and takes precious memory. +Note that there still cases where buffering may be useful, so we may +introduce optional buffering support at a later time. + +But in CPython, another important dichotomy is tied with "bufferedness" - +it's whether a stream may incur short read/writes or not. A short read +is when a user asks e.g. 10 bytes from a stream, but gets less, similarly +for writes. In CPython, unbuffered streams are automatically short +operation susceptible, while buffered are guarantee against them. The +no short read/writes is an important trait, as it allows to develop +more concise and efficient programs - something which is highly desirable +for MicroPython. So, while MicroPython doesn't support buffered streams, +it still provides for no-short-operations streams. Whether there will +be short operations or not depends on each particular class' needs, but +developers are strongly advised to favour no-short-operations behaviour +for the reasons stated above. For example, MicroPython sockets are +guaranteed to avoid short read/writes. Actually, at this time, there is +no example of a short-operations stream class in the core, and one would +be a port-specific class, where such a need is governed by hardware +peculiarities. + +The no-short-operations behaviour gets tricky in case of non-blocking +streams, blocking vs non-blocking behaviour being another CPython dichotomy, +fully supported by MicroPython. Non-blocking streams never wait for +data either to arrive or be written - they read/write whatever possible, +or signal lack of data (or ability to write data). Clearly, this conflicts +with "no-short-operations" policy, and indeed, a case of non-blocking +buffered (and this no-short-ops) streams is convoluted in CPython - in +some places, such combination is prohibited, in some it's undefined or +just not documented, in some cases it raises verbose exceptions. The +matter is much simpler in MicroPython: non-blocking stream are important +for efficient asynchronous operations, so this property prevails on +the "no-short-ops" one. So, while blocking streams will avoid short +reads/writes whenever possible (the only case to get a short read is +if end of file is reached, or in case of error (but errors don't +return short data, but raise exceptions)), non-blocking streams may +produce short data to avoid blocking the operation. + +The final dichotomy is binary vs text streams. MicroPython of course +supports these, but while in CPython text streams are inherently +buffered, they aren't in MicroPython. (Indeed, that's one of the cases +for which we may introduce buffering support.) + +Note that for efficiency, MicroPython doesn't provide abstract base +classes corresponding to the hierarchy above, and it's not possible +to implement, or subclass, a stream class in pure Python. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/io.rst +from __future__ import annotations + +from array import array +from typing import overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf, FileIO, IOBase, PathLike, TextIOWrapper +from _mpy_shed.io_modes import _OpenBinaryMode, _OpenTextModeWriting +from typing_extensions import TypeVar + +_T = TypeVar("_T") +AnyStr_co = TypeVar("AnyStr_co", str, bytes, covariant=True) +StrOrBytesPath = TypeVar("StrOrBytesPath", str, bytes, PathLike[str], PathLike[bytes]) +_OpenFile = TypeVar("_OpenFile", str, bytes, PathLike[str], PathLike[bytes], int) +AnyReadableBuf = TypeVar("AnyReadableBuf", bytearray, array, memoryview, bytes) +AnyWritableBuf = TypeVar("AnyWritableBuf", bytearray, array, memoryview) +_Self = TypeVar("_Self") + +class StringIO(IOBase): + """ + Str stream from a str (wrapper). + """ + + @overload + def __init__(self, string: str = "", /): + """ + + In-memory file-like object for input/output. + `StringIO` is used for text-mode I/O (similar to a normal file opened with "t" modifier). + Initial contents can be specified with `string` parameter. + + `alloc_size` constructor creates an empty `StringIO` object, + pre-allocated to hold up to `alloc_size` number of bytes. + That means that writing that amount of bytes won't lead to reallocation of the buffer, + and thus won't hit out-of-memory situation or lead to memory fragmentation. + This constructor is a MicroPython extension and is recommended for usage only in special + cases and in system-level libraries, not for end-user applications. + + .. admonition:: Difference to CPython + :class: attention + + This constructor is a MicroPython extension. + """ + + @overload + def __init__(self, alloc_size: int, /): + """ + + In-memory file-like object for input/output. + `StringIO` is used for text-mode I/O (similar to a normal file opened with "t" modifier). + Initial contents can be specified with `string` parameter. + + `alloc_size` constructor creates an empty `StringIO` object, + pre-allocated to hold up to `alloc_size` number of bytes. + That means that writing that amount of bytes won't lead to reallocation of the buffer, + and thus won't hit out-of-memory situation or lead to memory fragmentation. + This constructor is a MicroPython extension and is recommended for usage only in special + cases and in system-level libraries, not for end-user applications. + + .. admonition:: Difference to CPython + :class: attention + + This constructor is a MicroPython extension. + """ + +class BytesIO(IOBase): + """ + Bytes stream from a bytes array (wrapper). + """ + + @overload + def __init__(self, string: bytes = b"", /): + """ + In-memory file-like objects for input/output. `StringIO` is used for + text-mode I/O (similar to a normal file opened with "t" modifier). + `BytesIO` is used for binary-mode I/O (similar to a normal file + opened with "b" modifier). Initial contents of file-like objects + can be specified with *string* parameter (should be normal string + for `StringIO` or bytes object for `BytesIO`). All the usual file + methods like ``read()``, ``write()``, ``seek()``, ``flush()``, + ``close()`` are available on these objects, and additionally, a + following method: + + + `alloc_size` constructor creates an empty `BytesIO` object, + pre-allocated to hold up to `alloc_size` number of bytes. + That means that writing that amount of bytes won't lead to reallocation of the buffer, + and thus won't hit out-of-memory situation or lead to memory fragmentation. + This constructor is a MicroPython extension and is recommended for usage only in special + cases and in system-level libraries, not for end-user applications. + + .. admonition:: Difference to CPython + :class: attention + + This constructor is a MicroPython extension. + """ + + @overload + def __init__(self, alloc_size: int, /): + """ + In-memory file-like objects for input/output. `StringIO` is used for + text-mode I/O (similar to a normal file opened with "t" modifier). + `BytesIO` is used for binary-mode I/O (similar to a normal file + opened with "b" modifier). Initial contents of file-like objects + can be specified with *string* parameter (should be normal string + for `StringIO` or bytes object for `BytesIO`). All the usual file + methods like ``read()``, ``write()``, ``seek()``, ``flush()``, + ``close()`` are available on these objects, and additionally, a + following method: + + + `alloc_size` constructor creates an empty `BytesIO` object, + pre-allocated to hold up to `alloc_size` number of bytes. + That means that writing that amount of bytes won't lead to reallocation of the buffer, + and thus won't hit out-of-memory situation or lead to memory fragmentation. + This constructor is a MicroPython extension and is recommended for usage only in special + cases and in system-level libraries, not for end-user applications. + + .. admonition:: Difference to CPython + :class: attention + + This constructor is a MicroPython extension. + """ + + def getvalue(self) -> bytes: + """ + Get the current contents of the underlying buffer which holds data. + """ + ... + +@overload +def open(name: _OpenFile, /, **kwargs) -> TextIOWrapper: + """ + Open a file. Builtin ``open()`` function is aliased to this function. + All ports (which provide access to file system) are required to support + *mode* parameter, but support for other arguments vary by port. + """ + +@overload +def open(name: _OpenFile, mode: _OpenTextModeWriting = ..., /, **kwargs) -> TextIOWrapper: + """ + Open a file. Builtin ``open()`` function is aliased to this function. + All ports (which provide access to file system) are required to support + *mode* parameter, but support for other arguments vary by port. + """ + +@overload +def open(name: _OpenFile, mode: _OpenBinaryMode = ..., /, **kwargs) -> FileIO: + """ + Open a file. Builtin ``open()`` function is aliased to this function. + All ports (which provide access to file system) are required to support + *mode* parameter, but support for other arguments vary by port. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/json/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/json/__init__.pyi new file mode 100644 index 00000000..532361ee --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/json/__init__.pyi @@ -0,0 +1,77 @@ +""" +JSON encoding and decoding. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/json.html + +CPython module: :mod:`python:json` https://docs.python.org/3/library/json.html . + +This modules allows to convert between Python objects and the JSON +data format. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/json.rst +from __future__ import annotations + +from typing import Any, AnyStr, Tuple, overload + +from _mpy_shed import IOBase +from _typeshed import Incomplete + +@overload +def dump(obj: Any, stream: IOBase | Incomplete, /) -> None: + """ + Serialise *obj* to a JSON string, writing it to the given *stream*. + + If specified, separators should be an ``(item_separator, key_separator)`` + tuple. The default is ``(', ', ': ')``. To get the most compact JSON + representation, you should specify ``(',', ':')`` to eliminate whitespace. + """ + ... + +@overload +def dump(obj: Any, stream: IOBase | Incomplete, separators: Tuple[str, str], /) -> None: + """ + Serialise *obj* to a JSON string, writing it to the given *stream*. + + If specified, separators should be an ``(item_separator, key_separator)`` + tuple. The default is ``(', ', ': ')``. To get the most compact JSON + representation, you should specify ``(',', ':')`` to eliminate whitespace. + """ + ... + +@overload +def dumps(obj: Any) -> str: + """ + Return *obj* represented as a JSON string. + + The arguments have the same meaning as in `dump`. + """ + ... + +@overload +def dumps(obj: Any, separators: Tuple[str, str]) -> str: + """ + Return *obj* represented as a JSON string. + + The arguments have the same meaning as in `dump`. + """ + ... + +def load(stream: IOBase | Incomplete) -> Any: + """ + Parse the given *stream*, interpreting it as a JSON string and + deserialising the data to a Python object. The resulting object is + returned. + + Parsing continues until end-of-file is encountered. + A :exc:`ValueError` is raised if the data in *stream* is not correctly formed. + """ + ... + +def loads(str: AnyStr) -> Any: + """ + Parse the JSON *str* and return an object. Raises :exc:`ValueError` if the + string is not correctly formed. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/lcd160cr/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/lcd160cr/__init__.pyi new file mode 100644 index 00000000..ca4bda34 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/lcd160cr/__init__.pyi @@ -0,0 +1,559 @@ +""" +Control of LCD160CR display. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/lcd160cr.html + +This module provides control of the MicroPython LCD160CR display. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/lcd160cr.rst +from __future__ import annotations + +from typing import Any, Tuple, overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from pyb import I2C, SPI, Pin + +PORTRAIT: Incomplete +"""Orientations of the display, used by :meth:`LCD160CR.set_orient`.""" +LANDSCAPE: Incomplete +"""Orientations of the display, used by :meth:`LCD160CR.set_orient`.""" +PORTRAIT_UPSIDEDOWN: Incomplete +"""Orientations of the display, used by :meth:`LCD160CR.set_orient`.""" +LANDSCAPE_UPSIDEDOWN: Incomplete +"""Orientations of the display, used by :meth:`LCD160CR.set_orient`.""" +STARTUP_DECO_NONE: Incomplete +"""\ +Types of start-up decoration, can be OR'ed together, used by +:meth:`LCD160CR.set_startup_deco`. +""" +STARTUP_DECO_MLOGO: Incomplete +"""\ +Types of start-up decoration, can be OR'ed together, used by +:meth:`LCD160CR.set_startup_deco`. +""" +STARTUP_DECO_INFO: Incomplete +"""\ +Types of start-up decoration, can be OR'ed together, used by +:meth:`LCD160CR.set_startup_deco`. +""" + +class LCD160CR: + """ + The LCD160CR class provides an interface to the display. Create an + instance of this class and use its methods to draw to the LCD and get + the status of the touch panel. + + For example:: + + import lcd160cr + + lcd = lcd160cr.LCD160CR('X') + lcd.set_orient(lcd160cr.PORTRAIT) + lcd.set_pos(0, 0) + lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0)) + lcd.set_font(1) + lcd.write('Hello MicroPython!') + print('touch:', lcd.get_touch()) + """ + + w: Incomplete + h: Incomplete + """\ + The width and height of the display, respectively, in pixels. These + members are updated when calling :meth:`LCD160CR.set_orient` and should + be considered read-only. + """ + @overload + def __init__(self, connect: str, /): + """ + Construct an LCD160CR object. The parameters are: + + - *connect* is a string specifying the physical connection of the LCD + display to the board; valid values are "X", "Y", "XY", "YX". + Use "X" when the display is connected to a pyboard in the X-skin + position, and "Y" when connected in the Y-skin position. "XY" + and "YX" are used when the display is connected to the right or + left side of the pyboard, respectively. + - *pwr* is a Pin object connected to the LCD's power/enabled pin. + - *i2c* is an I2C object connected to the LCD's I2C interface. + - *spi* is an SPI object connected to the LCD's SPI interface. + - *i2c_addr* is the I2C address of the display. + + One must specify either a valid *connect* or all of *pwr*, *i2c* and *spi*. + If a valid *connect* is given then any of *pwr*, *i2c* or *spi* which are + not passed as parameters (i.e. they are ``None``) will be created based on the + value of *connect*. This allows to override the default interface to the + display if needed. + + The default values are: + + - "X" is for the X-skin and uses: + ``pwr=Pin("X4")``, ``i2c=I2C("X")``, ``spi=SPI("X")`` + - "Y" is for the Y-skin and uses: + ``pwr=Pin("Y4")``, ``i2c=I2C("Y")``, ``spi=SPI("Y")`` + - "XY" is for the right-side and uses: + ``pwr=Pin("X4")``, ``i2c=I2C("Y")``, ``spi=SPI("X")`` + - "YX" is for the left-side and uses: + ``pwr=Pin("Y4")``, ``i2c=I2C("X")``, ``spi=SPI("Y")`` + + See `this image `_ + for how the display can be connected to the pyboard. + """ + + @overload + def __init__(self, *, pwr: Pin, i2c: I2C, spi: SPI, i2c_addr: int = 98): + """ + Construct an LCD160CR object. The parameters are: + + - *connect* is a string specifying the physical connection of the LCD + display to the board; valid values are "X", "Y", "XY", "YX". + Use "X" when the display is connected to a pyboard in the X-skin + position, and "Y" when connected in the Y-skin position. "XY" + and "YX" are used when the display is connected to the right or + left side of the pyboard, respectively. + - *pwr* is a Pin object connected to the LCD's power/enabled pin. + - *i2c* is an I2C object connected to the LCD's I2C interface. + - *spi* is an SPI object connected to the LCD's SPI interface. + - *i2c_addr* is the I2C address of the display. + + One must specify either a valid *connect* or all of *pwr*, *i2c* and *spi*. + If a valid *connect* is given then any of *pwr*, *i2c* or *spi* which are + not passed as parameters (i.e. they are ``None``) will be created based on the + value of *connect*. This allows to override the default interface to the + display if needed. + + The default values are: + + - "X" is for the X-skin and uses: + ``pwr=Pin("X4")``, ``i2c=I2C("X")``, ``spi=SPI("X")`` + - "Y" is for the Y-skin and uses: + ``pwr=Pin("Y4")``, ``i2c=I2C("Y")``, ``spi=SPI("Y")`` + - "XY" is for the right-side and uses: + ``pwr=Pin("X4")``, ``i2c=I2C("Y")``, ``spi=SPI("X")`` + - "YX" is for the left-side and uses: + ``pwr=Pin("Y4")``, ``i2c=I2C("X")``, ``spi=SPI("Y")`` + + See `this image `_ + for how the display can be connected to the pyboard. + """ + + @staticmethod + def rgb(r: int, g: int, b: int, /) -> int: + """ + Return a 16-bit integer representing the given rgb color values. The + 16-bit value can be used to set the font color (see + :meth:`LCD160CR.set_text_color`) pen color (see :meth:`LCD160CR.set_pen`) + and draw individual pixels. + """ + ... + + @staticmethod + def clip_line(data: Any, w: int, h: int, /) -> int: + """ + Clip the given line data. This is for internal use. + """ + ... + + def set_power(self, on: bool, /) -> None: + """ + Turn the display on or off, depending on the given value of *on*: 0 or ``False`` + will turn the display off, and 1 or ``True`` will turn it on. + """ + ... + + def set_orient(self, orient: str, /) -> None: + """ + Set the orientation of the display. The *orient* parameter can be one + of `PORTRAIT`, `LANDSCAPE`, `PORTRAIT_UPSIDEDOWN`, `LANDSCAPE_UPSIDEDOWN`. + """ + ... + + def set_brightness(self, value: int, /) -> None: + """ + Set the brightness of the display, between 0 and 31. + """ + ... + + def set_i2c_addr(self, addr: int, /) -> None: + """ + Set the I2C address of the display. The *addr* value must have the + lower 2 bits cleared. + """ + ... + + def set_uart_baudrate(self, baudrate: int, /) -> None: + """ + Set the baudrate of the UART interface. + """ + ... + + def set_startup_deco(self, value: bool | str, /) -> None: + """ + Set the start-up decoration of the display. The *value* parameter can be a + logical or of `STARTUP_DECO_NONE`, `STARTUP_DECO_MLOGO`, `STARTUP_DECO_INFO`. + """ + ... + + def save_to_flash(self) -> None: + """ + Save the following parameters to flash so they persist on restart and power up: + initial decoration, orientation, brightness, UART baud rate, I2C address. + """ + ... + + def set_pixel(self, x: int, y: int, c: int, /) -> None: + """ + Set the specified pixel to the given color. The color should be a 16-bit + integer and can be created by :meth:`LCD160CR.rgb`. + """ + ... + + def get_pixel(self, x: int, y: int, /) -> int: + """ + Get the 16-bit value of the specified pixel. + """ + ... + + def get_line(self, x: int, y: int, buf: AnyWritableBuf, /) -> None: + """ + Low-level method to get a line of pixels into the given buffer. + To read *n* pixels *buf* should be *2*n+1* bytes in length. The first byte + is a dummy byte and should be ignored, and subsequent bytes represent the + pixels in the line starting at coordinate *(x, y)*. + """ + ... + + def screen_dump( + self, + buf: AnyWritableBuf, + x: int = 0, + y: int = 0, + w: int | None = None, + h: int | None = None, + /, + ) -> None: + """ + Dump the contents of the screen to the given buffer. The parameters *x* and *y* + specify the starting coordinate, and *w* and *h* the size of the region. If *w* + or *h* are ``None`` then they will take on their maximum values, set by the size + of the screen minus the given *x* and *y* values. *buf* should be large enough + to hold ``2*w*h`` bytes. If it's smaller then only the initial horizontal lines + will be stored. + """ + ... + + def screen_load(self, buf: AnyReadableBuf, /) -> None: + """ + Load the entire screen from the given buffer. + """ + ... + + def set_pos(self, x: int, y: int, /) -> None: + """ + Set the position for text output using :meth:`LCD160CR.write`. The position + is the upper-left corner of the text. + """ + ... + + def set_text_color(self, fg: int, bg: int, /) -> None: + """ + Set the foreground and background color of the text. + """ + ... + + def set_font( + self, + font: int, + scale: int = 0, + bold: int = 0, + trans: int = 0, + scroll: int = 0, + /, + ) -> None: + """ + Set the font for the text. Subsequent calls to `write` will use the newly + configured font. The parameters are: + + - *font* is the font family to use, valid values are 0, 1, 2, 3. + - *scale* is a scaling value for each character pixel, where the pixels + are drawn as a square with side length equal to *scale + 1*. The value + can be between 0 and 63. + - *bold* controls the number of pixels to overdraw each character pixel, + making a bold effect. The lower 2 bits of *bold* are the number of + pixels to overdraw in the horizontal direction, and the next 2 bits are + for the vertical direction. For example, a *bold* value of 5 will + overdraw 1 pixel in both the horizontal and vertical directions. + - *trans* can be either 0 or 1 and if set to 1 the characters will be + drawn with a transparent background. + - *scroll* can be either 0 or 1 and if set to 1 the display will do a + soft scroll if the text moves to the next line. + """ + ... + + def write(self, s: str, /) -> None: + """ + Write text to the display, using the current position, color and font. + As text is written the position is automatically incremented. The + display supports basic VT100 control codes such as newline and backspace. + """ + ... + + def set_pen(self, line: int, fill: int, /) -> None: + """ + Set the line and fill color for primitive shapes. + """ + ... + + def erase(self) -> None: + """ + Erase the entire display to the pen fill color. + """ + ... + + def dot(self, x: int, y: int, /) -> None: + """ + Draw a single pixel at the given location using the pen line color. + """ + ... + + def rect(self, x: int, y: int, w: int, h: int, /) -> None: + """ + Draw a rectangle at the given location and size using the pen line + color for the outline, and the pen fill color for the interior. + The `rect` method draws the outline and interior, while the other methods + just draw one or the other. + """ + + def rect_outline(self, x: int, y: int, w: int, h: int, /) -> None: + """ + Draw a rectangle at the given location and size using the pen line + color for the outline, and the pen fill color for the interior. + The `rect` method draws the outline and interior, while the other methods + just draw one or the other. + """ + + def rect_interior(self, x: int, y: int, w: int, h: int, /) -> None: + """ + Draw a rectangle at the given location and size using the pen line + color for the outline, and the pen fill color for the interior. + The `rect` method draws the outline and interior, while the other methods + just draw one or the other. + """ + ... + + def line(self, x1: int, y1: int, x2: int, y2: int, /) -> None: + """ + Draw a line between the given coordinates using the pen line color. + """ + ... + + def dot_no_clip(self, x: int, y: int, /) -> None: + """ + These methods are as above but don't do any clipping on the input + coordinates. They are faster than the clipping versions and can be + used when you know that the coordinates are within the display. + """ + + def rect_no_clip(self, x: int, y: int, w: int, h: int, /) -> None: + """ + These methods are as above but don't do any clipping on the input + coordinates. They are faster than the clipping versions and can be + used when you know that the coordinates are within the display. + """ + + def rect_outline_no_clip(self, x: int, y: int, w: int, h: int, /) -> None: + """ + These methods are as above but don't do any clipping on the input + coordinates. They are faster than the clipping versions and can be + used when you know that the coordinates are within the display. + """ + + def rect_interior_no_clip(self, x: int, y: int, w: int, h: int, /) -> None: + """ + These methods are as above but don't do any clipping on the input + coordinates. They are faster than the clipping versions and can be + used when you know that the coordinates are within the display. + """ + + def line_no_clip(self, x1: int, y1: int, x2: int, y2: int, /) -> None: + """ + These methods are as above but don't do any clipping on the input + coordinates. They are faster than the clipping versions and can be + used when you know that the coordinates are within the display. + """ + ... + + def poly_dot(self, data: AnyReadableBuf, /) -> None: + """ + Draw a sequence of dots using the pen line color. + The *data* should be a buffer of bytes, with each successive pair of + bytes corresponding to coordinate pairs (x, y). + """ + ... + + def poly_line(self, data: AnyReadableBuf, /) -> None: + """ + Similar to :meth:`LCD160CR.poly_dot` but draws lines between the dots. + """ + ... + + def touch_config(self, calib: bool = False, save: bool = False, irq: bool | None = None, /) -> None: + """ + Configure the touch panel: + + - If *calib* is ``True`` then the call will trigger a touch calibration of + the resistive touch sensor. This requires the user to touch various + parts of the screen. + - If *save* is ``True`` then the touch parameters will be saved to NVRAM + to persist across reset/power up. + - If *irq* is ``True`` then the display will be configured to pull the IRQ + line low when a touch force is detected. If *irq* is ``False`` then this + feature is disabled. If *irq* is ``None`` (the default value) then no + change is made to this setting. + """ + ... + + def is_touched(self) -> bool: + """ + Returns a boolean: ``True`` if there is currently a touch force on the screen, + ``False`` otherwise. + """ + ... + + def get_touch(self) -> Tuple: + """ + Returns a 3-tuple of: *(active, x, y)*. If there is currently a touch force + on the screen then *active* is 1, otherwise it is 0. The *x* and *y* values + indicate the position of the current or most recent touch. + """ + ... + + def set_spi_win(self, x: int, y: int, w: int, h: int, /) -> None: + """ + Set the window that SPI data is written to. + """ + ... + + def fast_spi(self, flush: bool = True, /) -> SPI: + """ + Ready the display to accept RGB pixel data on the SPI bus, resetting the location + of the first byte to go to the top-left corner of the window set by + :meth:`LCD160CR.set_spi_win`. + The method returns an SPI object which can be used to write the pixel data. + + Pixels should be sent as 16-bit RGB values in the 5-6-5 format. The destination + counter will increase as data is sent, and data can be sent in arbitrary sized + chunks. Once the destination counter reaches the end of the window specified by + :meth:`LCD160CR.set_spi_win` it will wrap around to the top-left corner of that window. + """ + ... + + def show_framebuf(self, buf: AnyReadableBuf, /) -> None: + """ + Show the given buffer on the display. *buf* should be an array of bytes containing + the 16-bit RGB values for the pixels, and they will be written to the area + specified by :meth:`LCD160CR.set_spi_win`, starting from the top-left corner. + + The `framebuf `_ module can be used to construct frame buffers + and provides drawing primitives. Using a frame buffer will improve + performance of animations when compared to drawing directly to the screen. + """ + ... + + def set_scroll(self, on: bool, /) -> None: + """ + Turn scrolling on or off. This controls globally whether any window regions will + scroll. + """ + ... + + def set_scroll_win( + self, + win: int, + x: int = -1, + y: int = 0, + w: int = 0, + h: int = 0, + vec: int = 0, + pat: int = 0, + fill: int = 0x07E0, + color: int = 0, + /, + ) -> None: + """ + Configure a window region for scrolling: + + - *win* is the window id to configure. There are 0..7 standard windows for + general purpose use. Window 8 is the text scroll window (the ticker). + - *x*, *y*, *w*, *h* specify the location of the window in the display. + - *vec* specifies the direction and speed of scroll: it is a 16-bit value + of the form ``0bF.ddSSSSSSSSSSSS``. *dd* is 0, 1, 2, 3 for +x, +y, -x, + -y scrolling. *F* sets the speed format, with 0 meaning that the window + is shifted *S % 256* pixel every frame, and 1 meaning that the window + is shifted 1 pixel every *S* frames. + - *pat* is a 16-bit pattern mask for the background. + - *fill* is the fill color. + - *color* is the extra color, either of the text or pattern foreground. + """ + ... + + def set_scroll_win_param(self, win: int, param: int, value: int, /) -> None: + """ + Set a single parameter of a scrolling window region: + + - *win* is the window id, 0..8. + - *param* is the parameter number to configure, 0..7, and corresponds + to the parameters in the `set_scroll_win` method. + - *value* is the value to set. + """ + ... + + def set_scroll_buf(self, s: str, /) -> None: + """ + Set the string for scrolling in window 8. The parameter *s* must be a string + with length 32 or less. + """ + ... + + def jpeg(self, buf: AnyReadableBuf, /) -> None: + """ + Display a JPEG. *buf* should contain the entire JPEG data. JPEG data should + not include EXIF information. The following encodings are supported: Baseline + DCT, Huffman coding, 8 bits per sample, 3 color components, YCbCr4:2:2. + The origin of the JPEG is set by :meth:`LCD160CR.set_pos`. + """ + ... + + def jpeg_start(self, total_len: int, /) -> None: + """ + Display a JPEG with the data split across multiple buffers. There must be + a single call to `jpeg_start` to begin with, specifying the total number of + bytes in the JPEG. Then this number of bytes must be transferred to the + display using one or more calls to the `jpeg_data` command. + """ + + def jpeg_data(self, buf: AnyReadableBuf, /) -> None: + """ + Display a JPEG with the data split across multiple buffers. There must be + a single call to `jpeg_start` to begin with, specifying the total number of + bytes in the JPEG. Then this number of bytes must be transferred to the + display using one or more calls to the `jpeg_data` command. + """ + ... + + def feed_wdt(self) -> None: + """ + The first call to this method will start the display's internal watchdog + timer. Subsequent calls will feed the watchdog. The timeout is roughly 30 + seconds. + """ + ... + + def reset(self) -> None: + """ + Reset the display. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADC.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADC.pyi new file mode 100644 index 00000000..b3acb2c8 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADC.pyi @@ -0,0 +1,84 @@ +""" """ + +from __future__ import annotations + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +ATTN_0DB: int = ... + +class ADC: + """ + The ADC class provides an interface to analog-to-digital convertors, and + represents a single endpoint that can sample a continuous voltage and + convert it to a discretised value. + + Example usage:: + + import machine + + adc = machine.ADC(pin) # create an ADC object acting on a pin + val = adc.read_u16() # read a raw analog value in the range 0-65535 + """ + + def __init__(self, pin: int | Pin, /) -> None: + """ + Access the ADC associated with a source identified by *id*. This + *id* may be an integer (usually specifying a channel number), a + :ref:`Pin ` object, or other value supported by the + underlying machine. + .. note:: + + WiPy has a custom implementation of ADC, see ADCWiPy for details. + """ + + def init(self, *, sample_ns, atten) -> Incomplete: + """ + Apply the given settings to the ADC. Only those arguments that are + specified will be changed. See the ADC constructor above for what the + arguments are. + """ + ... + + def block(self) -> Incomplete: + """ + Return the :ref:`ADCBlock ` instance associated with + this ADC object. + + This method only exists if the port supports the + :ref:`ADCBlock ` class. + """ + ... + + def read_u16(self) -> int: + """ + Take an analog reading and return an integer in the range 0-65535. + The return value represents the raw reading taken by the ADC, scaled + such that the minimum value is 0 and the maximum value is 65535. + """ + ... + + def read_uv(self) -> int: + """ + Take an analog reading and return an integer value with units of + microvolts. It is up to the particular port whether or not this value + is calibrated, and how calibration is done. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCBlock.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCBlock.pyi new file mode 100644 index 00000000..a695be2d --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCBlock.pyi @@ -0,0 +1,60 @@ +""" """ + +from __future__ import annotations + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class ADCBlock: + """ + Access the ADC peripheral identified by *id*, which may be an integer + or string. + + The *bits* argument, if given, sets the resolution in bits of the + conversion process. If not specified then the previous or default + resolution is used. + """ + + def __init__(self, id, *, bits) -> None: ... + def init(self, *, bits) -> None: + """ + Configure the ADC peripheral. *bits* will set the resolution of the + conversion process. + """ + ... + + def connect(self, channel, source, *args, **kwargs) -> Incomplete: + """ + Connect up a channel on the ADC peripheral so it is ready for sampling, + and return an :ref:`ADC ` object that represents that connection. + + The *channel* argument must be an integer, and *source* must be an object + (for example a :ref:`Pin `) which can be connected up for sampling. + + If only *channel* is given then it is configured for sampling. + + If only *source* is given then that object is connected to a default + channel ready for sampling. + + If both *channel* and *source* are given then they are connected together + and made ready for sampling. + + Any additional keyword arguments are used to configure the returned ADC object, + via its :meth:`init ` method. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCWiPy.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCWiPy.pyi new file mode 100644 index 00000000..e4290ab7 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/ADCWiPy.pyi @@ -0,0 +1,82 @@ +""" """ + +from __future__ import annotations + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class ADCWiPy: + """ + Create an ADC object associated with the given pin. + This allows you to then read analog values on that pin. + For more info check the `pinout and alternate functions + table. `_ + """ + + def __init__(self, id=0, *, bits=12) -> None: ... + def channel(self, id, *, pin) -> Incomplete: + """ + Create an analog pin. If only channel ID is given, the correct pin will + be selected. Alternatively, only the pin can be passed and the correct + channel will be selected. Examples:: + + # all of these are equivalent and enable ADC channel 1 on GP3 + apin = adc.channel(1) + apin = adc.channel(pin='GP3') + apin = adc.channel(id=1, pin='GP3') + """ + ... + + def init(self) -> None: + """ + Enable the ADC block. + """ + ... + + def deinit(self) -> None: + """ + Disable the ADC block. + """ + ... + + def adcchannel(self) -> Incomplete: + """ + Fast method to read the channel value. + """ + ... + +class adcchannel: + """ """ + + def value(self) -> Incomplete: + """ + Read the channel value. + """ + ... + + def init(self) -> Incomplete: + """ + Re-init (and effectively enable) the ADC channel. + """ + ... + + def deinit(self) -> None: + """ + Disable the ADC channel. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2C.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2C.pyi new file mode 100644 index 00000000..a59d453a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2C.pyi @@ -0,0 +1,261 @@ +""" """ + +from __future__ import annotations + +from typing import List, Sequence, overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class I2C: + """ + I2C is a two-wire protocol for communicating between devices. At the physical + level it consists of 2 wires: SCL and SDA, the clock and data lines respectively. + + I2C objects are created attached to a specific bus. They can be initialised + when created, or initialised later on. + + Printing the I2C object gives you information about its configuration. + + Both hardware and software I2C implementations exist via the + :ref:`machine.I2C ` and `machine.SoftI2C` classes. Hardware I2C uses + underlying hardware support of the system to perform the reads/writes and is + usually efficient and fast but may have restrictions on which pins can be used. + Software I2C is implemented by bit-banging and can be used on any pin but is not + as efficient. These classes have the same methods available and differ primarily + in the way they are constructed. + + Example usage:: + + from machine import I2C + + i2c = I2C(freq=400000) # create I2C peripheral at frequency of 400kHz + # depending on the port, extra parameters may be required + # to select the peripheral and/or pins to use + + i2c.scan() # scan for peripherals, returning a list of 7-bit addresses + + i2c.writeto(42, b'123') # write 3 bytes to peripheral with 7-bit address 42 + i2c.readfrom(42, 4) # read 4 bytes from peripheral with 7-bit address 42 + + i2c.readfrom_mem(42, 8, 3) # read 3 bytes from memory of peripheral 42, + # starting at memory-address 8 in the peripheral + i2c.writeto_mem(42, 2, b'\x10') # write 1 byte to memory of peripheral 42 + # starting at address 2 in the peripheral + """ + + @overload + def __init__(self, id: int, /, *, freq: int = 400_000): + """ + Construct and return a new I2C object using the following parameters: + + - *id* identifies a particular I2C peripheral. Allowed values for + depend on the particular port/board + - *scl* should be a pin object specifying the pin to use for SCL. + - *sda* should be a pin object specifying the pin to use for SDA. + - *freq* should be an integer which sets the maximum frequency + for SCL. + + Note that some ports/boards will have default values of *scl* and *sda* + that can be changed in this constructor. Others will have fixed values + of *scl* and *sda* that cannot be changed. + """ + + @overload + def __init__(self, id: int, /, *, scl: Pin, sda: Pin, freq: int = 400_000): + """ + Construct and return a new I2C object using the following parameters: + + - *id* identifies a particular I2C peripheral. Allowed values for + depend on the particular port/board + - *scl* should be a pin object specifying the pin to use for SCL. + - *sda* should be a pin object specifying the pin to use for SDA. + - *freq* should be an integer which sets the maximum frequency + for SCL. + + Note that some ports/boards will have default values of *scl* and *sda* + that can be changed in this constructor. Others will have fixed values + of *scl* and *sda* that cannot be changed. + """ + + @overload + def init(self, *, freq: int = 400_000) -> None: + """ + Initialise the I2C bus with the given arguments: + + - *scl* is a pin object for the SCL line + - *sda* is a pin object for the SDA line + - *freq* is the SCL clock rate + + In the case of hardware I2C the actual clock frequency may be lower than the + requested frequency. This is dependent on the platform hardware. The actual + rate may be determined by printing the I2C object. + """ + + @overload + def init(self, *, scl: Pin, sda: Pin, freq: int = 400_000) -> None: + """ + Initialise the I2C bus with the given arguments: + + - *scl* is a pin object for the SCL line + - *sda* is a pin object for the SDA line + - *freq* is the SCL clock rate + + In the case of hardware I2C the actual clock frequency may be lower than the + requested frequency. This is dependent on the platform hardware. The actual + rate may be determined by printing the I2C object. + """ + + def deinit(self) -> None: + """ + Turn off the I2C bus. + + Availability: WiPy. + """ + ... + + def scan(self) -> List: + """ + Scan all I2C addresses between 0x08 and 0x77 inclusive and return a list of + those that respond. A device responds if it pulls the SDA line low after + its address (including a write bit) is sent on the bus. + """ + ... + + def start(self) -> None: + """ + Generate a START condition on the bus (SDA transitions to low while SCL is high). + """ + ... + + def stop(self) -> None: + """ + Generate a STOP condition on the bus (SDA transitions to high while SCL is high). + """ + ... + + def readinto(self, buf: AnyWritableBuf, nack: bool = True, /) -> None: + """ + Reads bytes from the bus and stores them into *buf*. The number of bytes + read is the length of *buf*. An ACK will be sent on the bus after + receiving all but the last byte. After the last byte is received, if *nack* + is true then a NACK will be sent, otherwise an ACK will be sent (and in this + case the peripheral assumes more bytes are going to be read in a later call). + """ + ... + + def write(self, buf: AnyReadableBuf, /) -> int: + """ + Write the bytes from *buf* to the bus. Checks that an ACK is received + after each byte and stops transmitting the remaining bytes if a NACK is + received. The function returns the number of ACKs that were received. + """ + ... + + def readfrom(self, addr: int, nbytes: int, stop: bool = True, /) -> bytes: + """ + Read *nbytes* from the peripheral specified by *addr*. + If *stop* is true then a STOP condition is generated at the end of the transfer. + Returns a `bytes` object with the data read. + """ + ... + + def readfrom_into(self, addr: int, buf: AnyWritableBuf, stop: bool = True, /) -> None: + """ + Read into *buf* from the peripheral specified by *addr*. + The number of bytes read will be the length of *buf*. + If *stop* is true then a STOP condition is generated at the end of the transfer. + + The method returns ``None``. + """ + ... + + def writeto(self, addr: int, buf: AnyReadableBuf, stop: bool = True, /) -> int: + """ + Write the bytes from *buf* to the peripheral specified by *addr*. If a + NACK is received following the write of a byte from *buf* then the + remaining bytes are not sent. If *stop* is true then a STOP condition is + generated at the end of the transfer, even if a NACK is received. + The function returns the number of ACKs that were received. + """ + ... + + def writevto(self, addr: int, vector: Sequence[AnyReadableBuf], stop: bool = True, /) -> int: + """ + Write the bytes contained in *vector* to the peripheral specified by *addr*. + *vector* should be a tuple or list of objects with the buffer protocol. + The *addr* is sent once and then the bytes from each object in *vector* + are written out sequentially. The objects in *vector* may be zero bytes + in length in which case they don't contribute to the output. + + If a NACK is received following the write of a byte from one of the + objects in *vector* then the remaining bytes, and any remaining objects, + are not sent. If *stop* is true then a STOP condition is generated at + the end of the transfer, even if a NACK is received. The function + returns the number of ACKs that were received. + """ + ... + + def readfrom_mem(self, addr: int, memaddr: int, nbytes: int, /, *, addrsize: int = 8) -> bytes: + """ + Read *nbytes* from the peripheral specified by *addr* starting from the memory + address specified by *memaddr*. + The argument *addrsize* specifies the address size in bits. + Returns a `bytes` object with the data read. + """ + ... + + def readfrom_mem_into(self, addr: int, memaddr: int, buf: AnyWritableBuf, /, *, addrsize: int = 8) -> None: + """ + Read into *buf* from the peripheral specified by *addr* starting from the + memory address specified by *memaddr*. The number of bytes read is the + length of *buf*. + The argument *addrsize* specifies the address size in bits (on ESP8266 + this argument is not recognised and the address size is always 8 bits). + + The method returns ``None``. + """ + ... + + def writeto_mem(self, addr: int, memaddr: int, buf: AnyReadableBuf, /, *, addrsize: int = 8) -> None: + """ + Write *buf* to the peripheral specified by *addr* starting from the + memory address specified by *memaddr*. + The argument *addrsize* specifies the address size in bits (on ESP8266 + this argument is not recognised and the address size is always 8 bits). + + The method returns ``None``. + """ + ... + +class SoftI2C(I2C): + """ + Construct a new software I2C object. The parameters are: + + - *scl* should be a pin object specifying the pin to use for SCL. + - *sda* should be a pin object specifying the pin to use for SDA. + - *freq* should be an integer which sets the maximum frequency + for SCL. + - *timeout* is the maximum time in microseconds to wait for clock + stretching (SCL held low by another device on the bus), after + which an ``OSError(ETIMEDOUT)`` exception is raised. + """ + + def __init__(self, scl, sda, *, freq=400000, timeout=50000) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2S.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2S.pyi new file mode 100644 index 00000000..7b79bfb4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/I2S.pyi @@ -0,0 +1,222 @@ +""" """ + +from __future__ import annotations + +from typing import Callable + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class I2S: + """ + I2S is a synchronous serial protocol used to connect digital audio devices. + At the physical level, a bus consists of 3 lines: SCK, WS, SD. + The I2S class supports controller operation. Peripheral operation is not supported. + + The I2S class is currently available as a Technical Preview. During the preview period, feedback from + users is encouraged. Based on this feedback, the I2S class API and implementation may be changed. + + I2S objects can be created and initialized using:: + + from machine import I2S + from machine import Pin + + # ESP32 + sck_pin = Pin(14) # Serial clock output + ws_pin = Pin(13) # Word clock output + sd_pin = Pin(12) # Serial data output + + or + + # PyBoards + sck_pin = Pin("Y6") # Serial clock output + ws_pin = Pin("Y5") # Word clock output + sd_pin = Pin("Y8") # Serial data output + + audio_out = I2S(2, + sck=sck_pin, ws=ws_pin, sd=sd_pin, + mode=I2S.TX, + bits=16, + format=I2S.MONO, + rate=44100, + ibuf=20000) + + audio_in = I2S(2, + sck=sck_pin, ws=ws_pin, sd=sd_pin, + mode=I2S.RX, + bits=32, + format=I2S.STEREO, + rate=22050, + ibuf=20000) + + 3 modes of operation are supported: + - blocking + - non-blocking + - uasyncio + + blocking:: + + num_written = audio_out.write(buf) # blocks until buf emptied + + num_read = audio_in.readinto(buf) # blocks until buf filled + + non-blocking:: + + audio_out.irq(i2s_callback) # i2s_callback is called when buf is emptied + num_written = audio_out.write(buf) # returns immediately + + audio_in.irq(i2s_callback) # i2s_callback is called when buf is filled + num_read = audio_in.readinto(buf) # returns immediately + + uasyncio:: + + swriter = uasyncio.StreamWriter(audio_out) + swriter.write(buf) + await swriter.drain() + + sreader = uasyncio.StreamReader(audio_in) + num_read = await sreader.readinto(buf) + """ + + RX: Incomplete + """for initialising the I2S bus ``mode`` to receive""" + TX: Incomplete + """for initialising the I2S bus ``mode`` to transmit""" + STEREO: Incomplete + """for initialising the I2S bus ``format`` to stereo""" + MONO: Incomplete + """for initialising the I2S bus ``format`` to mono""" + def __init__( + self, + id: int, + /, + *, + sck: Pin, + ws: Pin, + sd: Pin, + mode: int, + bits: int, + format: int, + rate: int, + ibuf: int, + ) -> None: + """ + Construct an I2S object of the given id: + + - ``id`` identifies a particular I2S bus. + + ``id`` is board and port specific: + + - PYBv1.0/v1.1: has one I2S bus with id=2. + - PYBD-SFxW: has two I2S buses with id=1 and id=2. + - ESP32: has two I2S buses with id=0 and id=1. + + Keyword-only parameters that are supported on all ports: + + - ``sck`` is a pin object for the serial clock line + - ``ws`` is a pin object for the word select line + - ``sd`` is a pin object for the serial data line + - ``mode`` specifies receive or transmit + - ``bits`` specifies sample size (bits), 16 or 32 + - ``format`` specifies channel format, STEREO or MONO + - ``rate`` specifies audio sampling rate (samples/s) + - ``ibuf`` specifies internal buffer length (bytes) + + For all ports, DMA runs continuously in the background and allows user applications to perform other operations while + sample data is transfered between the internal buffer and the I2S peripheral unit. + Increasing the size of the internal buffer has the potential to increase the time that user applications can perform non-I2S operations + before underflow (e.g. ``write`` method) or overflow (e.g. ``readinto`` method). + """ + + def init( + self, + *, + sck: Pin, + ws: Pin, + sd: Pin, + mode: int, + bits: int, + format: int, + rate: int, + ibuf: int, + ) -> None: + """ + see Constructor for argument descriptions + """ + ... + + def deinit(self) -> None: + """ + Deinitialize the I2S bus + """ + ... + + def readinto( + self, + buf: AnyWritableBuf, + /, + ) -> int: + """ + Read audio samples into the buffer specified by ``buf``. ``buf`` must support the buffer protocol, such as bytearray or array. + "buf" byte ordering is little-endian. For Stereo format, left channel sample precedes right channel sample. For Mono format, + the left channel sample data is used. + Returns number of bytes read + """ + ... + + def write( + self, + buf: AnyReadableBuf, + /, + ) -> int: + """ + Write audio samples contained in ``buf``. ``buf`` must support the buffer protocol, such as bytearray or array. + "buf" byte ordering is little-endian. For Stereo format, left channel sample precedes right channel sample. For Mono format, + the sample data is written to both the right and left channels. + Returns number of bytes written + """ + ... + + def irq( + self, + handler: Callable[[], None], + /, + ) -> None: + """ + Set a callback. ``handler`` is called when ``buf`` is emptied (``write`` method) or becomes full (``readinto`` method). + Setting a callback changes the ``write`` and ``readinto`` methods to non-blocking operation. + ``handler`` is called in the context of the MicroPython scheduler. + """ + ... + + @staticmethod + def shift( + buf: AnyWritableBuf, + bits: int, + shift: int, + /, + ) -> None: + """ + bitwise shift of all samples contained in ``buf``. ``bits`` specifies sample size in bits. ``shift`` specifies the number of bits to shift each sample. + Positive for left shift, negative for right shift. + Typically used for volume control. Each bit shift changes sample volume by 6dB. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/PWM.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/PWM.pyi new file mode 100644 index 00000000..701c6468 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/PWM.pyi @@ -0,0 +1,191 @@ +""" """ + +from __future__ import annotations + +from typing import overload + +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class PWM: + """ + This class provides pulse width modulation output. + + Example usage:: + + from machine import PWM + + pwm = PWM(pin) # create a PWM object on a pin + pwm.duty_u16(32768) # set duty to 50% + + # reinitialise with a period of 200us, duty of 5us + pwm.init(freq=5000, duty_ns=5000) + + pwm.duty_ns(3000) # set pulse width to 3us + + pwm.deinit() + + + Limitations of PWM + ------------------ + + * Not all frequencies can be generated with absolute accuracy due to + the discrete nature of the computing hardware. Typically the PWM frequency + is obtained by dividing some integer base frequency by an integer divider. + For example, if the base frequency is 80MHz and the required PWM frequency is + 300kHz the divider must be a non-integer number 80000000 / 300000 = 266.67. + After rounding the divider is set to 267 and the PWM frequency will be + 80000000 / 267 = 299625.5 Hz, not 300kHz. If the divider is set to 266 then + the PWM frequency will be 80000000 / 266 = 300751.9 Hz, but again not 300kHz. + + * The duty cycle has the same discrete nature and its absolute accuracy is not + achievable. On most hardware platforms the duty will be applied at the next + frequency period. Therefore, you should wait more than "1/frequency" before + measuring the duty. + + * The frequency and the duty cycle resolution are usually interdependent. + The higher the PWM frequency the lower the duty resolution which is available, + and vice versa. For example, a 300kHz PWM frequency can have a duty cycle + resolution of 8 bit, not 16-bit as may be expected. In this case, the lowest + 8 bits of *duty_u16* are insignificant. So:: + + pwm=PWM(Pin(13), freq=300_000, duty_u16=2**16//2) + + and:: + + pwm=PWM(Pin(13), freq=300_000, duty_u16=2**16//2 + 255) + + will generate PWM with the same 50% duty cycle. + """ + + def __init__( + self, + dest: Pin | int, + /, + *, + freq: int = ..., + duty_u16: int = ..., + duty_ns: int = ..., + ) -> None: + """ + Construct and return a new PWM object using the following parameters: + + - *dest* is the entity on which the PWM is output, which is usually a + :ref:`machine.Pin ` object, but a port may allow other values, + like integers. + - *freq* should be an integer which sets the frequency in Hz for the + PWM cycle. + - *duty_u16* sets the duty cycle as a ratio ``duty_u16 / 65535``. + - *duty_ns* sets the pulse width in nanoseconds. + + Setting *freq* may affect other PWM objects if the objects share the same + underlying PWM generator (this is hardware specific). + Only one of *duty_u16* and *duty_ns* should be specified at a time. + """ + + def init(self, *, freq: int = ..., duty_u16: int = ..., duty_ns: int = ...) -> None: + """ + Modify settings for the PWM object. See the above constructor for details + about the parameters. + """ + ... + + def deinit(self) -> None: + """ + Disable the PWM output. + """ + ... + + @overload + def freq(self) -> int: + """ + Get or set the current frequency of the PWM output. + + With no arguments the frequency in Hz is returned. + + With a single *value* argument the frequency is set to that value in Hz. The + method may raise a ``ValueError`` if the frequency is outside the valid range. + """ + + @overload + def freq( + self, + value: int, + /, + ) -> None: + """ + Get or set the current frequency of the PWM output. + + With no arguments the frequency in Hz is returned. + + With a single *value* argument the frequency is set to that value in Hz. The + method may raise a ``ValueError`` if the frequency is outside the valid range. + """ + + @overload + def duty_u16(self) -> int: + """ + Get or set the current duty cycle of the PWM output, as an unsigned 16-bit + value in the range 0 to 65535 inclusive. + + With no arguments the duty cycle is returned. + + With a single *value* argument the duty cycle is set to that value, measured + as the ratio ``value / 65535``. + """ + + @overload + def duty_u16( + self, + value: int, + /, + ) -> None: + """ + Get or set the current duty cycle of the PWM output, as an unsigned 16-bit + value in the range 0 to 65535 inclusive. + + With no arguments the duty cycle is returned. + + With a single *value* argument the duty cycle is set to that value, measured + as the ratio ``value / 65535``. + """ + + @overload + def duty_ns(self) -> int: + """ + Get or set the current pulse width of the PWM output, as a value in nanoseconds. + + With no arguments the pulse width in nanoseconds is returned. + + With a single *value* argument the pulse width is set to that value. + """ + + @overload + def duty_ns( + self, + value: int, + /, + ) -> None: + """ + Get or set the current pulse width of the PWM output, as a value in nanoseconds. + + With no arguments the pulse width in nanoseconds is returned. + + With a single *value* argument the pulse width is set to that value. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Pin.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Pin.pyi new file mode 100644 index 00000000..49228dfc --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Pin.pyi @@ -0,0 +1,435 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Callable, overload + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class Pin: + """ + A pin object is used to control I/O pins (also known as GPIO - general-purpose + input/output). Pin objects are commonly associated with a physical pin that can + drive an output voltage and read input voltages. The pin class has methods to set the mode of + the pin (IN, OUT, etc) and methods to get and set the digital logic level. + For analog control of a pin, see the :class:`ADC` class. + + A pin object is constructed by using an identifier which unambiguously + specifies a certain I/O pin. The allowed forms of the identifier and the + physical pin that the identifier maps to are port-specific. Possibilities + for the identifier are an integer, a string or a tuple with port and pin + number. + + Usage Model:: + + from machine import Pin + + # create an output pin on pin #0 + p0 = Pin(0, Pin.OUT) + + # set the value low then high + p0.value(0) + p0.value(1) + + # create an input pin on pin #2, with a pull up resistor + p2 = Pin(2, Pin.IN, Pin.PULL_UP) + + # read and print the pin value + print(p2.value()) + + # reconfigure pin #0 in input mode with a pull down resistor + p0.init(p0.IN, p0.PULL_DOWN) + + # configure an irq callback + p0.irq(lambda p:print(p)) + """ + + IN: Incomplete + """Selects the pin mode.""" + OUT: Incomplete + """Selects the pin mode.""" + OPEN_DRAIN: Incomplete + """Selects the pin mode.""" + ALT: Incomplete + """Selects the pin mode.""" + ALT_OPEN_DRAIN: Incomplete + """Selects the pin mode.""" + ANALOG: Incomplete + """Selects the pin mode.""" + PULL_UP: Incomplete + """\ + Selects whether there is a pull up/down resistor. Use the value + ``None`` for no pull. + """ + PULL_DOWN: Incomplete + """\ + Selects whether there is a pull up/down resistor. Use the value + ``None`` for no pull. + """ + PULL_HOLD: Incomplete + """\ + Selects whether there is a pull up/down resistor. Use the value + ``None`` for no pull. + """ + DRIVE_0: int + """\ + Selects the pin drive strength. A port may define additional drive + constants with increasing number corresponding to increasing drive + strength. + """ + DRIVE_1: int + """\ + Selects the pin drive strength. A port may define additional drive + constants with increasing number corresponding to increasing drive + strength. + """ + DRIVE_2: int + """\ + Selects the pin drive strength. A port may define additional drive + constants with increasing number corresponding to increasing drive + strength. + """ + IRQ_FALLING: Incomplete + """Selects the IRQ trigger type.""" + IRQ_RISING: Incomplete + """Selects the IRQ trigger type.""" + IRQ_LOW_LEVEL: Incomplete + """Selects the IRQ trigger type.""" + IRQ_HIGH_LEVEL: Incomplete + """Selects the IRQ trigger type.""" + def __init__( + self, + id: Any, + /, + mode: int = -1, + pull: int = -1, + *, + value: Any = None, + drive: int | None = None, + alt: int | None = None, + ) -> None: + """ + Access the pin peripheral (GPIO pin) associated with the given ``id``. If + additional arguments are given in the constructor then they are used to initialise + the pin. Any settings that are not specified will remain in their previous state. + + The arguments are: + + - ``id`` is mandatory and can be an arbitrary object. Among possible value + types are: int (an internal Pin identifier), str (a Pin name), and tuple + (pair of [port, pin]). + + - ``mode`` specifies the pin mode, which can be one of: + + - ``Pin.IN`` - Pin is configured for input. If viewed as an output the pin + is in high-impedance state. + + - ``Pin.OUT`` - Pin is configured for (normal) output. + + - ``Pin.OPEN_DRAIN`` - Pin is configured for open-drain output. Open-drain + output works in the following way: if the output value is set to 0 the pin + is active at a low level; if the output value is 1 the pin is in a high-impedance + state. Not all ports implement this mode, or some might only on certain pins. + + - ``Pin.ALT`` - Pin is configured to perform an alternative function, which is + port specific. For a pin configured in such a way any other Pin methods + (except :meth:`Pin.init`) are not applicable (calling them will lead to undefined, + or a hardware-specific, result). Not all ports implement this mode. + + - ``Pin.ALT_OPEN_DRAIN`` - The Same as ``Pin.ALT``, but the pin is configured as + open-drain. Not all ports implement this mode. + + - ``Pin.ANALOG`` - Pin is configured for analog input, see the :class:`ADC` class. + + - ``pull`` specifies if the pin has a (weak) pull resistor attached, and can be + one of: + + - ``None`` - No pull up or down resistor. + - ``Pin.PULL_UP`` - Pull up resistor enabled. + - ``Pin.PULL_DOWN`` - Pull down resistor enabled. + + - ``value`` is valid only for Pin.OUT and Pin.OPEN_DRAIN modes and specifies initial + output pin value if given, otherwise the state of the pin peripheral remains + unchanged. + + - ``drive`` specifies the output power of the pin and can be one of: ``Pin.LOW_POWER``, + ``Pin.MED_POWER`` or ``Pin.HIGH_POWER``. The actual current driving capabilities + are port dependent. Not all ports implement this argument. + + - ``alt`` specifies an alternate function for the pin and the values it can take are + port dependent. This argument is valid only for ``Pin.ALT`` and ``Pin.ALT_OPEN_DRAIN`` + modes. It may be used when a pin supports more than one alternate function. If only + one pin alternate function is supported the this argument is not required. Not all + ports implement this argument. + + As specified above, the Pin class allows to set an alternate function for a particular + pin, but it does not specify any further operations on such a pin. Pins configured in + alternate-function mode are usually not used as GPIO but are instead driven by other + hardware peripherals. The only operation supported on such a pin is re-initialising, + by calling the constructor or :meth:`Pin.init` method. If a pin that is configured in + alternate-function mode is re-initialised with ``Pin.IN``, ``Pin.OUT``, or + ``Pin.OPEN_DRAIN``, the alternate function will be removed from the pin. + """ + + def init( + self, + mode: int = -1, + pull: int = -1, + *, + value: Any = None, + drive: int | None = None, + alt: int | None = None, + ) -> None: + """ + Re-initialise the pin using the given parameters. Only those arguments that + are specified will be set. The rest of the pin peripheral state will remain + unchanged. See the constructor documentation for details of the arguments. + + Returns ``None``. + """ + ... + + @overload + def value(self) -> int: + """ + This method allows to set and get the value of the pin, depending on whether + the argument ``x`` is supplied or not. + + If the argument is omitted then this method gets the digital logic level of + the pin, returning 0 or 1 corresponding to low and high voltage signals + respectively. The behaviour of this method depends on the mode of the pin: + + - ``Pin.IN`` - The method returns the actual input value currently present + on the pin. + - ``Pin.OUT`` - The behaviour and return value of the method is undefined. + - ``Pin.OPEN_DRAIN`` - If the pin is in state '0' then the behaviour and + return value of the method is undefined. Otherwise, if the pin is in + state '1', the method returns the actual input value currently present + on the pin. + + If the argument is supplied then this method sets the digital logic level of + the pin. The argument ``x`` can be anything that converts to a boolean. + If it converts to ``True``, the pin is set to state '1', otherwise it is set + to state '0'. The behaviour of this method depends on the mode of the pin: + + - ``Pin.IN`` - The value is stored in the output buffer for the pin. The + pin state does not change, it remains in the high-impedance state. The + stored value will become active on the pin as soon as it is changed to + ``Pin.OUT`` or ``Pin.OPEN_DRAIN`` mode. + - ``Pin.OUT`` - The output buffer is set to the given value immediately. + - ``Pin.OPEN_DRAIN`` - If the value is '0' the pin is set to a low voltage + state. Otherwise the pin is set to high-impedance state. + + When setting the value this method returns ``None``. + """ + + @overload + def value(self, x: Any, /) -> None: + """ + This method allows to set and get the value of the pin, depending on whether + the argument ``x`` is supplied or not. + + If the argument is omitted then this method gets the digital logic level of + the pin, returning 0 or 1 corresponding to low and high voltage signals + respectively. The behaviour of this method depends on the mode of the pin: + + - ``Pin.IN`` - The method returns the actual input value currently present + on the pin. + - ``Pin.OUT`` - The behaviour and return value of the method is undefined. + - ``Pin.OPEN_DRAIN`` - If the pin is in state '0' then the behaviour and + return value of the method is undefined. Otherwise, if the pin is in + state '1', the method returns the actual input value currently present + on the pin. + + If the argument is supplied then this method sets the digital logic level of + the pin. The argument ``x`` can be anything that converts to a boolean. + If it converts to ``True``, the pin is set to state '1', otherwise it is set + to state '0'. The behaviour of this method depends on the mode of the pin: + + - ``Pin.IN`` - The value is stored in the output buffer for the pin. The + pin state does not change, it remains in the high-impedance state. The + stored value will become active on the pin as soon as it is changed to + ``Pin.OUT`` or ``Pin.OPEN_DRAIN`` mode. + - ``Pin.OUT`` - The output buffer is set to the given value immediately. + - ``Pin.OPEN_DRAIN`` - If the value is '0' the pin is set to a low voltage + state. Otherwise the pin is set to high-impedance state. + + When setting the value this method returns ``None``. + """ + + @overload + def __call__(self) -> int: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + + @overload + def __call__(self, x: Any, /) -> None: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + + def on(self) -> None: + """ + Set pin to "1" output level. + """ + ... + + def off(self) -> None: + """ + Set pin to "0" output level. + """ + ... + + def irq( + self, + /, + handler: Callable[[Pin], None] | None = None, + trigger: int = (IRQ_FALLING | IRQ_RISING), + *, + priority: int = 1, + wake: int | None = None, + hard: bool = False, + ) -> Callable[..., Incomplete]: + """ + Configure an interrupt handler to be called when the trigger source of the + pin is active. If the pin mode is ``Pin.IN`` then the trigger source is + the external value on the pin. If the pin mode is ``Pin.OUT`` then the + trigger source is the output buffer of the pin. Otherwise, if the pin mode + is ``Pin.OPEN_DRAIN`` then the trigger source is the output buffer for + state '0' and the external pin value for state '1'. + + The arguments are: + + - ``handler`` is an optional function to be called when the interrupt + triggers. The handler must take exactly one argument which is the + ``Pin`` instance. + + - ``trigger`` configures the event which can generate an interrupt. + Possible values are: + + - ``Pin.IRQ_FALLING`` interrupt on falling edge. + - ``Pin.IRQ_RISING`` interrupt on rising edge. + - ``Pin.IRQ_LOW_LEVEL`` interrupt on low level. + - ``Pin.IRQ_HIGH_LEVEL`` interrupt on high level. + + These values can be OR'ed together to trigger on multiple events. + + - ``priority`` sets the priority level of the interrupt. The values it + can take are port-specific, but higher values always represent higher + priorities. + + - ``wake`` selects the power mode in which this interrupt can wake up the + system. It can be ``machine.IDLE``, ``machine.SLEEP`` or ``machine.DEEPSLEEP``. + These values can also be OR'ed together to make a pin generate interrupts in + more than one power mode. + + - ``hard`` if true a hardware interrupt is used. This reduces the delay + between the pin change and the handler being called. Hard interrupt + handlers may not allocate memory; see :ref:`isr_rules`. + Not all ports support this argument. + + This method returns a callback object. + + The following methods are not part of the core Pin API and only implemented on certain ports. + """ + ... + + def low(self) -> None: + """ + Set pin to "0" output level. + + Availability: nrf, rp2, stm32 ports. + """ + ... + + def high(self) -> None: + """ + Set pin to "1" output level. + + Availability: nrf, rp2, stm32 ports. + """ + ... + + @overload + def mode(self) -> int: + """ + Get or set the pin mode. + See the constructor documentation for details of the ``mode`` argument. + + Availability: cc3200, stm32 ports. + """ + + @overload + def mode(self, mode: int, /) -> None: + """ + Get or set the pin mode. + See the constructor documentation for details of the ``mode`` argument. + + Availability: cc3200, stm32 ports. + """ + + @overload + def pull(self) -> int: + """ + Get or set the pin pull state. + See the constructor documentation for details of the ``pull`` argument. + + Availability: cc3200, stm32 ports. + """ + + @overload + def pull(self, pull: int, /) -> None: + """ + Get or set the pin pull state. + See the constructor documentation for details of the ``pull`` argument. + + Availability: cc3200, stm32 ports. + """ + + @overload + def drive(self, drive: int, /) -> None: + """ + Get or set the pin drive strength. + See the constructor documentation for details of the ``drive`` argument. + + Availability: cc3200 port. + """ + ... + + @overload + def drive(self, drive: int, /) -> None: + """ + Get or set the pin drive strength. + See the constructor documentation for details of the ``drive`` argument. + + Availability: cc3200 port. + """ + + def toggle(self) -> Incomplete: + """ + Toggle output pin from "0" to "1" or vice-versa. + + Availability: mimxrt, samd, rp2 ports. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/RTC.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/RTC.pyi new file mode 100644 index 00000000..249d76e8 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/RTC.pyi @@ -0,0 +1,276 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Callable, Tuple, overload + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class RTC: + """ + The RTC is an independent clock that keeps track of the date + and time. + + Example usage:: + + rtc = machine.RTC() + rtc.datetime((2020, 1, 21, 2, 10, 32, 36, 0)) + print(rtc.datetime()) + + + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + ALARM0: Incomplete + """irq trigger source""" + @overload + def __init__(self, id: int = 0, /, *, datetime: tuple[int, int, int]): + """ + Create an RTC object. See init for parameters of initialization. + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + @overload + def __init__(self, id: int = 0, /, *, datetime: tuple[int, int, int, int]): + """ + Create an RTC object. See init for parameters of initialization. + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + @overload + def __init__(self, id: int = 0, /, *, datetime: tuple[int, int, int, int, int]): + """ + Create an RTC object. See init for parameters of initialization. + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + @overload + def __init__(self, id: int = 0, /, *, datetime: tuple[int, int, int, int, int, int]): + """ + Create an RTC object. See init for parameters of initialization. + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + @overload + def __init__(self, id: int = 0, /, *, datetime: tuple[int, int, int, int, int, int, int]): + """ + Create an RTC object. See init for parameters of initialization. + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + @overload + def __init__(self, id: int = 0, /, *, datetime: tuple[int, int, int, int, int, int, int, int]): + """ + Create an RTC object. See init for parameters of initialization. + + The documentation for RTC is in a poor state; better to experiment and use `dir`! + """ + + def datetime(self, datetimetuple: Any | None = None) -> Tuple: + """ + Get or set the date and time of the RTC. + + With no arguments, this method returns an 8-tuple with the current + date and time. With 1 argument (being an 8-tuple) it sets the date + and time. + + The 8-tuple has the following format: + + (year, month, day, weekday, hours, minutes, seconds, subseconds) + + The meaning of the ``subseconds`` field is hardware dependent. + """ + ... + + @overload + def init(self) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + @overload + def init(self, datetime: tuple[int, int, int], /) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + @overload + def init(self, datetime: tuple[int, int, int, int], /) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + @overload + def init(self, datetime: tuple[int, int, int, int, int], /) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + @overload + def init(self, datetime: tuple[int, int, int, int, int, int], /) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + @overload + def init(self, datetime: tuple[int, int, int, int, int, int, int], /) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + @overload + def init(self, datetime: tuple[int, int, int, int, int, int, int, int], /) -> None: + """ + Initialise the RTC. Datetime is a tuple of the form: + + ``(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])`` + """ + + def now(self) -> Tuple: + """ + Get get the current datetime tuple. + """ + ... + + def deinit(self) -> None: + """ + Resets the RTC to the time of January 1, 2015 and starts running it again. + """ + ... + + @overload + def alarm(self, id: int, time: int, /, *, repeat: bool = False) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + @overload + def alarm(self, id: int, time: tuple[int, int, int], /) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + @overload + def alarm(self, id: int, time: tuple[int, int, int, int], /) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + @overload + def alarm(self, id: int, time: tuple[int, int, int, int, int], /) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + @overload + def alarm(self, id: int, time: tuple[int, int, int, int, int, int], /) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + @overload + def alarm(self, id: int, time: tuple[int, int, int, int, int, int, int], /) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + @overload + def alarm(self, id: int, time: tuple[int, int, int, int, int, int, int, int], /) -> None: + """ + Set the RTC alarm. Time might be either a millisecond value to program the alarm to + current time + time_in_ms in the future, or a datetimetuple. If the time passed is in + milliseconds, repeat can be set to ``True`` to make the alarm periodic. + """ + + def alarm_left(self, alarm_id: int = 0, /) -> int: + """ + Get the number of milliseconds left before the alarm expires. + """ + ... + + def cancel(self, alarm_id: int = 0, /) -> None: + """ + Cancel a running alarm. + """ + ... + + def irq( + self, + /, + *, + trigger: int, + handler: Callable[[RTC], None] | None = None, + wake: int = IDLE, + ) -> None: + """ + Create an irq object triggered by a real time clock alarm. + + - ``trigger`` must be ``RTC.ALARM0`` + - ``handler`` is the function to be called when the callback is triggered. + - ``wake`` specifies the sleep mode from where this interrupt can wake + up the system. + """ + ... + + def memory(self, data: Any | None = None) -> bytes: + """ + ``RTC.memory(data)`` will write *data* to the RTC memory, where *data* is any + object which supports the buffer protocol (including `bytes`, `bytearray`, + `memoryview` and `array.array`). ``RTC.memory()`` reads RTC memory and returns + a `bytes` object. + + Data written to RTC user memory is persistent across restarts, including + `machine.soft_reset()` and `machine.deepsleep()`. + + The maximum length of RTC user memory is 2048 bytes by default on esp32, + and 492 bytes on esp8266. + + Availability: esp32, esp8266 ports. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SD.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SD.pyi new file mode 100644 index 00000000..39dbe57a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SD.pyi @@ -0,0 +1,76 @@ +""" """ + +from __future__ import annotations + +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class SD: + """ + .. warning:: + + This is a non-standard class and is only available on the cc3200 port. + + + The SD card class allows to configure and enable the memory card + module of the WiPy and automatically mount it as ``/sd`` as part + of the file system. There are several pin combinations that can be + used to wire the SD card socket to the WiPy and the pins used can + be specified in the constructor. Please check the `pinout and alternate functions + table. `_ for + more info regarding the pins which can be remapped to be used with a SD card. + + Example usage:: + + from machine import SD + import os + # clk cmd and dat0 pins must be passed along with + # their respective alternate functions + sd = machine.SD(pins=('GP10', 'GP11', 'GP15')) + os.mount(sd, '/sd') + # do normal file operations + """ + + def __init__( + self, + id: int = 0, + pins: tuple[str, str, str] | tuple[Pin, Pin, Pin] = ("GP10", "GP11", "GP15"), + /, + ) -> None: + """ + Create a SD card object. See ``init()`` for parameters if initialization. + """ + + def init( + self, + id: int = 0, + pins: tuple[str, str, str] | tuple[Pin, Pin, Pin] = ("GP10", "GP11", "GP15"), + /, + ) -> None: + """ + Enable the SD card. In order to initialize the card, give it a 3-tuple: + ``(clk_pin, cmd_pin, dat0_pin)``. + """ + ... + + def deinit(self) -> None: + """ + Disable the SD card. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SDCard.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SDCard.pyi new file mode 100644 index 00000000..1c5ad630 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SDCard.pyi @@ -0,0 +1,159 @@ +""" """ + +from __future__ import annotations + +from _mpy_shed import AbstractBlockDev +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class SDCard(AbstractBlockDev): + """ + SD cards are one of the most common small form factor removable storage media. + SD cards come in a variety of sizes and physical form factors. MMC cards are + similar removable storage devices while eMMC devices are electrically similar + storage devices designed to be embedded into other systems. All three form + share a common protocol for communication with their host system and high-level + support looks the same for them all. As such in MicroPython they are implemented + in a single class called :class:`machine.SDCard` . + + Both SD and MMC interfaces support being accessed with a variety of bus widths. + When being accessed with a 1-bit wide interface they can be accessed using the + SPI protocol. Different MicroPython hardware platforms support different widths + and pin configurations but for most platforms there is a standard configuration + for any given hardware. In general constructing an ``SDCard`` object with without + passing any parameters will initialise the interface to the default card slot + for the current hardware. The arguments listed below represent the common + arguments that might need to be set in order to use either a non-standard slot + or a non-standard pin assignment. The exact subset of arguments supported will + vary from platform to platform. + + + Implementation-specific details + ------------------------------- + + Different implementations of the ``SDCard`` class on different hardware support + varying subsets of the options above. + + PyBoard + ``````` + + The standard PyBoard has just one slot. No arguments are necessary or supported. + + ESP32 + ````` + + The ESP32 provides two channels of SD/MMC hardware and also supports + access to SD Cards through either of the two SPI ports that are + generally available to the user. As a result the *slot* argument can + take a value between 0 and 3, inclusive. Slots 0 and 1 use the + built-in SD/MMC hardware while slots 2 and 3 use the SPI ports. Slot 0 + supports 1, 4 or 8-bit wide access while slot 1 supports 1 or 4-bit + access; the SPI slots only support 1-bit access. + + .. note:: Slot 0 is used to communicate with on-board flash memory + on most ESP32 modules and so will be unavailable to the + user. + + .. note:: Most ESP32 modules that provide an SD card slot using the + dedicated hardware only wire up 1 data pin, so the default + value for *width* is 1. + + The pins used by the dedicated SD/MMC hardware are fixed. The pins + used by the SPI hardware can be reassigned. + + .. note:: If any of the SPI signals are remapped then all of the SPI + signals will pass through a GPIO multiplexer unit which + can limit the performance of high frequency signals. Since + the normal operating speed for SD cards is 40MHz this can + cause problems on some cards. + + The default (and preferred) pin assignment are as follows: + + ====== ====== ====== ====== ====== + Slot 0 1 2 3 + ------ ------ ------ ------ ------ + Signal Pin Pin Pin Pin + ====== ====== ====== ====== ====== + sck 6 14 18 14 + cmd 11 15 + cs 5 15 + miso 19 12 + mosi 23 13 + D0 7 2 + D1 8 4 + D2 9 12 + D3 10 13 + D4 16 + D5 17 + D6 5 + D7 18 + ====== ====== ====== ====== ====== + + cc3200 + `````` + + You can set the pins used for SPI access by passing a tuple as the + *pins* argument. + + *Note:* The current cc3200 SD card implementation names the this class + :class:`machine.SD` rather than :class:`machine.SDCard` . + """ + + def __init__( + self, + slot: int = 1, + width: int = 1, + cd: int | str | Pin | None = None, + wp: int | str | Pin | None = None, + sck: int | str | Pin | None = None, + miso: int | str | Pin | None = None, + mosi: int | str | Pin | None = None, + cs: int | str | Pin | None = None, + freq: int = 20000000, + /, + ) -> None: + """ + This class provides access to SD or MMC storage cards using either + a dedicated SD/MMC interface hardware or through an SPI channel. + The class implements the block protocol defined by :class:`os.AbstractBlockDev`. + This allows the mounting of an SD card to be as simple as:: + + os.mount(machine.SDCard(), "/sd") + + The constructor takes the following parameters: + + - *slot* selects which of the available interfaces to use. Leaving this + unset will select the default interface. + + - *width* selects the bus width for the SD/MMC interface. + + - *cd* can be used to specify a card-detect pin. + + - *wp* can be used to specify a write-protect pin. + + - *sck* can be used to specify an SPI clock pin. + + - *miso* can be used to specify an SPI miso pin. + + - *mosi* can be used to specify an SPI mosi pin. + + - *cs* can be used to specify an SPI chip select pin. + + - *freq* selects the SD/MMC interface frequency in Hz (only supported on the ESP32). + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SPI.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SPI.pyi new file mode 100644 index 00000000..f395647c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/SPI.pyi @@ -0,0 +1,285 @@ +""" """ + +from __future__ import annotations + +from typing import overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class SPI: + """ + SPI is a synchronous serial protocol that is driven by a controller. At the + physical level, a bus consists of 3 lines: SCK, MOSI, MISO. Multiple devices + can share the same bus. Each device should have a separate, 4th signal, + CS (Chip Select), to select a particular device on a bus with which + communication takes place. Management of a CS signal should happen in + user code (via machine.Pin class). + + Both hardware and software SPI implementations exist via the + :ref:`machine.SPI ` and `machine.SoftSPI` classes. Hardware SPI uses underlying + hardware support of the system to perform the reads/writes and is usually + efficient and fast but may have restrictions on which pins can be used. + Software SPI is implemented by bit-banging and can be used on any pin but + is not as efficient. These classes have the same methods available and + differ primarily in the way they are constructed. + + Example usage:: + + from machine import SPI, Pin + + spi = SPI(0, baudrate=400000) # Create SPI peripheral 0 at frequency of 400kHz. + # Depending on the use case, extra parameters may be required + # to select the bus characteristics and/or pins to use. + cs = Pin(4, mode=Pin.OUT, value=1) # Create chip-select on pin 4. + + try: + cs(0) # Select peripheral. + spi.write(b"12345678") # Write 8 bytes, and don't care about received data. + finally: + cs(1) # Deselect peripheral. + + try: + cs(0) # Select peripheral. + rxdata = spi.read(8, 0x42) # Read 8 bytes while writing 0x42 for each byte. + finally: + cs(1) # Deselect peripheral. + + rxdata = bytearray(8) + try: + cs(0) # Select peripheral. + spi.readinto(rxdata, 0x42) # Read 8 bytes inplace while writing 0x42 for each byte. + finally: + cs(1) # Deselect peripheral. + + txdata = b"12345678" + rxdata = bytearray(len(txdata)) + try: + cs(0) # Select peripheral. + spi.write_readinto(txdata, rxdata) # Simultaneously write and read bytes. + finally: + cs(1) # Deselect peripheral. + """ + + CONTROLLER: Incomplete + """for initialising the SPI bus to controller; this is only used for the WiPy""" + MSB: Incomplete + """set the first bit to be the most significant bit""" + LSB: Incomplete + """set the first bit to be the least significant bit""" + @overload + def __init__(self, id: int, /): + """ + Construct an SPI object on the given bus, *id*. Values of *id* depend + on a particular port and its hardware. Values 0, 1, etc. are commonly used + to select hardware SPI block #0, #1, etc. + + With no additional parameters, the SPI object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + """ + + @overload + def __init__( + self, + id: int, + /, + baudrate: int = 1_000_000, + *, + polarity: int = 0, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + sck: Pin | None = None, + mosi: Pin | None = None, + miso: Pin | None = None, + ): + """ + Construct an SPI object on the given bus, *id*. Values of *id* depend + on a particular port and its hardware. Values 0, 1, etc. are commonly used + to select hardware SPI block #0, #1, etc. + + With no additional parameters, the SPI object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + """ + + @overload + def __init__( + self, + id: int, + /, + baudrate: int = 1_000_000, + *, + polarity: int = 0, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + pins: tuple[Pin, Pin, Pin] | None = None, + ): + """ + Construct an SPI object on the given bus, *id*. Values of *id* depend + on a particular port and its hardware. Values 0, 1, etc. are commonly used + to select hardware SPI block #0, #1, etc. + + With no additional parameters, the SPI object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + """ + + @overload + def init( + self, + baudrate: int = 1_000_000, + *, + polarity: int = 0, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + sck: Pin | None = None, + mosi: Pin | None = None, + miso: Pin | None = None, + ) -> None: + """ + Initialise the SPI bus with the given parameters: + + - ``baudrate`` is the SCK clock rate. + - ``polarity`` can be 0 or 1, and is the level the idle clock line sits at. + - ``phase`` can be 0 or 1 to sample data on the first or second clock edge + respectively. + - ``bits`` is the width in bits of each transfer. Only 8 is guaranteed to be supported by all hardware. + - ``firstbit`` can be ``SPI.MSB`` or ``SPI.LSB``. + - ``sck``, ``mosi``, ``miso`` are pins (machine.Pin) objects to use for bus signals. For most + hardware SPI blocks (as selected by ``id`` parameter to the constructor), pins are fixed + and cannot be changed. In some cases, hardware blocks allow 2-3 alternative pin sets for + a hardware SPI block. Arbitrary pin assignments are possible only for a bitbanging SPI driver + (``id`` = -1). + - ``pins`` - WiPy port doesn't ``sck``, ``mosi``, ``miso`` arguments, and instead allows to + specify them as a tuple of ``pins`` parameter. + + In the case of hardware SPI the actual clock frequency may be lower than the + requested baudrate. This is dependent on the platform hardware. The actual + rate may be determined by printing the SPI object. + """ + + @overload + def init( + self, + baudrate: int = 1_000_000, + *, + polarity: int = 0, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + pins: tuple[Pin, Pin, Pin] | None = None, + ) -> None: + """ + Initialise the SPI bus with the given parameters: + + - ``baudrate`` is the SCK clock rate. + - ``polarity`` can be 0 or 1, and is the level the idle clock line sits at. + - ``phase`` can be 0 or 1 to sample data on the first or second clock edge + respectively. + - ``bits`` is the width in bits of each transfer. Only 8 is guaranteed to be supported by all hardware. + - ``firstbit`` can be ``SPI.MSB`` or ``SPI.LSB``. + - ``sck``, ``mosi``, ``miso`` are pins (machine.Pin) objects to use for bus signals. For most + hardware SPI blocks (as selected by ``id`` parameter to the constructor), pins are fixed + and cannot be changed. In some cases, hardware blocks allow 2-3 alternative pin sets for + a hardware SPI block. Arbitrary pin assignments are possible only for a bitbanging SPI driver + (``id`` = -1). + - ``pins`` - WiPy port doesn't ``sck``, ``mosi``, ``miso`` arguments, and instead allows to + specify them as a tuple of ``pins`` parameter. + + In the case of hardware SPI the actual clock frequency may be lower than the + requested baudrate. This is dependent on the platform hardware. The actual + rate may be determined by printing the SPI object. + """ + + def deinit(self) -> None: + """ + Turn off the SPI bus. + """ + ... + + def read(self, nbytes: int, write: int = 0x00, /) -> bytes: + """ + Read a number of bytes specified by ``nbytes`` while continuously writing + the single byte given by ``write``. + Returns a ``bytes`` object with the data that was read. + """ + ... + + def readinto(self, buf: AnyWritableBuf, write: int = 0x00, /) -> int: + """ + Read into the buffer specified by ``buf`` while continuously writing the + single byte given by ``write``. + Returns ``None``. + + Note: on WiPy this function returns the number of bytes read. + """ + ... + + def write(self, buf: AnyReadableBuf, /) -> int: + """ + Write the bytes contained in ``buf``. + Returns ``None``. + + Note: on WiPy this function returns the number of bytes written. + """ + ... + + def write_readinto(self, write_buf: AnyReadableBuf, read_buf: AnyWritableBuf, /) -> int: + """ + Write the bytes from ``write_buf`` while reading into ``read_buf``. The + buffers can be the same or different, but both buffers must have the + same length. + Returns ``None``. + + Note: on WiPy this function returns the number of bytes written. + """ + ... + +class SoftSPI(SPI): + """ + Construct a new software SPI object. Additional parameters must be + given, usually at least *sck*, *mosi* and *miso*, and these are used + to initialise the bus. See `SPI.init` for a description of the parameters. + """ + + MSB: Incomplete + """set the first bit to be the most significant bit""" + LSB: Incomplete + """set the first bit to be the least significant bit""" + def __init__( + self, + baudrate=500000, + *, + polarity=0, + phase=0, + bits=8, + firstbit=MSB, + sck=None, + mosi=None, + miso=None, + ) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Signal.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Signal.pyi new file mode 100644 index 00000000..a96a7601 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Signal.pyi @@ -0,0 +1,197 @@ +""" """ + +from __future__ import annotations + +from typing import Any, overload + +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class Signal: + """ + The Signal class is a simple extension of the `Pin` class. Unlike Pin, which + can be only in "absolute" 0 and 1 states, a Signal can be in "asserted" + (on) or "deasserted" (off) states, while being inverted (active-low) or + not. In other words, it adds logical inversion support to Pin functionality. + While this may seem a simple addition, it is exactly what is needed to + support wide array of simple digital devices in a way portable across + different boards, which is one of the major MicroPython goals. Regardless + of whether different users have an active-high or active-low LED, a normally + open or normally closed relay - you can develop a single, nicely looking + application which works with each of them, and capture hardware + configuration differences in few lines in the config file of your app. + + Example:: + + from machine import Pin, Signal + + # Suppose you have an active-high LED on pin 0 + led1_pin = Pin(0, Pin.OUT) + # ... and active-low LED on pin 1 + led2_pin = Pin(1, Pin.OUT) + + # Now to light up both of them using Pin class, you'll need to set + # them to different values + led1_pin.value(1) + led2_pin.value(0) + + # Signal class allows to abstract away active-high/active-low + # difference + led1 = Signal(led1_pin, invert=False) + led2 = Signal(led2_pin, invert=True) + + # Now lighting up them looks the same + led1.value(1) + led2.value(1) + + # Even better: + led1.on() + led2.on() + + Following is the guide when Signal vs Pin should be used: + + * Use Signal: If you want to control a simple on/off (including software + PWM!) devices like LEDs, multi-segment indicators, relays, buzzers, or + read simple binary sensors, like normally open or normally closed buttons, + pulled high or low, Reed switches, moisture/flame detectors, etc. etc. + Summing up, if you have a real physical device/sensor requiring GPIO + access, you likely should use a Signal. + + * Use Pin: If you implement a higher-level protocol or bus to communicate + with more complex devices. + + The split between Pin and Signal come from the use cases above and the + architecture of MicroPython: Pin offers the lowest overhead, which may + be important when bit-banging protocols. But Signal adds additional + flexibility on top of Pin, at the cost of minor overhead (much smaller + than if you implemented active-high vs active-low device differences in + Python manually!). Also, Pin is a low-level object which needs to be + implemented for each support board, while Signal is a high-level object + which comes for free once Pin is implemented. + + If in doubt, give the Signal a try! Once again, it is offered to save + developers from the need to handle unexciting differences like active-low + vs active-high signals, and allow other users to share and enjoy your + application, instead of being frustrated by the fact that it doesn't + work for them simply because their LEDs or relays are wired in a slightly + different way. + """ + + @overload + def __init__(self, pin_obj: Pin, invert: bool = False, /): + """ + Create a Signal object. There're two ways to create it: + + * By wrapping existing Pin object - universal method which works for + any board. + * By passing required Pin parameters directly to Signal constructor, + skipping the need to create intermediate Pin object. Available on + many, but not all boards. + + The arguments are: + + - ``pin_obj`` is existing Pin object. + + - ``pin_arguments`` are the same arguments as can be passed to Pin constructor. + + - ``invert`` - if True, the signal will be inverted (active low). + """ + + @overload + def __init__( + self, + id: Pin | str | int, + /, + mode: int = -1, + pull: int = -1, + *, + value: Any = None, + drive: int | None = None, + alt: int | None = None, + invert: bool = False, + ): + """ + Create a Signal object. There're two ways to create it: + + * By wrapping existing Pin object - universal method which works for + any board. + * By passing required Pin parameters directly to Signal constructor, + skipping the need to create intermediate Pin object. Available on + many, but not all boards. + + The arguments are: + + - ``pin_obj`` is existing Pin object. + + - ``pin_arguments`` are the same arguments as can be passed to Pin constructor. + + - ``invert`` - if True, the signal will be inverted (active low). + """ + + @overload + def value(self) -> int: + """ + This method allows to set and get the value of the signal, depending on whether + the argument ``x`` is supplied or not. + + If the argument is omitted then this method gets the signal level, 1 meaning + signal is asserted (active) and 0 - signal inactive. + + If the argument is supplied then this method sets the signal level. The + argument ``x`` can be anything that converts to a boolean. If it converts + to ``True``, the signal is active, otherwise it is inactive. + + Correspondence between signal being active and actual logic level on the + underlying pin depends on whether signal is inverted (active-low) or not. + For non-inverted signal, active status corresponds to logical 1, inactive - + to logical 0. For inverted/active-low signal, active status corresponds + to logical 0, while inactive - to logical 1. + """ + + @overload + def value(self, x: Any, /) -> None: + """ + This method allows to set and get the value of the signal, depending on whether + the argument ``x`` is supplied or not. + + If the argument is omitted then this method gets the signal level, 1 meaning + signal is asserted (active) and 0 - signal inactive. + + If the argument is supplied then this method sets the signal level. The + argument ``x`` can be anything that converts to a boolean. If it converts + to ``True``, the signal is active, otherwise it is inactive. + + Correspondence between signal being active and actual logic level on the + underlying pin depends on whether signal is inverted (active-low) or not. + For non-inverted signal, active status corresponds to logical 1, inactive - + to logical 0. For inverted/active-low signal, active status corresponds + to logical 0, while inactive - to logical 1. + """ + + def on(self) -> None: + """ + Activate signal. + """ + ... + + def off(self) -> None: + """ + Deactivate signal. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Timer.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Timer.pyi new file mode 100644 index 00000000..b9ab95e7 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/Timer.pyi @@ -0,0 +1,183 @@ +""" """ + +from __future__ import annotations + +from typing import Callable, overload + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class Timer: + """ + Hardware timers deal with timing of periods and events. Timers are perhaps + the most flexible and heterogeneous kind of hardware in MCUs and SoCs, + differently greatly from a model to a model. MicroPython's Timer class + defines a baseline operation of executing a callback with a given period + (or once after some delay), and allow specific boards to define more + non-standard behaviour (which thus won't be portable to other boards). + + See discussion of :ref:`important constraints ` on + Timer callbacks. + + .. note:: + + Memory can't be allocated inside irq handlers (an interrupt) and so + exceptions raised within a handler don't give much information. See + :func:`micropython.alloc_emergency_exception_buf` for how to get around this + limitation. + + If you are using a WiPy board please refer to :ref:`machine.TimerWiPy ` + instead of this class. + """ + + ONE_SHOT: Incomplete + """Timer operating mode.""" + PERIODIC: Incomplete + """Timer operating mode.""" + @overload + def __init__(self, id: int, /): + """ + Construct a new timer object of the given ``id``. ``id`` of -1 constructs a + virtual timer (if supported by a board). + ``id`` shall not be passed as a keyword argument. + + See ``init`` for parameters of initialisation. + """ + + @overload + def __init__( + self, + id: int, + /, + *, + mode: int = PERIODIC, + period: int | None = None, + callback: Callable[[Timer], None] | None = None, + ): + """ + Construct a new timer object of the given ``id``. ``id`` of -1 constructs a + virtual timer (if supported by a board). + ``id`` shall not be passed as a keyword argument. + + See ``init`` for parameters of initialisation. + """ + + @overload + def __init__( + self, + id: int, + /, + *, + mode: int = PERIODIC, + freq: int | None = None, + callback: Callable[[Timer], None] | None = None, + ): + """ + Construct a new timer object of the given ``id``. ``id`` of -1 constructs a + virtual timer (if supported by a board). + ``id`` shall not be passed as a keyword argument. + + See ``init`` for parameters of initialisation. + """ + + @overload + def __init__( + self, + id: int, + /, + *, + mode: int = PERIODIC, + tick_hz: int | None = None, + callback: Callable[[Timer], None] | None = None, + ): + """ + Construct a new timer object of the given ``id``. ``id`` of -1 constructs a + virtual timer (if supported by a board). + ``id`` shall not be passed as a keyword argument. + + See ``init`` for parameters of initialisation. + """ + + @overload + def init( + self, + *, + mode: int = PERIODIC, + period: int | None = None, + callback: Callable[[Timer], None] | None = None, + ) -> None: ... + @overload + def init( + self, + *, + mode: int = PERIODIC, + freq: int | None = None, + callback: Callable[[Timer], None] | None = None, + ) -> None: ... + @overload + def init( + self, + *, + mode: int = PERIODIC, + tick_hz: int | None = None, + callback: Callable[[Timer], None] | None = None, + ) -> None: + """ + Initialise the timer. Example:: + + def mycallback(t): + pass + + # periodic at 1kHz + tim.init(mode=Timer.PERIODIC, freq=1000, callback=mycallback) + + # periodic with 100ms period + tim.init(period=100, callback=mycallback) + + # one shot firing after 1000ms + tim.init(mode=Timer.ONE_SHOT, period=1000, callback=mycallback) + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.ONE_SHOT`` - The timer runs once until the configured + period of the channel expires. + - ``Timer.PERIODIC`` - The timer runs periodically at the configured + frequency of the channel. + + - ``freq`` - The timer frequency, in units of Hz. The upper bound of + the frequency is dependent on the port. When both the ``freq`` and + ``period`` arguments are given, ``freq`` has a higher priority and + ``period`` is ignored. + + - ``period`` - The timer period, in milliseconds. + + - ``callback`` - The callable to call upon expiration of the timer period. + The callback must take one argument, which is passed the Timer object. + The ``callback`` argument shall be specified. Otherwise an exception + will occur upon timer expiration: + ``TypeError: 'NoneType' object isn't callable`` + """ + ... + + def deinit(self) -> None: + """ + Deinitialises the timer. Stops the timer, and disables the timer peripheral. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/TimerWiPy.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/TimerWiPy.pyi new file mode 100644 index 00000000..add9004c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/TimerWiPy.pyi @@ -0,0 +1,159 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Callable + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class TimerWiPy: + """ + Construct a new timer object of the given id. Id of -1 constructs a + virtual timer (if supported by a board). + """ + + ONE_SHOT: Incomplete + PERIODIC: Incomplete + """Timer operating mode.""" + def __init__(self, id, *args, **kwargs) -> None: ... + def init(self, mode, *, width=16) -> None: + """ + Initialise the timer. Example:: + + tim.init(Timer.PERIODIC) # periodic 16-bit timer + tim.init(Timer.ONE_SHOT, width=32) # one shot 32-bit timer + + Keyword arguments: + + - ``mode`` can be one of: + + - ``TimerWiPy.ONE_SHOT`` - The timer runs once until the configured + period of the channel expires. + - ``TimerWiPy.PERIODIC`` - The timer runs periodically at the configured + frequency of the channel. + - ``TimerWiPy.PWM`` - Output a PWM signal on a pin. + + - ``width`` must be either 16 or 32 (bits). For really low frequencies < 5Hz + (or large periods), 32-bit timers should be used. 32-bit mode is only available + for ``ONE_SHOT`` AND ``PERIODIC`` modes. + """ + ... + + def deinit(self) -> None: + """ + Deinitialises the timer. Stops the timer, and disables the timer peripheral. + """ + ... + + def channel( + self, + channel, + *, + freq: int, + period: int, + polarity: Incomplete, + duty_cycle: int = 0, + ) -> Incomplete: + """ + If only a channel identifier passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + The operating mode is is the one configured to the Timer object that was used to + create the channel. + + - ``channel`` if the width of the timer is 16-bit, then must be either ``TIMER.A``, ``TIMER.B``. + If the width is 32-bit then it **must be** ``TIMER.A | TIMER.B``. + + Keyword only arguments: + + - ``freq`` sets the frequency in Hz. + - ``period`` sets the period in microseconds. + + .. note:: + + Either ``freq`` or ``period`` must be given, never both. + + - ``polarity`` this is applicable for ``PWM``, and defines the polarity of the duty cycle + - ``duty_cycle`` only applicable to ``PWM``. It's a percentage (0.00-100.00). Since the WiPy + doesn't support floating point numbers the duty cycle must be specified in the range 0-10000, + where 10000 would represent 100.00, 5050 represents 50.50, and so on. + + .. note:: + + When the channel is in PWM mode, the corresponding pin is assigned automatically, therefore + there's no need to assign the alternate function of the pin via the ``Pin`` class. The pins which + support PWM functionality are the following: + + - ``GP24`` on Timer 0 channel A. + - ``GP25`` on Timer 1 channel A. + - ``GP9`` on Timer 2 channel B. + - ``GP10`` on Timer 3 channel A. + - ``GP11`` on Timer 3 channel B. + """ + ... + +class timerchannel: + """ """ + + def irq(self, *, trigger, priority=1, handler=None) -> Callable[..., Incomplete]: + """ + The behaviour of this callback is heavily dependent on the operating + mode of the timer channel: + + - If mode is ``TimerWiPy.PERIODIC`` the callback is executed periodically + with the configured frequency or period. + - If mode is ``TimerWiPy.ONE_SHOT`` the callback is executed once when + the configured timer expires. + - If mode is ``TimerWiPy.PWM`` the callback is executed when reaching the duty + cycle value. + + The accepted params are: + + - ``priority`` level of the interrupt. Can take values in the range 1-7. + Higher values represent higher priorities. + - ``handler`` is an optional function to be called when the interrupt is triggered. + - ``trigger`` must be ``TimerWiPy.TIMEOUT`` when the operating mode is either ``TimerWiPy.PERIODIC`` or + ``TimerWiPy.ONE_SHOT``. In the case that mode is ``TimerWiPy.PWM`` then trigger must be equal to + ``TimerWiPy.MATCH``. + + Returns a callback object. + """ + ... + + def freq(self, value: Any | None = None) -> Incomplete: + """ + Get or set the timer channel frequency (in Hz). + """ + ... + + def period(self, value: Any | None = None) -> Incomplete: + """ + Get or set the timer channel period (in microseconds). + """ + ... + + def duty_cycle(self, value: Any | None = None) -> Incomplete: + """ + Get or set the duty cycle of the PWM signal. It's a percentage (0.00-100.00). Since the WiPy + doesn't support floating point numbers the duty cycle must be specified in the range 0-10000, + where 10000 would represent 100.00, 5050 represents 50.50, and so on. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/UART.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/UART.pyi new file mode 100644 index 00000000..c494ea8b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/UART.pyi @@ -0,0 +1,503 @@ +""" """ + +from __future__ import annotations + +from typing import Callable, Union, overload + +from _mpy_shed import _IRQ, AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +from .Pin import Pin + +class UART: + """ + UART implements the standard UART/USART duplex serial communications protocol. At + the physical level it consists of 2 lines: RX and TX. The unit of communication + is a character (not to be confused with a string character) which can be 8 or 9 + bits wide. + + UART objects can be created and initialised using:: + + from machine import UART + + uart = UART(1, 9600) # init with given baudrate + uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters + + Supported parameters differ on a board: + + Pyboard: Bits can be 7, 8 or 9. Stop can be 1 or 2. With *parity=None*, + only 8 and 9 bits are supported. With parity enabled, only 7 and 8 bits + are supported. + + WiPy/CC3200: Bits can be 5, 6, 7, 8. Stop can be 1 or 2. + + A UART object acts like a `stream` object and reading and writing is done + using the standard stream methods:: + + uart.read(10) # read 10 characters, returns a bytes object + uart.read() # read all available characters + uart.readline() # read a line + uart.readinto(buf) # read and store into the given buffer + uart.write('abc') # write the 3 characters + """ + + RTS: Incomplete + """\ + Flow control options. + + Availability: esp32, mimxrt, renesas-ra, rp2, stm32. + """ + CTS: Incomplete + """\ + Flow control options. + + Availability: esp32, mimxrt, renesas-ra, rp2, stm32. + """ + IRQ_RXIDLE: Incomplete + """\ + IRQ trigger sources. + + Availability: renesas-ra, stm32, esp32, rp2040, mimxrt, samd, cc3200. + """ + IRQ_RX: Incomplete + """\ + IRQ trigger sources. + + Availability: renesas-ra, stm32, esp32, rp2040, mimxrt, samd, cc3200. + """ + IRQ_TXIDLE: Incomplete + """\ + IRQ trigger sources. + + Availability: renesas-ra, stm32, esp32, rp2040, mimxrt, samd, cc3200. + """ + IRQ_BREAK: Incomplete + """\ + IRQ trigger sources. + + Availability: renesas-ra, stm32, esp32, rp2040, mimxrt, samd, cc3200. + """ + @overload + def __init__( + self, + id: int | str, + baudrate: int = 9600, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + /, + *, + tx: Pin | None = None, + rx: Pin | None = None, + txbuf: int | None = None, + rxbuf: int | None = None, + timeout: int | None = None, + timeout_char: int | None = None, + invert: int | None = None, + ): + """ + Construct a UART object of the given id. + """ + + @overload + def __init__( + self, + id: int | str, + baudrate: int = 9600, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + /, + *, + pins: tuple[Pin, Pin] | None = None, + ): + """ + Construct a UART object of the given id. + """ + + @overload + def __init__( + self, + id: int | str, + baudrate: int = 9600, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + /, + *, + pins: tuple[Pin, Pin, Pin, Pin] | None = None, + ): + """ + Construct a UART object of the given id. + """ + + @overload + def init( + self, + baudrate: int = 9600, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + /, + *, + tx: Pin | None = None, + rx: Pin | None = None, + txbuf: int | None = None, + rxbuf: int | None = None, + timeout: int | None = None, + timeout_char: int | None = None, + invert: int | None = None, + ) -> None: + """ + Initialise the UART bus with the given parameters: + + - *baudrate* is the clock rate. + - *bits* is the number of bits per character, 7, 8 or 9. + - *parity* is the parity, ``None``, 0 (even) or 1 (odd). + - *stop* is the number of stop bits, 1 or 2. + + Additional keyword-only parameters that may be supported by a port are: + + - *tx* specifies the TX pin to use. + - *rx* specifies the RX pin to use. + - *rts* specifies the RTS (output) pin to use for hardware receive flow control. + - *cts* specifies the CTS (input) pin to use for hardware transmit flow control. + - *txbuf* specifies the length in characters of the TX buffer. + - *rxbuf* specifies the length in characters of the RX buffer. + - *timeout* specifies the time to wait for the first character (in ms). + - *timeout_char* specifies the time to wait between characters (in ms). + - *invert* specifies which lines to invert. + + - ``0`` will not invert lines (idle state of both lines is logic high). + - ``UART.INV_TX`` will invert TX line (idle state of TX line now logic low). + - ``UART.INV_RX`` will invert RX line (idle state of RX line now logic low). + - ``UART.INV_TX | UART.INV_RX`` will invert both lines (idle state at logic low). + + - *flow* specifies which hardware flow control signals to use. The value + is a bitmask. + + - ``0`` will ignore hardware flow control signals. + - ``UART.RTS`` will enable receive flow control by using the RTS output pin to + signal if the receive FIFO has sufficient space to accept more data. + - ``UART.CTS`` will enable transmit flow control by pausing transmission when the + CTS input pin signals that the receiver is running low on buffer space. + - ``UART.RTS | UART.CTS`` will enable both, for full hardware flow control. + + On the WiPy only the following keyword-only parameter is supported: + + - *pins* is a 4 or 2 item list indicating the TX, RX, RTS and CTS pins (in that order). + Any of the pins can be None if one wants the UART to operate with limited functionality. + If the RTS pin is given the the RX pin must be given as well. The same applies to CTS. + When no pins are given, then the default set of TX and RX pins is taken, and hardware + flow control will be disabled. If *pins* is ``None``, no pin assignment will be made. + + .. note:: + It is possible to call ``init()`` multiple times on the same object in + order to reconfigure UART on the fly. That allows using single UART + peripheral to serve different devices attached to different GPIO pins. + Only one device can be served at a time in that case. + Also do not call ``deinit()`` as it will prevent calling ``init()`` + again. + """ + + @overload + def init( + self, + baudrate: int = 9600, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + /, + *, + pins: tuple[Pin, Pin] | None = None, + ) -> None: + """ + Initialise the UART bus with the given parameters: + + - *baudrate* is the clock rate. + - *bits* is the number of bits per character, 7, 8 or 9. + - *parity* is the parity, ``None``, 0 (even) or 1 (odd). + - *stop* is the number of stop bits, 1 or 2. + + Additional keyword-only parameters that may be supported by a port are: + + - *tx* specifies the TX pin to use. + - *rx* specifies the RX pin to use. + - *rts* specifies the RTS (output) pin to use for hardware receive flow control. + - *cts* specifies the CTS (input) pin to use for hardware transmit flow control. + - *txbuf* specifies the length in characters of the TX buffer. + - *rxbuf* specifies the length in characters of the RX buffer. + - *timeout* specifies the time to wait for the first character (in ms). + - *timeout_char* specifies the time to wait between characters (in ms). + - *invert* specifies which lines to invert. + + - ``0`` will not invert lines (idle state of both lines is logic high). + - ``UART.INV_TX`` will invert TX line (idle state of TX line now logic low). + - ``UART.INV_RX`` will invert RX line (idle state of RX line now logic low). + - ``UART.INV_TX | UART.INV_RX`` will invert both lines (idle state at logic low). + + - *flow* specifies which hardware flow control signals to use. The value + is a bitmask. + + - ``0`` will ignore hardware flow control signals. + - ``UART.RTS`` will enable receive flow control by using the RTS output pin to + signal if the receive FIFO has sufficient space to accept more data. + - ``UART.CTS`` will enable transmit flow control by pausing transmission when the + CTS input pin signals that the receiver is running low on buffer space. + - ``UART.RTS | UART.CTS`` will enable both, for full hardware flow control. + + On the WiPy only the following keyword-only parameter is supported: + + - *pins* is a 4 or 2 item list indicating the TX, RX, RTS and CTS pins (in that order). + Any of the pins can be None if one wants the UART to operate with limited functionality. + If the RTS pin is given the the RX pin must be given as well. The same applies to CTS. + When no pins are given, then the default set of TX and RX pins is taken, and hardware + flow control will be disabled. If *pins* is ``None``, no pin assignment will be made. + + .. note:: + It is possible to call ``init()`` multiple times on the same object in + order to reconfigure UART on the fly. That allows using single UART + peripheral to serve different devices attached to different GPIO pins. + Only one device can be served at a time in that case. + Also do not call ``deinit()`` as it will prevent calling ``init()`` + again. + """ + + @overload + def init( + self, + baudrate: int = 9600, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + /, + *, + pins: tuple[Pin, Pin, Pin, Pin] | None = None, + ) -> None: + """ + Initialise the UART bus with the given parameters: + + - *baudrate* is the clock rate. + - *bits* is the number of bits per character, 7, 8 or 9. + - *parity* is the parity, ``None``, 0 (even) or 1 (odd). + - *stop* is the number of stop bits, 1 or 2. + + Additional keyword-only parameters that may be supported by a port are: + + - *tx* specifies the TX pin to use. + - *rx* specifies the RX pin to use. + - *rts* specifies the RTS (output) pin to use for hardware receive flow control. + - *cts* specifies the CTS (input) pin to use for hardware transmit flow control. + - *txbuf* specifies the length in characters of the TX buffer. + - *rxbuf* specifies the length in characters of the RX buffer. + - *timeout* specifies the time to wait for the first character (in ms). + - *timeout_char* specifies the time to wait between characters (in ms). + - *invert* specifies which lines to invert. + + - ``0`` will not invert lines (idle state of both lines is logic high). + - ``UART.INV_TX`` will invert TX line (idle state of TX line now logic low). + - ``UART.INV_RX`` will invert RX line (idle state of RX line now logic low). + - ``UART.INV_TX | UART.INV_RX`` will invert both lines (idle state at logic low). + + - *flow* specifies which hardware flow control signals to use. The value + is a bitmask. + + - ``0`` will ignore hardware flow control signals. + - ``UART.RTS`` will enable receive flow control by using the RTS output pin to + signal if the receive FIFO has sufficient space to accept more data. + - ``UART.CTS`` will enable transmit flow control by pausing transmission when the + CTS input pin signals that the receiver is running low on buffer space. + - ``UART.RTS | UART.CTS`` will enable both, for full hardware flow control. + + On the WiPy only the following keyword-only parameter is supported: + + - *pins* is a 4 or 2 item list indicating the TX, RX, RTS and CTS pins (in that order). + Any of the pins can be None if one wants the UART to operate with limited functionality. + If the RTS pin is given the the RX pin must be given as well. The same applies to CTS. + When no pins are given, then the default set of TX and RX pins is taken, and hardware + flow control will be disabled. If *pins* is ``None``, no pin assignment will be made. + + .. note:: + It is possible to call ``init()`` multiple times on the same object in + order to reconfigure UART on the fly. That allows using single UART + peripheral to serve different devices attached to different GPIO pins. + Only one device can be served at a time in that case. + Also do not call ``deinit()`` as it will prevent calling ``init()`` + again. + """ + + def deinit(self) -> None: + """ + Turn off the UART bus. + + .. note:: + You will not be able to call ``init()`` on the object after ``deinit()``. + A new instance needs to be created in that case. + """ + ... + + def any(self) -> int: + """ + Returns an integer counting the number of characters that can be read without + blocking. It will return 0 if there are no characters available and a positive + number if there are characters. The method may return 1 even if there is more + than one character available for reading. + + For more sophisticated querying of available characters use select.poll:: + + poll = select.poll() + poll.register(uart, select.POLLIN) + poll.poll(timeout) + """ + ... + + @overload + def read(self) -> bytes | None: + """ + Read characters. If ``nbytes`` is specified then read at most that many bytes, + otherwise read as much data as possible. It may return sooner if a timeout + is reached. The timeout is configurable in the constructor. + + Return value: a bytes object containing the bytes read in. Returns ``None`` + on timeout. + """ + + @overload + def read(self, nbytes: int, /) -> bytes | None: + """ + Read characters. If ``nbytes`` is specified then read at most that many bytes, + otherwise read as much data as possible. It may return sooner if a timeout + is reached. The timeout is configurable in the constructor. + + Return value: a bytes object containing the bytes read in. Returns ``None`` + on timeout. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, /) -> int | None: + """ + Read bytes into the ``buf``. If ``nbytes`` is specified then read at most + that many bytes. Otherwise, read at most ``len(buf)`` bytes. It may return sooner if a timeout + is reached. The timeout is configurable in the constructor. + + Return value: number of bytes read and stored into ``buf`` or ``None`` on + timeout. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, nbytes: int, /) -> int | None: + """ + Read bytes into the ``buf``. If ``nbytes`` is specified then read at most + that many bytes. Otherwise, read at most ``len(buf)`` bytes. It may return sooner if a timeout + is reached. The timeout is configurable in the constructor. + + Return value: number of bytes read and stored into ``buf`` or ``None`` on + timeout. + """ + + def readline(self) -> Union[str, None]: + """ + Read a line, ending in a newline character. It may return sooner if a timeout + is reached. The timeout is configurable in the constructor. + + Return value: the line read or ``None`` on timeout. + """ + ... + + def write(self, buf: AnyReadableBuf, /) -> Union[int, None]: + """ + Write the buffer of bytes to the bus. + + Return value: number of bytes written or ``None`` on timeout. + """ + ... + + def sendbreak(self) -> None: + """ + Send a break condition on the bus. This drives the bus low for a duration + longer than required for a normal transmission of a character. + """ + ... + + def flush(self) -> Incomplete: + """ + Waits until all data has been sent. In case of a timeout, an exception is raised. The timeout + duration depends on the tx buffer size and the baud rate. Unless flow control is enabled, a timeout + should not occur. + + .. note:: + + For the esp8266 and nrf ports the call returns while the last byte is sent. + If required, a one character wait time has to be added in the calling script. + + Availability: rp2, esp32, esp8266, mimxrt, cc3200, stm32, nrf ports, renesas-ra + """ + ... + + def txdone(self) -> bool: + """ + Tells whether all data has been sent or no data transfer is happening. In this case, + it returns ``True``. If a data transmission is ongoing it returns ``False``. + + .. note:: + + For the esp8266 and nrf ports the call may return ``True`` even if the last byte + of a transfer is still being sent. If required, a one character wait time has to be + added in the calling script. + + Availability: rp2, esp32, esp8266, mimxrt, cc3200, stm32, nrf ports, renesas-ra + """ + ... + + def irq( + self, + trigger: int, + priority: int = 1, + handler: Callable[[UART], None] | None = None, + wake: int = IDLE, + /, + ) -> _IRQ: + """ + Configure an interrupt handler to be called when a UART event occurs. + + The arguments are: + + - *handler* is an optional function to be called when the interrupt event + triggers. The handler must take exactly one argument which is the + ``UART`` instance. + + - *trigger* configures the event(s) which can generate an interrupt. + Possible values are a mask of one or more of the following: + + - ``UART.IRQ_RXIDLE`` interrupt after receiving at least one character + and then the RX line goes idle. + - ``UART.IRQ_RX`` interrupt after each received character. + - ``UART.IRQ_TXIDLE`` interrupt after or while the last character(s) of + a message are or have been sent. + - ``UART.IRQ_BREAK`` interrupt when a break state is detected at RX + + - *hard* if true a hardware interrupt is used. This reduces the delay + between the pin change and the handler being called. Hard interrupt + handlers may not allocate memory; see :ref:`isr_rules`. + + Returns an irq object. + + Due to limitations of the hardware not all trigger events are available on all ports. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/USBDevice.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/USBDevice.pyi new file mode 100644 index 00000000..02a36668 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/USBDevice.pyi @@ -0,0 +1,249 @@ +""" """ + +from __future__ import annotations + +from typing import Any + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class USBDevice: + """ + Construct a USBDevice object. + + ``Note:`` This object is a singleton, each call to this constructor + returns the same object reference. + """ + + BUILTIN_NONE: Incomplete + BUILTIN_DEFAULT: Incomplete + BUILTIN_CDC: Incomplete + BUILTIN_MSC: Incomplete + BUILTIN_CDC_MSC: int + """\ + These constant objects hold the built-in descriptor data which is + compiled into the MicroPython firmware. ``USBDevice.BUILTIN_NONE`` and + ``USBDevice.BUILTIN_DEFAULT`` are always present. Additional objects may be present + depending on the firmware build configuration and the actual built-in drivers. + + ``Note:`` Currently at most one of ``USBDevice.BUILTIN_CDC``, + ``USBDevice.BUILTIN_MSC`` and ``USBDevice.BUILTIN_CDC_MSC`` is defined + and will be the same object as ``USBDevice.BUILTIN_DEFAULT``. + These constants are defined to allow run-time detection of + the built-in driver (if any). Support for selecting one of + multiple built-in driver configurations may be added in the + future. + + These values are assigned to :data:`USBDevice.builtin_driver` to get/set the + built-in configuration. + + Each object contains the following read-only fields: + + - ``itf_max`` - One more than the highest bInterfaceNumber value used + in the built-in configuration descriptor. + - ``ep_max`` - One more than the highest bEndpointAddress value used + in the built-in configuration descriptor. Does not include any + ``IN`` flag bit (0x80). + - ``str_max`` - One more than the highest string descriptor index + value used by any built-in descriptor. + - ``desc_dev`` - ``bytes`` object containing the built-in USB device + descriptor. + - ``desc_cfg`` - ``bytes`` object containing the complete built-in USB + configuration descriptor. + """ + def __init__(self) -> None: ... + def config( + self, + desc_dev, + desc_cfg, + desc_strs=None, + open_itf_cb=None, + reset_cb=None, + control_xfer_cb=None, + xfer_cb=None, + ) -> None: + """ + Configures the ``USBDevice`` singleton object with the USB runtime device + state and callback functions: + + - ``desc_dev`` - A bytes-like object containing + the new USB device descriptor. + + - ``desc_cfg`` - A bytes-like object containing the + new USB configuration descriptor. + + - ``desc_strs`` - Optional object holding strings or bytes objects + containing USB string descriptor values. Can be a list, a dict, or any + object which supports subscript indexing with integer keys (USB string + descriptor index). + + Strings are an optional USB feature, and this parameter can be unset + (default) if no strings are referenced in the device and configuration + descriptors, or if only built-in strings should be used. + + Apart from index 0, all the string values should be plain ASCII. Index 0 + is the special "languages" USB descriptor, represented as a bytes object + with a custom format defined in the USB standard. ``None`` can be + returned at index 0 in order to use a default "English" language + descriptor. + + To fall back to providing a built-in string value for a given index, a + subscript lookup can return ``None``, raise ``KeyError``, or raise + ``IndexError``. + + - ``open_itf_cb`` - This callback is called once for each interface + or Interface Association Descriptor in response to a Set + Configuration request from the USB Host (the final stage before + the USB device is available to the host). + + The callback takes a single argument, which is a memoryview of the + interface or IAD descriptor that the host is accepting (including + all associated descriptors). It is a view into the same + ``desc_cfg`` object that was provided as a separate + argument to this function. The memoryview is only valid until the + callback function returns. + + - ``reset_cb`` - This callback is called when the USB host performs + a bus reset. The callback takes no arguments. Any in-progress + transfers will never complete. The USB host will most likely + proceed to re-enumerate the USB device by calling the descriptor + callbacks and then ``open_itf_cb()``. + + - ``control_xfer_cb`` - This callback is called one or more times + for each USB control transfer (device Endpoint 0). It takes two + arguments. + + The first argument is the control transfer stage. It is one of: + + - ``1`` for SETUP stage. + - ``2`` for DATA stage. + - ``3`` for ACK stage. + + Second argument is a memoryview to read the USB control request + data for this stage. The memoryview is only valid until the + callback function returns. Data in this memoryview will be the same + across each of the three stages of a single transfer. + + A successful transfer consists of this callback being called in sequence + for the three stages. Generally speaking, if a device wants to do + something in response to a control request then it's best to wait until + the ACK stage to confirm the host controller completed the transfer as + expected. + + The callback should return one of the following values: + + - ``False`` to stall the endpoint and reject the transfer. It won't + proceed to any remaining stages. + - ``True`` to continue the transfer to the next stage. + - A buffer object can be returned at the SETUP stage when the transfer + will send or receive additional data. Typically this is the case when + the ``wLength`` field in the request has a non-zero value. This should + be a writable buffer for an ``OUT`` direction transfer, or a readable + buffer with data for an ``IN`` direction transfer. + + - ``xfer_cb`` - This callback is called whenever a non-control + transfer submitted by calling :func:`USBDevice.submit_xfer` completes. + + The callback has three arguments: + + 1. The Endpoint number for the completed transfer. + 2. Result value: ``True`` if the transfer succeeded, ``False`` + otherwise. + 3. Number of bytes successfully transferred. In the case of a + "short" transfer, The result is ``True`` and ``xferred_bytes`` + will be smaller than the length of the buffer submitted for the + transfer. + + ``Note:`` If a bus reset occurs (see :func:`USBDevice.reset`), + ``xfer_cb`` is not called for any transfers that have not + already completed. + """ + ... + + def active(self, value: Any | None = None, /) -> bool: + """ + Returns the current active state of this runtime USB device as a + boolean. The runtime USB device is "active" when it is available to + interact with the host, it doesn't mean that a USB Host is actually + present. + + If the optional ``value`` argument is set to a truthy value, then + the USB device will be activated. + + If the optional ``value`` argument is set to a falsey value, then + the USB device is deactivated. While the USB device is deactivated, + it will not be detected by the USB Host. + + To simulate a disconnect and a reconnect of the USB device, call + ``active(False)`` followed by ``active(True)``. This may be + necessary if the runtime device configuration has changed, so that + the host sees the new device. + """ + ... + + def remote_wakeup(self) -> bool: + """ + Wake up host if we are in suspend mode and the REMOTE_WAKEUP feature + is enabled by the host. This has to be enabled in the USB attributes, + and on the host. Returns ``True`` if remote wakeup was enabled and + active and the host was woken up. + """ + ... + + def submit_xfer(self, ep, buffer, /) -> bool: + """ + Submit a USB transfer on endpoint number ``ep``. ``buffer`` must be + an object implementing the buffer interface, with read access for + ``IN`` endpoints and write access for ``OUT`` endpoints. + + ``Note:`` ``ep`` cannot be the control Endpoint number 0. Control + transfers are built up through successive executions of + ``control_xfer_cb``, see above. + + Returns ``True`` if successful, ``False`` if the transfer could not + be queued (as USB device is not configured by host, or because + another transfer is queued on this endpoint.) + + When the USB host completes the transfer, the ``xfer_cb`` callback + is called (see above). + + Raises ``OSError`` with reason ``MP_EINVAL`` If the USB device is not + active. + """ + ... + + def stall(self, ep, stall: Any | None = None, /) -> Incomplete: + """ + Calling this function gets or sets the STALL state of a device endpoint. + + ``ep`` is the number of the endpoint. + + If the optional ``stall`` parameter is set, this is a boolean flag + for the STALL state. + + The return value is the current stall state of the endpoint (before + any change made by this function). + + An endpoint that is set to STALL may remain stalled until this + function is called again, or STALL may be cleared automatically by + the USB host. + + Raises ``OSError`` with reason ``MP_EINVAL`` If the USB device is not + active. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/WDT.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/WDT.pyi new file mode 100644 index 00000000..8a5f5150 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/WDT.pyi @@ -0,0 +1,53 @@ +""" """ + +from __future__ import annotations + +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +class WDT: + """ + The WDT is used to restart the system when the application crashes and ends + up into a non recoverable state. Once started it cannot be stopped or + reconfigured in any way. After enabling, the application must "feed" the + watchdog periodically to prevent it from expiring and resetting the system. + + Example usage:: + + from machine import WDT + wdt = WDT(timeout=2000) # enable it with a timeout of 2s + wdt.feed() + + Availability of this class: pyboard, WiPy, esp8266, esp32. + """ + + def __init__(self, *, id: int = 0, timeout: int = 5000) -> None: + """ + Create a WDT object and start it. The timeout must be given in milliseconds. + Once it is running the timeout cannot be changed and the WDT cannot be stopped either. + + Notes: On the esp32 the minimum timeout is 1 second. On the esp8266 a timeout + cannot be specified, it is determined by the underlying system. + """ + + def feed(self) -> None: + """ + Feed the WDT to prevent it from resetting the system. The application + should place this call in a sensible place ensuring that the WDT is + only fed after verifying that everything is functioning correctly. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/__init__.pyi new file mode 100644 index 00000000..9188183a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/__init__.pyi @@ -0,0 +1,371 @@ +""" +Functions related to the hardware. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/machine.html + +The ``machine`` module contains specific functions related to the hardware +on a particular board. Most functions in this module allow to achieve direct +and unrestricted access to and control of hardware blocks on a system +(like CPU, timers, buses, etc.). Used incorrectly, this can lead to +malfunction, lockups, crashes of your board, and in extreme cases, hardware +damage. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/machine.rst +from __future__ import annotations + +from typing import Any, NoReturn, Optional, overload + +from _typeshed import Incomplete +from machine import IDLE +from machine.ADC import ADC +from machine.ADCBlock import ADCBlock +from machine.I2C import I2C +from machine.I2S import I2S +from machine.Pin import Pin +from machine.PWM import PWM +from machine.RTC import RTC +from machine.SD import SD +from machine.SDCard import SDCard +from machine.Signal import Signal +from machine.SPI import SPI +from machine.Timer import Timer +from machine.UART import UART +from machine.USBDevice import USBDevice +from machine.WDT import WDT + +mem8: Incomplete +"""Read/write 8 bits of memory.""" +mem16: Incomplete +"""Read/write 16 bits of memory.""" +mem32: int +"""\ +Read/write 32 bits of memory. + +Use subscript notation ``[...]`` to index these objects with the address of +interest. Note that the address is the byte address, regardless of the size of +memory being accessed. + +Example use (registers are specific to an stm32 microcontroller): +""" +IDLE: Incomplete +"""IRQ wake values.""" +SLEEP: Incomplete +"""IRQ wake values.""" +DEEPSLEEP: Incomplete +"""IRQ wake values.""" +PWRON_RESET: Incomplete +"""Reset causes.""" +HARD_RESET: Incomplete +"""Reset causes.""" +WDT_RESET: Incomplete +"""Reset causes.""" +DEEPSLEEP_RESET: Incomplete +"""Reset causes.""" +SOFT_RESET: Incomplete +"""Reset causes.""" +WLAN_WAKE: Incomplete +"""Wake-up reasons.""" +PIN_WAKE: Incomplete +"""Wake-up reasons.""" +RTC_WAKE: Incomplete +"""Wake-up reasons.""" + +def reset() -> NoReturn: + """ + Resets the device in a manner similar to pushing the external RESET + button. + """ + ... + +def soft_reset() -> NoReturn: + """ + Performs a soft reset of the interpreter, deleting all Python objects and + resetting the Python heap. It tries to retain the method by which the user + is connected to the MicroPython REPL (eg serial, USB, Wifi). + """ + ... + +def reset_cause() -> int: + """ + Get the reset cause. See :ref:`constants ` for the possible return values. + """ + ... + +def bootloader(value: Optional[Any] = None) -> None: + """ + Reset the device and enter its bootloader. This is typically used to put the + device into a state where it can be programmed with new firmware. + + Some ports support passing in an optional *value* argument which can control + which bootloader to enter, what to pass to it, or other things. + """ + ... + +def disable_irq() -> bool: + """ + Disable interrupt requests. + Returns the previous IRQ state which should be considered an opaque value. + This return value should be passed to the `enable_irq()` function to restore + interrupts to their original state, before `disable_irq()` was called. + """ + ... + +def enable_irq(state: bool = True, /) -> None: + """ + Re-enable interrupt requests. + The *state* parameter should be the value that was returned from the most + recent call to the `disable_irq()` function. + """ + ... + +@overload +def freq() -> int: + """ + Returns the CPU frequency in hertz. + + On some ports this can also be used to set the CPU frequency by passing in *hz*. + """ + +@overload +def freq(self) -> int: + """ + Get or set the current frequency of the PWM output. + + With no arguments the frequency in Hz is returned. + + With a single *value* argument the frequency is set to that value in Hz. The + method may raise a ``ValueError`` if the frequency is outside the valid range. + """ + +@overload +def freq( + self, + value: int, + /, +) -> None: + """ + Get or set the current frequency of the PWM output. + + With no arguments the frequency in Hz is returned. + + With a single *value* argument the frequency is set to that value in Hz. The + method may raise a ``ValueError`` if the frequency is outside the valid range. + """ + +@overload +def freq(hz: int, /) -> None: + """ + Returns the CPU frequency in hertz. + + On some ports this can also be used to set the CPU frequency by passing in *hz*. + """ + +@overload +def freq(self) -> int: + """ + Returns the CPU frequency in hertz. + + On some ports this can also be used to set the CPU frequency by passing in *hz*. + """ + +@overload +def freq( + self, + value: int, + /, +) -> None: + """ + Returns the CPU frequency in hertz. + + On some ports this can also be used to set the CPU frequency by passing in *hz*. + """ + +def idle() -> None: + """ + Gates the clock to the CPU, useful to reduce power consumption at any time + during short or long periods. Peripherals continue working and execution + resumes as soon as any interrupt is triggered, or at most one millisecond + after the CPU was paused. + + It is recommended to call this function inside any tight loop that is + continuously checking for an external change (i.e. polling). This will reduce + power consumption without significantly impacting performance. To reduce + power consumption further then see the :func:`lightsleep`, + :func:`time.sleep()` and :func:`time.sleep_ms()` functions. + """ + ... + +def sleep() -> None: + """ + ``Note:`` This function is deprecated, use :func:`lightsleep()` instead with no arguments. + """ + ... + +@overload +def lightsleep() -> None: + """ + Stops execution in an attempt to enter a low power state. + + If *time_ms* is specified then this will be the maximum time in milliseconds that + the sleep will last for. Otherwise the sleep can last indefinitely. + + With or without a timeout, execution may resume at any time if there are events + that require processing. Such events, or wake sources, should be configured before + sleeping, like `Pin` change or `RTC` timeout. + + The precise behaviour and power-saving capabilities of lightsleep and deepsleep is + highly dependent on the underlying hardware, but the general properties are: + + * A lightsleep has full RAM and state retention. Upon wake execution is resumed + from the point where the sleep was requested, with all subsystems operational. + + * A deepsleep may not retain RAM or any other state of the system (for example + peripherals or network interfaces). Upon wake execution is resumed from the main + script, similar to a hard or power-on reset. The `reset_cause()` function will + return `machine.DEEPSLEEP` and this can be used to distinguish a deepsleep wake + from other resets. + """ + +@overload +def lightsleep(time_ms: int, /) -> None: + """ + Stops execution in an attempt to enter a low power state. + + If *time_ms* is specified then this will be the maximum time in milliseconds that + the sleep will last for. Otherwise the sleep can last indefinitely. + + With or without a timeout, execution may resume at any time if there are events + that require processing. Such events, or wake sources, should be configured before + sleeping, like `Pin` change or `RTC` timeout. + + The precise behaviour and power-saving capabilities of lightsleep and deepsleep is + highly dependent on the underlying hardware, but the general properties are: + + * A lightsleep has full RAM and state retention. Upon wake execution is resumed + from the point where the sleep was requested, with all subsystems operational. + + * A deepsleep may not retain RAM or any other state of the system (for example + peripherals or network interfaces). Upon wake execution is resumed from the main + script, similar to a hard or power-on reset. The `reset_cause()` function will + return `machine.DEEPSLEEP` and this can be used to distinguish a deepsleep wake + from other resets. + """ + +@overload +def deepsleep() -> NoReturn: + """ + Stops execution in an attempt to enter a low power state. + + If *time_ms* is specified then this will be the maximum time in milliseconds that + the sleep will last for. Otherwise the sleep can last indefinitely. + + With or without a timeout, execution may resume at any time if there are events + that require processing. Such events, or wake sources, should be configured before + sleeping, like `Pin` change or `RTC` timeout. + + The precise behaviour and power-saving capabilities of lightsleep and deepsleep is + highly dependent on the underlying hardware, but the general properties are: + + * A lightsleep has full RAM and state retention. Upon wake execution is resumed + from the point where the sleep was requested, with all subsystems operational. + + * A deepsleep may not retain RAM or any other state of the system (for example + peripherals or network interfaces). Upon wake execution is resumed from the main + script, similar to a hard or power-on reset. The `reset_cause()` function will + return `machine.DEEPSLEEP` and this can be used to distinguish a deepsleep wake + from other resets. + """ + +@overload +def deepsleep(time_ms: int, /) -> NoReturn: + """ + Stops execution in an attempt to enter a low power state. + + If *time_ms* is specified then this will be the maximum time in milliseconds that + the sleep will last for. Otherwise the sleep can last indefinitely. + + With or without a timeout, execution may resume at any time if there are events + that require processing. Such events, or wake sources, should be configured before + sleeping, like `Pin` change or `RTC` timeout. + + The precise behaviour and power-saving capabilities of lightsleep and deepsleep is + highly dependent on the underlying hardware, but the general properties are: + + * A lightsleep has full RAM and state retention. Upon wake execution is resumed + from the point where the sleep was requested, with all subsystems operational. + + * A deepsleep may not retain RAM or any other state of the system (for example + peripherals or network interfaces). Upon wake execution is resumed from the main + script, similar to a hard or power-on reset. The `reset_cause()` function will + return `machine.DEEPSLEEP` and this can be used to distinguish a deepsleep wake + from other resets. + """ + +def wake_reason() -> int: + """ + Get the wake reason. See :ref:`constants ` for the possible return values. + + Availability: ESP32, WiPy. + """ + ... + +def unique_id() -> bytes: + """ + Returns a byte string with a unique identifier of a board/SoC. It will vary + from a board/SoC instance to another, if underlying hardware allows. Length + varies by hardware (so use substring of a full value if you expect a short + ID). In some MicroPython ports, ID corresponds to the network MAC address. + """ + ... + +def time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1_000_000, /) -> int: + """ + Time a pulse on the given *pin*, and return the duration of the pulse in + microseconds. The *pulse_level* argument should be 0 to time a low pulse + or 1 to time a high pulse. + + If the current input value of the pin is different to *pulse_level*, + the function first (*) waits until the pin input becomes equal to *pulse_level*, + then (**) times the duration that the pin is equal to *pulse_level*. + If the pin is already equal to *pulse_level* then timing starts straight away. + + The function will return -2 if there was timeout waiting for condition marked + (*) above, and -1 if there was timeout during the main measurement, marked (**) + above. The timeout is the same for both cases and given by *timeout_us* (which + is in microseconds). + """ + ... + +def bitstream(pin, encoding, timing, data, /) -> Incomplete: + """ + Transmits *data* by bit-banging the specified *pin*. The *encoding* argument + specifies how the bits are encoded, and *timing* is an encoding-specific timing + specification. + + The supported encodings are: + + - ``0`` for "high low" pulse duration modulation. This will transmit 0 and + 1 bits as timed pulses, starting with the most significant bit. + The *timing* must be a four-tuple of nanoseconds in the format + ``(high_time_0, low_time_0, high_time_1, low_time_1)``. For example, + ``(400, 850, 800, 450)`` is the timing specification for WS2812 RGB LEDs + at 800kHz. + + The accuracy of the timing varies between ports. On Cortex M0 at 48MHz, it is + at best +/- 120ns, however on faster MCUs (ESP8266, ESP32, STM32, Pyboard), it + will be closer to +/-30ns. + + ``Note:`` For controlling WS2812 / NeoPixel strips, see the :mod:`neopixel` + module for a higher-level API. + """ + ... + +def rng() -> int: + """ + Return a 24-bit software generated random number. + + Availability: WiPy. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/math/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/math/__init__.pyi new file mode 100644 index 00000000..1b85ba0f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/math/__init__.pyi @@ -0,0 +1,260 @@ +""" +Mathematical functions. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/math.html + +CPython module: :mod:`python:math` https://docs.python.org/3/library/math.html . + +The ``math`` module provides some basic mathematical functions for +working with floating-point numbers. + +*Note:* On the pyboard, floating-point numbers have 32-bit precision. + +Availability: not available on WiPy. Floating point support required +for this module. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/math.rst +from __future__ import annotations + +from typing import SupportsFloat, Tuple + +e: float +"""base of the natural logarithm""" +pi: float +"""the ratio of a circle's circumference to its diameter""" + +def acos(x: SupportsFloat, /) -> float: + """ + Return the inverse cosine of ``x``. + """ + ... + +def acosh(x: SupportsFloat, /) -> float: + """ + Return the inverse hyperbolic cosine of ``x``. + """ + ... + +def asin(x: SupportsFloat, /) -> float: + """ + Return the inverse sine of ``x``. + """ + ... + +def asinh(x: SupportsFloat, /) -> float: + """ + Return the inverse hyperbolic sine of ``x``. + """ + ... + +def atan(x: SupportsFloat, /) -> float: + """ + Return the inverse tangent of ``x``. + """ + ... + +def atan2(y: SupportsFloat, x: SupportsFloat, /) -> float: + """ + Return the principal value of the inverse tangent of ``y/x``. + """ + ... + +def atanh(x: SupportsFloat, /) -> float: + """ + Return the inverse hyperbolic tangent of ``x``. + """ + ... + +def ceil(x: SupportsFloat, /) -> int: + """ + Return an integer, being ``x`` rounded towards positive infinity. + """ + ... + +def copysign(x: SupportsFloat, y: SupportsFloat, /) -> float: + """ + Return ``x`` with the sign of ``y``. + """ + ... + +def cos(x: SupportsFloat, /) -> float: + """ + Return the cosine of ``x``. + """ + ... + +def cosh(x: SupportsFloat, /) -> float: + """ + Return the hyperbolic cosine of ``x``. + """ + ... + +def degrees(x: SupportsFloat, /) -> float: + """ + Return radians ``x`` converted to degrees. + """ + ... + +def erf(x: SupportsFloat, /) -> float: + """ + Return the error function of ``x``. + """ + ... + +def erfc(x: SupportsFloat, /) -> float: + """ + Return the complementary error function of ``x``. + """ + ... + +def exp(x: SupportsFloat, /) -> float: + """ + Return the exponential of ``x``. + """ + ... + +def expm1(x: SupportsFloat, /) -> float: + """ + Return ``exp(x) - 1``. + """ + ... + +def fabs(x: SupportsFloat, /) -> float: + """ + Return the absolute value of ``x``. + """ + ... + +def floor(x: SupportsFloat, /) -> int: + """ + Return an integer, being ``x`` rounded towards negative infinity. + """ + ... + +def fmod(x: SupportsFloat, y: SupportsFloat, /) -> float: + """ + Return the remainder of ``x/y``. + """ + ... + +def frexp(x: SupportsFloat, /) -> tuple[float, int]: + """ + Decomposes a floating-point number into its mantissa and exponent. + The returned value is the tuple ``(m, e)`` such that ``x == m * 2**e`` + exactly. If ``x == 0`` then the function returns ``(0.0, 0)``, otherwise + the relation ``0.5 <= abs(m) < 1`` holds. + """ + ... + +def gamma(x: SupportsFloat, /) -> float: + """ + Return the gamma function of ``x``. + """ + ... + +def isfinite(x: SupportsFloat, /) -> bool: + """ + Return ``True`` if ``x`` is finite. + """ + ... + +def isinf(x: SupportsFloat, /) -> bool: + """ + Return ``True`` if ``x`` is infinite. + """ + ... + +def isnan(x: SupportsFloat, /) -> bool: + """ + Return ``True`` if ``x`` is not-a-number + """ + ... + +def ldexp(x: SupportsFloat, exp: int, /) -> float: + """ + Return ``x * (2**exp)``. + """ + ... + +def lgamma(x: SupportsFloat, /) -> float: + """ + Return the natural logarithm of the gamma function of ``x``. + """ + ... + +def log(x: SupportsFloat, /) -> float: + """ + With one argument, return the natural logarithm of *x*. + + With two arguments, return the logarithm of *x* to the given *base*. + """ + ... + +def log10(x: SupportsFloat, /) -> float: + """ + Return the base-10 logarithm of ``x``. + """ + ... + +def log2(x: SupportsFloat, /) -> float: + """ + Return the base-2 logarithm of ``x``. + """ + ... + +def modf(x: SupportsFloat, /) -> Tuple: + """ + Return a tuple of two floats, being the fractional and integral parts of + ``x``. Both return values have the same sign as ``x``. + """ + ... + +def pow(x: SupportsFloat, y: SupportsFloat, /) -> float: + """ + Returns ``x`` to the power of ``y``. + """ + ... + +def radians(x: SupportsFloat, /) -> float: + """ + Return degrees ``x`` converted to radians. + """ + ... + +def sin(x: SupportsFloat, /) -> float: + """ + Return the sine of ``x``. + """ + ... + +def sinh(x: SupportsFloat, /) -> float: + """ + Return the hyperbolic sine of ``x``. + """ + ... + +def sqrt(x: SupportsFloat, /) -> float: + """ + Return the square root of ``x``. + """ + ... + +def tan(x: SupportsFloat, /) -> float: + """ + Return the tangent of ``x``. + """ + ... + +def tanh(x: SupportsFloat, /) -> float: + """ + Return the hyperbolic tangent of ``x``. + """ + ... + +def trunc(x: SupportsFloat, /) -> int: + """ + Return an integer, being ``x`` rounded towards 0. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/micropython/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/micropython/__init__.pyi new file mode 100644 index 00000000..82929669 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/micropython/__init__.pyi @@ -0,0 +1,322 @@ +""" +Access and control MicroPython internals. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/micropython.html +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/micropython.rst +from __future__ import annotations + +from typing import Any, Callable, Optional, Tuple, overload + +from _typeshed import Incomplete +from typing_extensions import TypeVar + +_T = TypeVar("_T") +_F = TypeVar("_F", bound=Callable[..., Any]) +Const_T = TypeVar("Const_T", int, float, str, bytes, Tuple) # constant + +class RingIO: + def __init__(self, size) -> None: ... + def any(self) -> int: + """ + Returns an integer counting the number of characters that can be read. + """ + ... + + def read(self, nbytes: Optional[Any] = None) -> bytes: + """ + Read available characters. This is a non-blocking function. If ``nbytes`` + is specified then read at most that many bytes, otherwise read as much + data as possible. + + Return value: a bytes object containing the bytes read. Will be + zero-length bytes object if no data is available. + """ + ... + + def readline(self, nbytes: Optional[Any] = None) -> bytes: + """ + Read a line, ending in a newline character or return if one exists in + the buffer, else return available bytes in buffer. If ``nbytes`` is + specified then read at most that many bytes. + + Return value: a bytes object containing the line read. + """ + ... + + def readinto(self, buf, nbytes: Optional[Any] = None) -> int: + """ + Read available bytes into the provided ``buf``. If ``nbytes`` is + specified then read at most that many bytes. Otherwise, read at + most ``len(buf)`` bytes. + + Return value: Integer count of the number of bytes read into ``buf``. + """ + ... + + def write(self, buf) -> int: + """ + Non-blocking write of bytes from ``buf`` into the ringbuffer, limited + by the available space in the ringbuffer. + + Return value: Integer count of bytes written. + """ + ... + + def close(self) -> Incomplete: + """ + No-op provided as part of standard `stream` interface. Has no effect + on data in the ringbuffer. + """ + ... + +def const(expr: Const_T, /) -> Const_T: + """ + Used to declare that the expression is a constant so that the compiler can + optimise it. The use of this function should be as follows:: + + from micropython import const + + CONST_X = const(123) + CONST_Y = const(2 * CONST_X + 1) + + Constants declared this way are still accessible as global variables from + outside the module they are declared in. On the other hand, if a constant + begins with an underscore then it is hidden, it is not available as a global + variable, and does not take up any memory during execution. + + This `const` function is recognised directly by the MicroPython parser and is + provided as part of the :mod:`micropython` module mainly so that scripts can be + written which run under both CPython and MicroPython, by following the above + pattern. + """ + ... + +@overload +def opt_level() -> int: + """ + If *level* is given then this function sets the optimisation level for subsequent + compilation of scripts, and returns ``None``. Otherwise it returns the current + optimisation level. + + The optimisation level controls the following compilation features: + + - Assertions: at level 0 assertion statements are enabled and compiled into the + bytecode; at levels 1 and higher assertions are not compiled. + - Built-in ``__debug__`` variable: at level 0 this variable expands to ``True``; + at levels 1 and higher it expands to ``False``. + - Source-code line numbers: at levels 0, 1 and 2 source-code line number are + stored along with the bytecode so that exceptions can report the line number + they occurred at; at levels 3 and higher line numbers are not stored. + + The default optimisation level is usually level 0. + """ + +@overload +def opt_level(level: int, /) -> None: + """ + If *level* is given then this function sets the optimisation level for subsequent + compilation of scripts, and returns ``None``. Otherwise it returns the current + optimisation level. + + The optimisation level controls the following compilation features: + + - Assertions: at level 0 assertion statements are enabled and compiled into the + bytecode; at levels 1 and higher assertions are not compiled. + - Built-in ``__debug__`` variable: at level 0 this variable expands to ``True``; + at levels 1 and higher it expands to ``False``. + - Source-code line numbers: at levels 0, 1 and 2 source-code line number are + stored along with the bytecode so that exceptions can report the line number + they occurred at; at levels 3 and higher line numbers are not stored. + + The default optimisation level is usually level 0. + """ + +def alloc_emergency_exception_buf(size: int, /) -> None: + """ + Allocate *size* bytes of RAM for the emergency exception buffer (a good + size is around 100 bytes). The buffer is used to create exceptions in cases + when normal RAM allocation would fail (eg within an interrupt handler) and + therefore give useful traceback information in these situations. + + A good way to use this function is to put it at the start of your main script + (eg ``boot.py`` or ``main.py``) and then the emergency exception buffer will be active + for all the code following it. + """ + ... + +@overload +def mem_info() -> None: + """ + Print information about currently used memory. If the *verbose* argument + is given then extra information is printed. + + The information that is printed is implementation dependent, but currently + includes the amount of stack and heap used. In verbose mode it prints out + the entire heap indicating which blocks are used and which are free. + """ + +@overload +def mem_info(verbose: Any, /) -> None: + """ + Print information about currently used memory. If the *verbose* argument + is given then extra information is printed. + + The information that is printed is implementation dependent, but currently + includes the amount of stack and heap used. In verbose mode it prints out + the entire heap indicating which blocks are used and which are free. + """ + +@overload +def qstr_info() -> None: + """ + Print information about currently interned strings. If the *verbose* + argument is given then extra information is printed. + + The information that is printed is implementation dependent, but currently + includes the number of interned strings and the amount of RAM they use. In + verbose mode it prints out the names of all RAM-interned strings. + """ + +@overload +def qstr_info(verbose: bool, /) -> None: + """ + Print information about currently interned strings. If the *verbose* + argument is given then extra information is printed. + + The information that is printed is implementation dependent, but currently + includes the number of interned strings and the amount of RAM they use. In + verbose mode it prints out the names of all RAM-interned strings. + """ + +def stack_use() -> int: + """ + Return an integer representing the current amount of stack that is being + used. The absolute value of this is not particularly useful, rather it + should be used to compute differences in stack usage at different points. + """ + ... + +def heap_lock() -> int: + """ + Lock or unlock the heap. When locked no memory allocation can occur and a + `MemoryError` will be raised if any heap allocation is attempted. + `heap_locked()` returns a true value if the heap is currently locked. + + These functions can be nested, ie `heap_lock()` can be called multiple times + in a row and the lock-depth will increase, and then `heap_unlock()` must be + called the same number of times to make the heap available again. + + Both `heap_unlock()` and `heap_locked()` return the current lock depth + (after unlocking for the former) as a non-negative integer, with 0 meaning + the heap is not locked. + + If the REPL becomes active with the heap locked then it will be forcefully + unlocked. + + Note: `heap_locked()` is not enabled on most ports by default, + requires ``MICROPY_PY_MICROPYTHON_HEAP_LOCKED``. + """ + +def heap_unlock() -> int: + """ + Lock or unlock the heap. When locked no memory allocation can occur and a + `MemoryError` will be raised if any heap allocation is attempted. + `heap_locked()` returns a true value if the heap is currently locked. + + These functions can be nested, ie `heap_lock()` can be called multiple times + in a row and the lock-depth will increase, and then `heap_unlock()` must be + called the same number of times to make the heap available again. + + Both `heap_unlock()` and `heap_locked()` return the current lock depth + (after unlocking for the former) as a non-negative integer, with 0 meaning + the heap is not locked. + + If the REPL becomes active with the heap locked then it will be forcefully + unlocked. + + Note: `heap_locked()` is not enabled on most ports by default, + requires ``MICROPY_PY_MICROPYTHON_HEAP_LOCKED``. + """ + +def heap_locked() -> bool: + """ + Lock or unlock the heap. When locked no memory allocation can occur and a + `MemoryError` will be raised if any heap allocation is attempted. + `heap_locked()` returns a true value if the heap is currently locked. + + These functions can be nested, ie `heap_lock()` can be called multiple times + in a row and the lock-depth will increase, and then `heap_unlock()` must be + called the same number of times to make the heap available again. + + Both `heap_unlock()` and `heap_locked()` return the current lock depth + (after unlocking for the former) as a non-negative integer, with 0 meaning + the heap is not locked. + + If the REPL becomes active with the heap locked then it will be forcefully + unlocked. + + Note: `heap_locked()` is not enabled on most ports by default, + requires ``MICROPY_PY_MICROPYTHON_HEAP_LOCKED``. + """ + ... + +def kbd_intr(chr: int) -> None: + """ + Set the character that will raise a `KeyboardInterrupt` exception. By + default this is set to 3 during script execution, corresponding to Ctrl-C. + Passing -1 to this function will disable capture of Ctrl-C, and passing 3 + will restore it. + + This function can be used to prevent the capturing of Ctrl-C on the + incoming stream of characters that is usually used for the REPL, in case + that stream is used for other purposes. + """ + ... + +def schedule(func: Callable[[_T], None], arg: _T, /) -> None: + """ + Schedule the function *func* to be executed "very soon". The function + is passed the value *arg* as its single argument. "Very soon" means that + the MicroPython runtime will do its best to execute the function at the + earliest possible time, given that it is also trying to be efficient, and + that the following conditions hold: + + - A scheduled function will never preempt another scheduled function. + - Scheduled functions are always executed "between opcodes" which means + that all fundamental Python operations (such as appending to a list) + are guaranteed to be atomic. + - A given port may define "critical regions" within which scheduled + functions will never be executed. Functions may be scheduled within + a critical region but they will not be executed until that region + is exited. An example of a critical region is a preempting interrupt + handler (an IRQ). + + A use for this function is to schedule a callback from a preempting IRQ. + Such an IRQ puts restrictions on the code that runs in the IRQ (for example + the heap may be locked) and scheduling a function to call later will lift + those restrictions. + + On multi-threaded ports, the scheduled function's behaviour depends on + whether the Global Interpreter Lock (GIL) is enabled for the specific port: + + - If GIL is enabled, the function can preempt any thread and run in its + context. + - If GIL is disabled, the function will only preempt the main thread and run + in its context. + + Note: If `schedule()` is called from a preempting IRQ, when memory + allocation is not allowed and the callback to be passed to `schedule()` is + a bound method, passing this directly will fail. This is because creating a + reference to a bound method causes memory allocation. A solution is to + create a reference to the method in the class constructor and to pass that + reference to `schedule()`. This is discussed in detail here + :ref:`reference documentation ` under "Creation of Python + objects". + + There is a finite queue to hold the scheduled functions and `schedule()` + will raise a `RuntimeError` if the queue is full. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/modules.json b/tests/data/stub_merge/micropython-v1_24_1-docstubs/modules.json new file mode 100644 index 00000000..62a76af2 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/modules.json @@ -0,0 +1,436 @@ +{ + "$schema": "https://raw.githubusercontent.com/Josverl/micropython-stubber/main/data/schema/stubber-v1_4_0.json", + "firmware": { + "family": "micropython", + "port": "-", + "platform": "-", + "machine": "micropython", + "firmware": "micropython-v1_24_1", + "nodename": "micropython", + "version": "v1.24.1", + "release": "v1.24.1", + "sysname": "micropython" + }, + "stubber": { + "version": "1.24.0", + "stubtype": "documentation" + }, + "modules": [ + { + "file": "_thread/__init__.pyi", + "module": "__init__" + }, + { + "file": "array/__init__.pyi", + "module": "__init__" + }, + { + "file": "asyncio/__init__.pyi", + "module": "__init__" + }, + { + "file": "binascii/__init__.pyi", + "module": "__init__" + }, + { + "file": "bluetooth/__init__.pyi", + "module": "__init__" + }, + { + "file": "btree/__init__.pyi", + "module": "__init__" + }, + { + "file": "cmath/__init__.pyi", + "module": "__init__" + }, + { + "file": "collections/__init__.pyi", + "module": "__init__" + }, + { + "file": "cryptolib/__init__.pyi", + "module": "__init__" + }, + { + "file": "deflate/__init__.pyi", + "module": "__init__" + }, + { + "file": "errno/__init__.pyi", + "module": "__init__" + }, + { + "file": "esp/__init__.pyi", + "module": "__init__" + }, + { + "file": "esp32/__init__.pyi", + "module": "__init__" + }, + { + "file": "espnow/__init__.pyi", + "module": "__init__" + }, + { + "file": "framebuf/__init__.pyi", + "module": "__init__" + }, + { + "file": "gc/__init__.pyi", + "module": "__init__" + }, + { + "file": "gzip/__init__.pyi", + "module": "__init__" + }, + { + "file": "hashlib/__init__.pyi", + "module": "__init__" + }, + { + "file": "heapq/__init__.pyi", + "module": "__init__" + }, + { + "file": "io/__init__.pyi", + "module": "__init__" + }, + { + "file": "json/__init__.pyi", + "module": "__init__" + }, + { + "file": "lcd160cr/__init__.pyi", + "module": "__init__" + }, + { + "file": "machine/__init__.pyi", + "module": "__init__" + }, + { + "file": "machine/ADC.pyi", + "module": "ADC" + }, + { + "file": "machine/ADCBlock.pyi", + "module": "ADCBlock" + }, + { + "file": "machine/ADCWiPy.pyi", + "module": "ADCWiPy" + }, + { + "file": "machine/I2C.pyi", + "module": "I2C" + }, + { + "file": "machine/I2S.pyi", + "module": "I2S" + }, + { + "file": "machine/Pin.pyi", + "module": "Pin" + }, + { + "file": "machine/PWM.pyi", + "module": "PWM" + }, + { + "file": "machine/RTC.pyi", + "module": "RTC" + }, + { + "file": "machine/SD.pyi", + "module": "SD" + }, + { + "file": "machine/SDCard.pyi", + "module": "SDCard" + }, + { + "file": "machine/Signal.pyi", + "module": "Signal" + }, + { + "file": "machine/SPI.pyi", + "module": "SPI" + }, + { + "file": "machine/Timer.pyi", + "module": "Timer" + }, + { + "file": "machine/TimerWiPy.pyi", + "module": "TimerWiPy" + }, + { + "file": "machine/UART.pyi", + "module": "UART" + }, + { + "file": "machine/USBDevice.pyi", + "module": "USBDevice" + }, + { + "file": "machine/WDT.pyi", + "module": "WDT" + }, + { + "file": "math/__init__.pyi", + "module": "__init__" + }, + { + "file": "micropython/__init__.pyi", + "module": "__init__" + }, + { + "file": "neopixel/__init__.pyi", + "module": "__init__" + }, + { + "file": "network/__init__.pyi", + "module": "__init__" + }, + { + "file": "network/LAN.pyi", + "module": "LAN" + }, + { + "file": "network/PPP.pyi", + "module": "PPP" + }, + { + "file": "network/WIZNET5K.pyi", + "module": "WIZNET5K" + }, + { + "file": "network/WLAN.pyi", + "module": "WLAN" + }, + { + "file": "network/WLANWiPy.pyi", + "module": "WLANWiPy" + }, + { + "file": "openamp/__init__.pyi", + "module": "__init__" + }, + { + "file": "os/__init__.pyi", + "module": "__init__" + }, + { + "file": "platform/__init__.pyi", + "module": "__init__" + }, + { + "file": "pyb/__init__.pyi", + "module": "__init__" + }, + { + "file": "pyb/Accel.pyi", + "module": "Accel" + }, + { + "file": "pyb/ADC.pyi", + "module": "ADC" + }, + { + "file": "pyb/CAN.pyi", + "module": "CAN" + }, + { + "file": "pyb/DAC.pyi", + "module": "DAC" + }, + { + "file": "pyb/ExtInt.pyi", + "module": "ExtInt" + }, + { + "file": "pyb/Flash.pyi", + "module": "Flash" + }, + { + "file": "pyb/I2C.pyi", + "module": "I2C" + }, + { + "file": "pyb/LCD.pyi", + "module": "LCD" + }, + { + "file": "pyb/LED.pyi", + "module": "LED" + }, + { + "file": "pyb/Pin.pyi", + "module": "Pin" + }, + { + "file": "pyb/RTC.pyi", + "module": "RTC" + }, + { + "file": "pyb/Servo.pyi", + "module": "Servo" + }, + { + "file": "pyb/SPI.pyi", + "module": "SPI" + }, + { + "file": "pyb/Switch.pyi", + "module": "Switch" + }, + { + "file": "pyb/Timer.pyi", + "module": "Timer" + }, + { + "file": "pyb/UART.pyi", + "module": "UART" + }, + { + "file": "pyb/USB_HID.pyi", + "module": "USB_HID" + }, + { + "file": "pyb/USB_VCP.pyi", + "module": "USB_VCP" + }, + { + "file": "random/__init__.pyi", + "module": "__init__" + }, + { + "file": "rp2/__init__.pyi", + "module": "__init__" + }, + { + "file": "rp2/DMA.pyi", + "module": "DMA" + }, + { + "file": "rp2/Flash.pyi", + "module": "Flash" + }, + { + "file": "rp2/PIO.pyi", + "module": "PIO" + }, + { + "file": "rp2/StateMachine.pyi", + "module": "StateMachine" + }, + { + "file": "select/__init__.pyi", + "module": "__init__" + }, + { + "file": "socket/__init__.pyi", + "module": "__init__" + }, + { + "file": "ssl/__init__.pyi", + "module": "__init__" + }, + { + "file": "stm/__init__.pyi", + "module": "__init__" + }, + { + "file": "struct/__init__.pyi", + "module": "__init__" + }, + { + "file": "sys/__init__.pyi", + "module": "__init__" + }, + { + "file": "time/__init__.pyi", + "module": "__init__" + }, + { + "file": "uarray.pyi", + "module": "uarray" + }, + { + "file": "ubinascii.pyi", + "module": "ubinascii" + }, + { + "file": "uctypes/__init__.pyi", + "module": "__init__" + }, + { + "file": "uio.pyi", + "module": "uio" + }, + { + "file": "ujson.pyi", + "module": "ujson" + }, + { + "file": "uos.pyi", + "module": "uos" + }, + { + "file": "uselect.pyi", + "module": "uselect" + }, + { + "file": "usocket.pyi", + "module": "usocket" + }, + { + "file": "ussl.pyi", + "module": "ussl" + }, + { + "file": "ustruct.pyi", + "module": "ustruct" + }, + { + "file": "utime.pyi", + "module": "utime" + }, + { + "file": "uzlib.pyi", + "module": "uzlib" + }, + { + "file": "vfs/__init__.pyi", + "module": "__init__" + }, + { + "file": "wipy/__init__.pyi", + "module": "__init__" + }, + { + "file": "wm8960/__init__.pyi", + "module": "__init__" + }, + { + "file": "zephyr/__init__.pyi", + "module": "__init__" + }, + { + "file": "zephyr/DiskAccess.pyi", + "module": "DiskAccess" + }, + { + "file": "zephyr/FlashArea.pyi", + "module": "FlashArea" + }, + { + "file": "zephyr/zsensor.pyi", + "module": "zsensor" + }, + { + "file": "zlib/__init__.pyi", + "module": "__init__" + } + ] +} \ No newline at end of file diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/neopixel/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/neopixel/__init__.pyi new file mode 100644 index 00000000..dcd3616f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/neopixel/__init__.pyi @@ -0,0 +1,87 @@ +""" +Control of WS2812 / NeoPixel LEDs. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/neopixel.html + +This module provides a driver for WS2818 / NeoPixel LEDs. + +``Note:`` This module is only included by default on the ESP8266, ESP32 and RP2 + ports. On STM32 / Pyboard and others, you can either install the + ``neopixel`` package using :term:`mip`, or you can download the module + directly from :term:`micropython-lib` and copy it to the filesystem. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/neopixel.rst +from __future__ import annotations + +from typing import Tuple + +from _mpy_shed import _NeoPixelBase +from machine import Pin +from typing_extensions import TypeAlias + +_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int] + +class NeoPixel(_NeoPixelBase): + """ + This class stores pixel data for a WS2812 LED strip connected to a pin. The + application should set pixel data and then call :meth:`NeoPixel.write` + when it is ready to update the strip. + + For example:: + + import neopixel + + # 32 LED strip connected to X8. + p = machine.Pin.board.X8 + n = neopixel.NeoPixel(p, 32) + + # Draw a red gradient. + for i in range(32): + n[i] = (i * 8, 0, 0) + + # Update the strip. + n.write() + """ + + def __init__(self, pin: Pin, n: int, /, *, bpp: int = 3, timing: int = 1) -> None: + """ + Construct an NeoPixel object. The parameters are: + + - *pin* is a machine.Pin instance. + - *n* is the number of LEDs in the strip. + - *bpp* is 3 for RGB LEDs, and 4 for RGBW LEDs. + - *timing* is 0 for 400KHz, and 1 for 800kHz LEDs (most are 800kHz). + """ + + def fill(self, pixel: _Color, /) -> None: + """ + Sets the value of all pixels to the specified *pixel* value (i.e. an + RGB/RGBW tuple). + """ + ... + + def __len__(self) -> int: + """ + Returns the number of LEDs in the strip. + """ + ... + + def __setitem__(self, index: int, val: _Color, /) -> None: + """ + Set the pixel at *index* to the value, which is an RGB/RGBW tuple. + """ + ... + + def __getitem__(self, index: int, /) -> Tuple: + """ + Returns the pixel at *index* as an RGB/RGBW tuple. + """ + ... + + def write(self) -> None: + """ + Writes the current pixel data to the strip. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/LAN.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/LAN.pyi new file mode 100644 index 00000000..491795dd --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/LAN.pyi @@ -0,0 +1,90 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Tuple + +from _typeshed import Incomplete +from machine import SPI, Pin +from network.LAN import LAN +from network.PPP import PPP +from network.WIZNET5K import WIZNET5K +from network.WLAN import WLAN +from network.WLANWiPy import WLANWiPy + +class LAN: + """ + Create a LAN driver object, initialise the LAN module using the given + PHY driver name, and return the LAN object. + + Arguments are: + + - *id* is the number of the Ethernet port, either 0 or 1. + - *phy_type* is the name of the PHY driver. For most board the on-board PHY has to be used and + is the default. Suitable values are port specific. + - *phy_addr* specifies the address of the PHY interface. As with *phy_type*, the hardwired value has + to be used for most boards and that value is the default. + - *ref_clk_mode* specifies, whether the data clock is provided by the Ethernet controller or + the PYH interface. + The default value is the one that matches the board. If set to ``LAN.OUT`` or ``Pin.OUT`` + or ``True``, the clock is driven by the Ethernet controller, if set to ``LAN.IN`` + or ``Pin.IN`` or ``False``, the clock is driven by the PHY interface. + + For example, with the Seeed Arch Mix board you can use:: + + nic = LAN(0, phy_type=LAN.PHY_LAN8720, phy_addr=1, ref_clk_mode=Pin.IN) + """ + + def __init__(self, id, *, phy_type=0, phy_addr=0, ref_clk_mode=0) -> None: ... + def active(self, state: Any | None = None) -> Incomplete: + """ + With a parameter, it sets the interface active if *state* is true, otherwise it + sets it inactive. + Without a parameter, it returns the state. + """ + ... + + def isconnected(self) -> bool: + """ + Returns ``True`` if the physical Ethernet link is connected and up. + Returns ``False`` otherwise. + """ + ... + + def status(self) -> Incomplete: + """ + Returns the LAN status. + """ + ... + + def ifconfig(self, configtuple: Any | None = None) -> Tuple: + """ + Get/set IP address, subnet mask, gateway and DNS. + + When called with no arguments, this method returns a 4-tuple with the above information. + + To set the above values, pass a 4-tuple with the required information. For example:: + + nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')) + """ + ... + + def config(self, config_parameters) -> Incomplete: + """ + Sets or gets parameters of the LAN interface. The only parameter that can be + retrieved is the MAC address, using:: + + mac = LAN.config("mac") + + The parameters that can be set are: + + - ``trace=n`` sets trace levels; suitable values are: + + - 2: trace TX + - 4: trace RX + - 8: full trace + + - ``low_power=bool`` sets or clears low power mode, valid values being ``False`` + or ``True``. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/PPP.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/PPP.pyi new file mode 100644 index 00000000..0d73fc67 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/PPP.pyi @@ -0,0 +1,95 @@ +""" """ + +from __future__ import annotations + +from typing import Any + +from _typeshed import Incomplete +from machine import SPI, Pin +from network.LAN import LAN +from network.PPP import PPP +from network.WIZNET5K import WIZNET5K +from network.WLAN import WLAN +from network.WLANWiPy import WLANWiPy + +class PPP: + """ + Create a PPP driver object. + + Arguments are: + + - *stream* is any object that supports the stream protocol, but is most commonly a + :class:`machine.UART` instance. This stream object must have an ``irq()`` method + and an ``IRQ_RXIDLE`` constant, for use by `PPP.connect`. + """ + + SEC_NONE: Incomplete + """The type of connection security.""" + SEC_PAP: Incomplete + """The type of connection security.""" + SEC_CHAP: Incomplete + """The type of connection security.""" + def __init__(self, stream) -> None: ... + def connect(self, security=SEC_NONE, user=None, key=None) -> Incomplete: + """ + Initiate a PPP connection with the given parameters: + + - *security* is the type of security, either ``PPP.SEC_NONE``, ``PPP.SEC_PAP``, + or ``PPP.SEC_CHAP``. + - *user* is an optional user name to use with the security mode. + - *key* is an optional password to use with the security mode. + + When this method is called the underlying stream has its interrupt configured to call + `PPP.poll` via ``stream.irq(ppp.poll, stream.IRQ_RXIDLE)``. This makes sure the + stream is polled, and data passed up the PPP stack, wheverver data becomes available + on the stream. + + The connection proceeds asynchronously, in the background. + """ + ... + + def disconnect(self) -> Incomplete: + """ + Terminate the connection. This must be called to cleanly close the PPP connection. + """ + ... + + def isconnected(self) -> bool: + """ + Returns ``True`` if the PPP link is connected and up. + Returns ``False`` otherwise. + """ + ... + + def status(self) -> Incomplete: + """ + Returns the PPP status. + """ + ... + + def config(self, config_parameters) -> Incomplete: + """ + Sets or gets parameters of the PPP interface. There are currently no parameter that + can be set or retrieved. + """ + ... + + def ipconfig(self, param) -> Incomplete: + """ + See `AbstractNIC.ipconfig`. + """ + ... + + def ifconfig(self, configtuple: Any | None = None) -> Incomplete: + """ + See `AbstractNIC.ifconfig`. + """ + ... + + def poll(self) -> Incomplete: + """ + Poll the underlying stream for data, and pass it up the PPP stack. + This is called automatically if the stream is a UART with a RXIDLE interrupt, + so it's not usually necessary to call it manually. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WIZNET5K.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WIZNET5K.pyi new file mode 100644 index 00000000..8354d944 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WIZNET5K.pyi @@ -0,0 +1,63 @@ +""" """ + +from __future__ import annotations + +from typing import Any + +from machine import SPI, Pin +from network.LAN import LAN +from network.PPP import PPP +from network.WIZNET5K import WIZNET5K +from network.WLAN import WLAN +from network.WLANWiPy import WLANWiPy + +class WIZNET5K: + """ + This class allows you to control WIZnet5x00 Ethernet adaptors based on + the W5200 and W5500 chipsets. The particular chipset that is supported + by the firmware is selected at compile-time via the MICROPY_PY_WIZNET5K + option. + + Example usage:: + + import network + nic = network.WIZNET5K(SPI(1), Pin.board.X5, Pin.board.X4) + print(nic.ifconfig()) + + # now use socket as usual + ... + + For this example to work the WIZnet5x00 module must have the following connections: + + - MOSI connected to X8 + - MISO connected to X7 + - SCLK connected to X6 + - nSS connected to X5 + - nRESET connected to X4 + + It is possible to use other SPI buses and other pins for nSS and nRESET. + """ + + def __init__(self, spi: SPI, pin_cs: Pin, pin_rst: Pin, /) -> None: + """ + Create a WIZNET5K driver object, initialise the WIZnet5x00 module using the given + SPI bus and pins, and return the WIZNET5K object. + + Arguments are: + + - *spi* is an :ref:`SPI object ` which is the SPI bus that the WIZnet5x00 is + connected to (the MOSI, MISO and SCLK pins). + - *pin_cs* is a :ref:`Pin object ` which is connected to the WIZnet5x00 nSS pin. + - *pin_rst* is a :ref:`Pin object ` which is connected to the WIZnet5x00 nRESET pin. + + All of these objects will be initialised by the driver, so there is no need to + initialise them yourself. For example, you can use:: + + nic = network.WIZNET5K(SPI(1), Pin.board.X5, Pin.board.X4) + """ + + def regs(self) -> Any: + """ + Dump the WIZnet5x00 registers. Useful for debugging. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLAN.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLAN.pyi new file mode 100644 index 00000000..e03fed7f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLAN.pyi @@ -0,0 +1,252 @@ +""" """ + +from __future__ import annotations + +from typing import Any, List, Tuple, overload + +from _typeshed import Incomplete +from machine import SPI, Pin +from network.LAN import LAN +from network.PPP import PPP +from network.WIZNET5K import WIZNET5K +from network.WLAN import WLAN +from network.WLANWiPy import WLANWiPy + +class WLAN: + """ + This class provides a driver for WiFi network processors. Example usage:: + + import network + # enable station interface and connect to WiFi access point + nic = network.WLAN(network.STA_IF) + nic.active(True) + nic.connect('your-ssid', 'your-password') + # now use sockets as usual + """ + + PM_PERFORMANCE: Incomplete + """\ + WLAN.PM_POWERSAVE + WLAN.PM_NONE + + Allowed values for the ``WLAN.config(pm=...)`` network interface parameter: + + * ``PM_PERFORMANCE``: enable WiFi power management to balance power + savings and WiFi performance + * ``PM_POWERSAVE``: enable WiFi power management with additional power + savings and reduced WiFi performance + * ``PM_NONE``: disable wifi power management + """ + def __init__(self, interface_id: int, /) -> None: + """ + Create a WLAN network interface object. Supported interfaces are + ``network.STA_IF`` (station aka client, connects to upstream WiFi access + points) and ``network.AP_IF`` (access point, allows other WiFi clients to + connect). Availability of the methods below depends on interface type. + For example, only STA interface may `WLAN.connect()` to an access point. + """ + + @overload + def active(self, /) -> bool: + """ + Activate ("up") or deactivate ("down") network interface, if boolean + argument is passed. Otherwise, query current state if no argument is + provided. Most other methods require active interface. + """ + + @overload + def active(self, is_active: bool, /) -> None: + """ + Activate ("up") or deactivate ("down") network interface, if boolean + argument is passed. Otherwise, query current state if no argument is + provided. Most other methods require active interface. + """ + + def connect( + self, + ssid: str | None = None, + password: str | None = None, + /, + *, + bssid: bytes | None = None, + ) -> None: + """ + Connect to the specified wireless network, using the specified key. + If *bssid* is given then the connection will be restricted to the + access-point with that MAC address (the *ssid* must also be specified + in this case). + """ + ... + + def disconnect(self) -> None: + """ + Disconnect from the currently connected wireless network. + """ + ... + + def scan(self) -> List[Tuple]: + """ + Scan for the available wireless networks. + Hidden networks -- where the SSID is not broadcast -- will also be scanned + if the WLAN interface allows it. + + Scanning is only possible on STA interface. Returns list of tuples with + the information about WiFi access points: + + (ssid, bssid, channel, RSSI, security, hidden) + + *bssid* is hardware address of an access point, in binary form, returned as + bytes object. You can use `binascii.hexlify()` to convert it to ASCII form. + + There are five values for security: + + * 0 -- open + * 1 -- WEP + * 2 -- WPA-PSK + * 3 -- WPA2-PSK + * 4 -- WPA/WPA2-PSK + + and two for hidden: + + * 0 -- visible + * 1 -- hidden + """ + ... + + @overload + def status(self) -> int: + """ + Return the current status of the wireless connection. + + When called with no argument the return value describes the network link status. + The possible statuses are defined as constants: + + * ``STAT_IDLE`` -- no connection and no activity, + * ``STAT_CONNECTING`` -- connecting in progress, + * ``STAT_WRONG_PASSWORD`` -- failed due to incorrect password, + * ``STAT_NO_AP_FOUND`` -- failed because no access point replied, + * ``STAT_CONNECT_FAIL`` -- failed due to other problems, + * ``STAT_GOT_IP`` -- connection successful. + + When called with one argument *param* should be a string naming the status + parameter to retrieve. Supported parameters in WiFI STA mode are: ``'rssi'``. + """ + + @overload + def status(self, param: str, /) -> int: + """ + Return the current status of the wireless connection. + + When called with no argument the return value describes the network link status. + The possible statuses are defined as constants: + + * ``STAT_IDLE`` -- no connection and no activity, + * ``STAT_CONNECTING`` -- connecting in progress, + * ``STAT_WRONG_PASSWORD`` -- failed due to incorrect password, + * ``STAT_NO_AP_FOUND`` -- failed because no access point replied, + * ``STAT_CONNECT_FAIL`` -- failed due to other problems, + * ``STAT_GOT_IP`` -- connection successful. + + When called with one argument *param* should be a string naming the status + parameter to retrieve. Supported parameters in WiFI STA mode are: ``'rssi'``. + """ + + def isconnected(self) -> bool: + """ + In case of STA mode, returns ``True`` if connected to a WiFi access + point and has a valid IP address. In AP mode returns ``True`` when a + station is connected. Returns ``False`` otherwise. + """ + ... + + @overload + def ifconfig(self) -> tuple[str, str, str, str]: + """ + Get/set IP-level network interface parameters: IP address, subnet mask, + gateway and DNS server. When called with no arguments, this method returns + a 4-tuple with the above information. To set the above values, pass a + 4-tuple with the required information. For example:: + + nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')) + """ + + @overload + def ifconfig(self, ip_mask_gateway_dns: tuple[str, str, str, str], /) -> None: + """ + Get/set IP-level network interface parameters: IP address, subnet mask, + gateway and DNS server. When called with no arguments, this method returns + a 4-tuple with the above information. To set the above values, pass a + 4-tuple with the required information. For example:: + + nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')) + """ + + @overload + def config(self, param: str, /) -> Any: + """ + Get or set general network interface parameters. These methods allow to work + with additional parameters beyond standard IP configuration (as dealt with by + `AbstractNIC.ipconfig()`). These include network-specific and hardware-specific + parameters. For setting parameters, keyword argument syntax should be used, + multiple parameters can be set at once. For querying, parameters name should + be quoted as a string, and only one parameter can be queries at time:: + + # Set WiFi access point name (formally known as SSID) and WiFi channel + ap.config(ssid='My AP', channel=11) + # Query params one by one + print(ap.config('ssid')) + print(ap.config('channel')) + + Following are commonly supported parameters (availability of a specific parameter + depends on network technology type, driver, and :term:`MicroPython port`). + + ============= =========== + Parameter Description + ============= =========== + mac MAC address (bytes) + ssid WiFi access point name (string) + channel WiFi channel (integer) + hidden Whether SSID is hidden (boolean) + security Security protocol supported (enumeration, see module constants) + key Access key (string) + hostname The hostname that will be sent to DHCP (STA interfaces) and mDNS (if supported, both STA and AP). (Deprecated, use :func:`network.hostname` instead) + reconnects Number of reconnect attempts to make (integer, 0=none, -1=unlimited) + txpower Maximum transmit power in dBm (integer or float) + pm WiFi Power Management setting (see below for allowed values) + ============= =========== + """ + + @overload + def config(self, **kwargs: Any) -> None: + """ + Get or set general network interface parameters. These methods allow to work + with additional parameters beyond standard IP configuration (as dealt with by + `AbstractNIC.ipconfig()`). These include network-specific and hardware-specific + parameters. For setting parameters, keyword argument syntax should be used, + multiple parameters can be set at once. For querying, parameters name should + be quoted as a string, and only one parameter can be queries at time:: + + # Set WiFi access point name (formally known as SSID) and WiFi channel + ap.config(ssid='My AP', channel=11) + # Query params one by one + print(ap.config('ssid')) + print(ap.config('channel')) + + Following are commonly supported parameters (availability of a specific parameter + depends on network technology type, driver, and :term:`MicroPython port`). + + ============= =========== + Parameter Description + ============= =========== + mac MAC address (bytes) + ssid WiFi access point name (string) + channel WiFi channel (integer) + hidden Whether SSID is hidden (boolean) + security Security protocol supported (enumeration, see module constants) + key Access key (string) + hostname The hostname that will be sent to DHCP (STA interfaces) and mDNS (if supported, both STA and AP). (Deprecated, use :func:`network.hostname` instead) + reconnects Number of reconnect attempts to make (integer, 0=none, -1=unlimited) + txpower Maximum transmit power in dBm (integer or float) + pm WiFi Power Management setting (see below for allowed values) + ============= =========== + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLANWiPy.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLANWiPy.pyi new file mode 100644 index 00000000..f8a3c17a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/WLANWiPy.pyi @@ -0,0 +1,255 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Callable, List, Tuple, overload + +from _typeshed import Incomplete +from machine import SPI, Pin +from network.LAN import LAN +from network.PPP import PPP +from network.WIZNET5K import WIZNET5K +from network.WLAN import WLAN +from network.WLANWiPy import WLANWiPy + +class WLANWiPy: + """ + .. note:: + + This class is a non-standard WLAN implementation for the WiPy. + It is available simply as ``network.WLAN`` on the WiPy but is named in the + documentation below as ``network.WLANWiPy`` to distinguish it from the + more general :ref:`network.WLAN ` class. + + This class provides a driver for the WiFi network processor in the WiPy. Example usage:: + + import network + import time + # setup as a station + wlan = network.WLAN(mode=WLAN.STA) + wlan.connect('your-ssid', auth=(WLAN.WPA2, 'your-key')) + while not wlan.isconnected(): + time.sleep_ms(50) + print(wlan.ifconfig()) + + # now use socket as usual + ... + """ + + STA: Incomplete + AP: Incomplete + """selects the WLAN mode""" + WEP: Incomplete + WPA: Incomplete + WPA2: Incomplete + """selects the network security""" + INT_ANT: Incomplete + EXT_ANT: Incomplete + """selects the antenna type""" + @overload + def __init__(self, id: int = 0, /): + """ + Create a WLAN object, and optionally configure it. See `init()` for params of configuration. + + .. note:: + + The ``WLAN`` constructor is special in the sense that if no arguments besides the id are given, + it will return the already existing ``WLAN`` instance without re-configuring it. This is + because ``WLAN`` is a system feature of the WiPy. If the already existing instance is not + initialized it will do the same as the other constructors an will initialize it with default + values. + """ + + @overload + def __init__( + self, + id: int, + /, + *, + mode: int, + ssid: str, + auth: tuple[str, str], + channel: int, + antenna: int, + ): + """ + Create a WLAN object, and optionally configure it. See `init()` for params of configuration. + + .. note:: + + The ``WLAN`` constructor is special in the sense that if no arguments besides the id are given, + it will return the already existing ``WLAN`` instance without re-configuring it. This is + because ``WLAN`` is a system feature of the WiPy. If the already existing instance is not + initialized it will do the same as the other constructors an will initialize it with default + values. + """ + + def init( + self, + mode: int, + /, + *, + ssid: str, + auth: tuple[str, str], + channel: int, + antenna: int, + ) -> bool: + """ + Set or get the WiFi network processor configuration. + + Arguments are: + + - *mode* can be either ``WLAN.STA`` or ``WLAN.AP``. + - *ssid* is a string with the ssid name. Only needed when mode is ``WLAN.AP``. + - *auth* is a tuple with (sec, key). Security can be ``None``, ``WLAN.WEP``, + ``WLAN.WPA`` or ``WLAN.WPA2``. The key is a string with the network password. + If ``sec`` is ``WLAN.WEP`` the key must be a string representing hexadecimal + values (e.g. 'ABC1DE45BF'). Only needed when mode is ``WLAN.AP``. + - *channel* a number in the range 1-11. Only needed when mode is ``WLAN.AP``. + - *antenna* selects between the internal and the external antenna. Can be either + ``WLAN.INT_ANT`` or ``WLAN.EXT_ANT``. + + For example, you can do:: + + # create and configure as an access point + wlan.init(mode=WLAN.AP, ssid='wipy-wlan', auth=(WLAN.WPA2,'www.wipy.io'), channel=7, antenna=WLAN.INT_ANT) + + or:: + + # configure as an station + wlan.init(mode=WLAN.STA) + """ + ... + + def connect( + self, + ssid: str, + /, + *, + auth: tuple[str, str] | None = None, + bssid: bytes | None = None, + timeout: int | None = None, + ) -> None: + """ + Connect to a WiFi access point using the given SSID, and other security + parameters. + + - *auth* is a tuple with (sec, key). Security can be ``None``, ``WLAN.WEP``, + ``WLAN.WPA`` or ``WLAN.WPA2``. The key is a string with the network password. + If ``sec`` is ``WLAN.WEP`` the key must be a string representing hexadecimal + values (e.g. 'ABC1DE45BF'). + - *bssid* is the MAC address of the AP to connect to. Useful when there are several + APs with the same ssid. + - *timeout* is the maximum time in milliseconds to wait for the connection to succeed. + """ + ... + + def scan(self) -> List[Tuple]: + """ + Performs a network scan and returns a list of named tuples with (ssid, bssid, sec, channel, rssi). + Note that channel is always ``None`` since this info is not provided by the WiPy. + """ + ... + + def disconnect(self) -> None: + """ + Disconnect from the WiFi access point. + """ + ... + + def isconnected(self) -> bool: + """ + In case of STA mode, returns ``True`` if connected to a WiFi access point and has a valid IP address. + In AP mode returns ``True`` when a station is connected, ``False`` otherwise. + """ + ... + + def ipconfig(self, param) -> Incomplete: + """ + See :meth:`AbstractNIC.ipconfig `. Supported parameters are: ``dhcp4``, ``addr4``, ``gw4``. + """ + ... + + @overload + def mode(self) -> int: + """ + Get or set the WLAN mode. + """ + + @overload + def mode(self, mode: int, /) -> None: + """ + Get or set the WLAN mode. + """ + + @overload + def ssid(self) -> str: + """ + Get or set the SSID when in AP mode. + """ + + @overload + def ssid(self, ssid: str, /) -> None: + """ + Get or set the SSID when in AP mode. + """ + + @overload + def auth(self) -> int: + """ + Get or set the authentication type when in AP mode. + """ + + @overload + def auth(self, auth: int, /) -> None: + """ + Get or set the authentication type when in AP mode. + """ + + @overload + def channel(self) -> int: + """ + Get or set the channel (only applicable in AP mode). + """ + + @overload + def channel(self, channel: int, /) -> None: + """ + Get or set the channel (only applicable in AP mode). + """ + + @overload + def antenna(self) -> int: + """ + Get or set the antenna type (external or internal). + """ + + @overload + def antenna(self, antenna: int, /) -> None: + """ + Get or set the antenna type (external or internal). + """ + + @overload + def mac(self) -> bytes: + """ + Get or set a 6-byte long bytes object with the MAC address. + """ + + @overload + def mac(self, mac: bytes, /) -> None: + """ + Get or set a 6-byte long bytes object with the MAC address. + """ + + def irq(self, *, handler: Callable[[], None], wake: int) -> Any: + """ + Create a callback to be triggered when a WLAN event occurs during ``machine.SLEEP`` + mode. Events are triggered by socket activity or by WLAN connection/disconnection. + + - *handler* is the function that gets called when the IRQ is triggered. + - *wake* must be ``machine.SLEEP``. + + Returns an IRQ object. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/__init__.pyi new file mode 100644 index 00000000..1a80c5f9 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/network/__init__.pyi @@ -0,0 +1,304 @@ +""" +Network configuration. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/network.html + +This module provides network drivers and routing configuration. To use this +module, a MicroPython variant/build with network capabilities must be installed. +Network drivers for specific hardware are available within this module and are +used to configure hardware network interface(s). Network services provided +by configured interfaces are then available for use via the :mod:`socket` +module. + +For example:: + + # connect/ show IP config a specific network interface + # see below for examples of specific drivers + import network + import time + nic = network.Driver(...) + if not nic.isconnected(): + nic.connect() + print("Waiting for connection...") + while not nic.isconnected(): + time.sleep(1) + print(nic.ipconfig("addr4")) + + # now use socket as usual + import socket + addr = socket.getaddrinfo('micropython.org', 80)[0][-1] + s = socket.socket() + s.connect(addr) + s.send(b'GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n') + data = s.recv(1000) + s.close() +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/network.rst +from __future__ import annotations + +from abc import abstractmethod +from typing import Any, List, Protocol, Tuple, overload + +from _typeshed import Incomplete +from machine import SPI, Pin +from network.LAN import LAN +from network.PPP import PPP +from network.WIZNET5K import WIZNET5K +from network.WLAN import WLAN +from network.WLANWiPy import WLANWiPy + +class AbstractNIC(Protocol): + """ + Common network adapter interface + ================================ + + This section describes an (implied) abstract base class for all network + interface classes implemented by :term:`MicroPython ports ` + for different hardware. This means that MicroPython does not actually + provide ``AbstractNIC`` class, but any actual NIC class, as described + in the following sections, implements methods as described here. + """ + + @abstractmethod + def __init__(self, id: Any = None, /, *args: Any, **kwargs: Any) -> None: + """ + Instantiate a network interface object. Parameters are network interface + dependent. If there are more than one interface of the same type, the first + parameter should be `id`. + """ + + @overload + @abstractmethod + def active(self, /) -> bool: + """ + Activate ("up") or deactivate ("down") the network interface, if + a boolean argument is passed. Otherwise, query current state if + no argument is provided. Most other methods require an active + interface (behaviour of calling them on inactive interface is + undefined). + """ + + @overload + @abstractmethod + def active(self, is_active: bool, /) -> None: + """ + Activate ("up") or deactivate ("down") the network interface, if + a boolean argument is passed. Otherwise, query current state if + no argument is provided. Most other methods require an active + interface (behaviour of calling them on inactive interface is + undefined). + """ + + @overload + @abstractmethod + def connect(self, key: str | None = None, /, **kwargs: Any) -> None: + """ + Connect the interface to a network. This method is optional, and + available only for interfaces which are not "always connected". + If no parameters are given, connect to the default (or the only) + service. If a single parameter is given, it is the primary identifier + of a service to connect to. It may be accompanied by a key + (password) required to access said service. There can be further + arbitrary keyword-only parameters, depending on the networking medium + type and/or particular device. Parameters can be used to: a) + specify alternative service identifier types; b) provide additional + connection parameters. For various medium types, there are different + sets of predefined/recommended parameters, among them: + + * WiFi: *bssid* keyword to connect to a specific BSSID (MAC address) + """ + + @overload + @abstractmethod + def connect(self, service_id: Any, key: str | None = None, /, **kwargs: Any) -> None: + """ + Connect the interface to a network. This method is optional, and + available only for interfaces which are not "always connected". + If no parameters are given, connect to the default (or the only) + service. If a single parameter is given, it is the primary identifier + of a service to connect to. It may be accompanied by a key + (password) required to access said service. There can be further + arbitrary keyword-only parameters, depending on the networking medium + type and/or particular device. Parameters can be used to: a) + specify alternative service identifier types; b) provide additional + connection parameters. For various medium types, there are different + sets of predefined/recommended parameters, among them: + + * WiFi: *bssid* keyword to connect to a specific BSSID (MAC address) + """ + + @abstractmethod + def disconnect(self) -> None: + """ + Disconnect from network. + """ + ... + + @abstractmethod + def isconnected(self) -> bool: + """ + Returns ``True`` if connected to network, otherwise returns ``False``. + """ + ... + + @abstractmethod + def scan(self, **kwargs: Any) -> List[Tuple]: + """ + Scan for the available network services/connections. Returns a + list of tuples with discovered service parameters. For various + network media, there are different variants of predefined/ + recommended tuple formats, among them: + + * WiFi: (ssid, bssid, channel, RSSI, security, hidden). There + may be further fields, specific to a particular device. + + The function may accept additional keyword arguments to filter scan + results (e.g. scan for a particular service, on a particular channel, + for services of a particular set, etc.), and to affect scan + duration and other parameters. Where possible, parameter names + should match those in connect(). + """ + ... + + @overload + @abstractmethod + def status(self) -> Any: + """ + Query dynamic status information of the interface. When called with no + argument the return value describes the network link status. Otherwise + *param* should be a string naming the particular status parameter to + retrieve. + + The return types and values are dependent on the network + medium/technology. Some of the parameters that may be supported are: + + * WiFi STA: use ``'rssi'`` to retrieve the RSSI of the AP signal + * WiFi AP: use ``'stations'`` to retrieve a list of all the STAs + connected to the AP. The list contains tuples of the form + (MAC, RSSI). + """ + + @overload + @abstractmethod + def status(self, param: str, /) -> Any: + """ + Query dynamic status information of the interface. When called with no + argument the return value describes the network link status. Otherwise + *param* should be a string naming the particular status parameter to + retrieve. + + The return types and values are dependent on the network + medium/technology. Some of the parameters that may be supported are: + + * WiFi STA: use ``'rssi'`` to retrieve the RSSI of the AP signal + * WiFi AP: use ``'stations'`` to retrieve a list of all the STAs + connected to the AP. The list contains tuples of the form + (MAC, RSSI). + """ + + def ipconfig(self, param) -> Incomplete: + """ + Get or set interface-specific IP-configuration interface parameters. + Supported parameters are the following (availability of a particular + parameter depends on the port and the specific network interface): + + * ``dhcp4`` (``True/False``) obtain an IPv4 address, gateway and dns + server via DHCP. This method does not block and wait for an address + to be obtained. To check if an address was obtained, use the read-only + property ``has_dhcp4``. + * ``gw4`` Get/set the IPv4 default-gateway. + * ``dhcp6`` (``True/False``) obtain a DNS server via stateless DHCPv6. + Obtaining IP Addresses via DHCPv6 is currently not implemented. + * ``autoconf6`` (``True/False``) obtain a stateless IPv6 address via + the network prefix shared in router advertisements. To check if a + stateless address was obtained, use the read-only + property ``has_autoconf6``. + * ``addr4`` (e.g. ``192.168.0.4/24``) obtain the current IPv4 address + and network mask as ``(ip, subnet)``-tuple, regardless of how this + address was obtained. This method can be used to set a static IPv4 + address either as ``(ip, subnet)``-tuple or in CIDR-notation. + * ``addr6`` (e.g. ``fe80::1234:5678``) obtain a list of current IPv6 + addresses as ``(ip, state, preferred_lifetime, valid_lifetime)``-tuple. + This include link-local, slaac and static addresses. + ``preferred_lifetime`` and ``valid_lifetime`` represent the remaining + valid and preferred lifetime of each IPv6 address, in seconds. + ``state`` indicates the current state of the address: + + * ``0x08`` - ``0x0f`` indicates the address is tentative, counting the + number of probes sent. + * ``0x10`` The address is deprecated (but still valid) + * ``0x30`` The address is preferred (and valid) + * ``0x40`` The address is duplicated and can not be used. + + This method can be used to set a static IPv6 + address, by setting this parameter to the address, like ``fe80::1234:5678``. + """ + ... + + @overload + @abstractmethod + def ifconfig(self) -> tuple[str, str, str, str]: + """ + ``Note:`` This function is deprecated, use `ipconfig()` instead. + + Get/set IP-level network interface parameters: IP address, subnet mask, + gateway and DNS server. When called with no arguments, this method returns + a 4-tuple with the above information. To set the above values, pass a + 4-tuple with the required information. For example:: + + nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')) + """ + + @overload + @abstractmethod + def ifconfig(self, ip_mask_gateway_dns: tuple[str, str, str, str], /) -> None: + """ + ``Note:`` This function is deprecated, use `ipconfig()` instead. + + Get/set IP-level network interface parameters: IP address, subnet mask, + gateway and DNS server. When called with no arguments, this method returns + a 4-tuple with the above information. To set the above values, pass a + 4-tuple with the required information. For example:: + + nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')) + """ + + @overload + @abstractmethod + def config(self, param: str, /) -> Any: + """ + Get or set general network interface parameters. These methods allow to work + with additional parameters beyond standard IP configuration (as dealt with by + `ipconfig()`). These include network-specific and hardware-specific + parameters. For setting parameters, the keyword argument + syntax should be used, and multiple parameters can be set at once. For + querying, a parameter name should be quoted as a string, and only one + parameter can be queried at a time:: + + # Set WiFi access point name (formally known as SSID) and WiFi channel + ap.config(ssid='My AP', channel=11) + # Query params one by one + print(ap.config('ssid')) + print(ap.config('channel')) + """ + + @overload + @abstractmethod + def config(self, **kwargs: Any) -> None: + """ + Get or set general network interface parameters. These methods allow to work + with additional parameters beyond standard IP configuration (as dealt with by + `ipconfig()`). These include network-specific and hardware-specific + parameters. For setting parameters, the keyword argument + syntax should be used, and multiple parameters can be set at once. For + querying, a parameter name should be quoted as a string, and only one + parameter can be queried at a time:: + + # Set WiFi access point name (formally known as SSID) and WiFi channel + ap.config(ssid='My AP', channel=11) + # Query params one by one + print(ap.config('ssid')) + print(ap.config('channel')) + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/openamp/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/openamp/__init__.pyi new file mode 100644 index 00000000..7e93f226 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/openamp/__init__.pyi @@ -0,0 +1,138 @@ +""" +Provides standard Asymmetric Multiprocessing (AMP) support. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/openamp.html + +The ``openamp`` module provides a standard inter-processor communications infrastructure +for MicroPython. The module handles all of the details of OpenAMP, such as setting up +the shared resource table, initializing vrings, etc. It provides an API for using the +RPMsg bus infrastructure with the `Endpoint` class, and provides processor Life Cycle +Management (LCM) support, such as loading firmware and starting and stopping a remote +core, via the `RemoteProc` class. + +Example usage:: + + import openamp + + def ept_recv_callback(src, data): + print("Received message on endpoint", data) + + # Create a new RPMsg endpoint to communicate with the remote core. + ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback) + + # Create a RemoteProc object, load its firmware and start it. + rproc = openamp.RemoteProc("virtual_uart.elf") # Or entry point address (ex 0x081E0000) + rproc.start() + + while True: + if ept.is_ready(): + ept.send("data") +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/openamp.rst +from __future__ import annotations + +from typing import Callable, Optional + +from _typeshed import Incomplete + +class Endpoint: + """ + Construct a new RPMsg Endpoint. An endpoint is a bidirectional communication + channel between two cores. + + Arguments are: + + - *name* is the name of the endpoint. + - *callback* is a function that is called when the endpoint receives data with the + source address of the remote point, and the data as bytes passed by reference. + - *src* is the endpoint source address. If none is provided one will be assigned + to the endpoint by the library. + - *dest* is the endpoint destination address. If the endpoint is created from the + new_service_callback, this must be provided and it must match the remote endpoint's + source address. If the endpoint is registered locally, before the announcement, the + destination address will be assigned by the library when the endpoint is bound. + """ + + def __init__( + self, + name, + callback: Callable, + src: Optional[Incomplete] = None, + dest: Optional[Incomplete] = None, + ) -> None: ... + def deinit(self) -> Incomplete: + """ + Destroy the endpoint and release all of its resources. + """ + ... + + def is_ready(self) -> bool: + """ + Returns True if the endpoint is ready to send (i.e., has both a source and destination addresses) + """ + ... + + def send(self, src=-1, dest=-1, timeout=-1) -> None: + """ + Send a message to the remote processor over this endpoint. + + Arguments are: + + - *src* is the source endpoint address of the message. If none is provided, the + source address the endpoint is bound to is used. + - *dest* is the destination endpoint address of the message. If none is provided, + the destination address the endpoint is bound to is used. + - *timeout* specifies the time in milliseconds to wait for a free buffer. By default + the function is blocking. + """ + ... + +class RemoteProc: + """ + The RemoteProc object provides processor Life Cycle Management (LCM) support, such as + loading firmware, starting and stopping a remote core. + + The *entry* argument can be a path to firmware image, in which case the firmware is + loaded from file to its target memory, or an entry point address, in which case the + firmware must be loaded already at the given address. + """ + + def __init__(self, entry) -> None: ... + def start(self) -> Incomplete: + """ + Starts the remote processor. + """ + ... + + def stop(self) -> None: + """ + Stops the remote processor. The exact behavior is platform-dependent. On the STM32H7 for + example it's not possible to stop and then restart the Cortex-M4 core, so a complete + system reset is performed on a call to this function. + """ + ... + + def shutdown(self) -> Incomplete: + """ + Shutdown stops the remote processor and releases all of its resources. The exact behavior + is platform-dependent, however typically it disables power and clocks to the remote core. + This function is also used as the finaliser (i.e., called when ``RemoteProc`` object is + collected). Note that on the STM32H7, it's not possible to stop and then restart the + Cortex-M4 core, so a complete system reset is performed on a call to this function. + """ + ... + +def new_service_callback(ns_callback: Callable) -> None: + """ + Set the new service callback. + + The *ns_callback* argument is a function that will be called when the remote processor + announces new services. At that point the host processor can choose to create the + announced endpoint, if this particular service is supported, or ignore it if it's + not. If this function is not set, the host processor should first register the + endpoint locally, and it will be automatically bound when the remote announces + the service. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/os/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/os/__init__.pyi new file mode 100644 index 00000000..4e59eb8e --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/os/__init__.pyi @@ -0,0 +1,203 @@ +""" +Basic "operating system" services. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/os.html + +CPython module: :mod:`python:os` https://docs.python.org/3/library/os.html . + +The ``os`` module contains functions for filesystem access and mounting, +terminal redirection and duplication, and the ``uname`` and ``urandom`` +functions. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/os.rst +from __future__ import annotations + +from typing import IO, Any, Iterator, Optional, Tuple + +from _mpy_shed import uname_result +from _typeshed import Incomplete +from stdlib.os import * # type: ignore + +class VfsFat: + """ + See `vfs.VfsFat`. + """ + + def __init__(self, block_dev) -> None: ... + +class VfsLfs1: + """ + See `vfs.VfsLfs1`. + """ + + def __init__(self, block_dev, readsize=32, progsize=32, lookahead=32) -> None: ... + +class VfsLfs2: + """ + See `vfs.VfsLfs2`. + """ + + def __init__(self, block_dev, readsize=32, progsize=32, lookahead=32, mtime=True) -> None: ... + +class VfsPosix: + """ + See `vfs.VfsPosix`. + """ + + def __init__(self, root=None) -> None: ... + +def uname() -> uname_result: + """ + Return a tuple (possibly a named tuple) containing information about the + underlying machine and/or its operating system. The tuple has five fields + in the following order, each of them being a string: + + * ``sysname`` -- the name of the underlying system + * ``nodename`` -- the network name (can be the same as ``sysname``) + * ``release`` -- the version of the underlying system + * ``version`` -- the MicroPython version and build date + * ``machine`` -- an identifier for the underlying hardware (eg board, CPU) + """ + ... + +def urandom(n) -> bytes: + """ + Return a bytes object with *n* random bytes. Whenever possible, it is + generated by the hardware random number generator. + """ + ... + +def chdir(path) -> Incomplete: + """ + Change current directory. + """ + ... + +def getcwd() -> Incomplete: + """ + Get the current directory. + """ + ... + +def ilistdir(dir: Optional[Any] = None) -> Iterator[Tuple]: + """ + This function returns an iterator which then yields tuples corresponding to + the entries in the directory that it is listing. With no argument it lists the + current directory, otherwise it lists the directory given by *dir*. + + The tuples have the form *(name, type, inode[, size])*: + + - *name* is a string (or bytes if *dir* is a bytes object) and is the name of + the entry; + - *type* is an integer that specifies the type of the entry, with 0x4000 for + directories and 0x8000 for regular files; + - *inode* is an integer corresponding to the inode of the file, and may be 0 + for filesystems that don't have such a notion. + - Some platforms may return a 4-tuple that includes the entry's *size*. For + file entries, *size* is an integer representing the size of the file + or -1 if unknown. Its meaning is currently undefined for directory + entries. + """ + ... + +def listdir(dir: Optional[Any] = None) -> Incomplete: + """ + With no argument, list the current directory. Otherwise list the given directory. + """ + ... + +def mkdir(path) -> Incomplete: + """ + Create a new directory. + """ + ... + +def remove(path) -> None: + """ + Remove a file. + """ + ... + +def rmdir(path) -> None: + """ + Remove a directory. + """ + ... + +def rename(old_path, new_path) -> None: + """ + Rename a file. + """ + ... + +def stat(path) -> Incomplete: + """ + Get the status of a file or directory. + """ + ... + +def statvfs(path) -> Tuple: + """ + Get the status of a filesystem. + + Returns a tuple with the filesystem information in the following order: + + * ``f_bsize`` -- file system block size + * ``f_frsize`` -- fragment size + * ``f_blocks`` -- size of fs in f_frsize units + * ``f_bfree`` -- number of free blocks + * ``f_bavail`` -- number of free blocks for unprivileged users + * ``f_files`` -- number of inodes + * ``f_ffree`` -- number of free inodes + * ``f_favail`` -- number of free inodes for unprivileged users + * ``f_flag`` -- mount flags + * ``f_namemax`` -- maximum filename length + + Parameters related to inodes: ``f_files``, ``f_ffree``, ``f_avail`` + and the ``f_flags`` parameter may return ``0`` as they can be unavailable + in a port-specific implementation. + """ + ... + +def sync() -> None: + """ + Sync all filesystems. + """ + ... + +def dupterm(stream_object, index=0, /) -> IO: + """ + Duplicate or switch the MicroPython terminal (the REPL) on the given `stream`-like + object. The *stream_object* argument must be a native stream object, or derive + from ``io.IOBase`` and implement the ``readinto()`` and + ``write()`` methods. The stream should be in non-blocking mode and + ``readinto()`` should return ``None`` if there is no data available for reading. + + After calling this function all terminal output is repeated on this stream, + and any input that is available on the stream is passed on to the terminal input. + + The *index* parameter should be a non-negative integer and specifies which + duplication slot is set. A given port may implement more than one slot (slot 0 + will always be available) and in that case terminal input and output is + duplicated on all the slots that are set. + + If ``None`` is passed as the *stream_object* then duplication is cancelled on + the slot given by *index*. + + The function returns the previous stream-like object in the given slot. + """ + ... + +def mount(fsobj, mount_point, *, readonly=False) -> Incomplete: + """ + See `vfs.mount`. + """ + ... + +def umount(mount_point) -> Incomplete: + """ + See `vfs.umount`. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/platform/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/platform/__init__.pyi new file mode 100644 index 00000000..b495314a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/platform/__init__.pyi @@ -0,0 +1,47 @@ +""" +Access to underlying platform’s identifying data. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/platform.html + +CPython module: :mod:`python:platform` https://docs.python.org/3/library/platform.html . + +This module tries to retrieve as much platform-identifying data as possible. It +makes this information available via function APIs. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/platform.rst +from __future__ import annotations + +from typing import Tuple + +def platform() -> str: + """ + Returns a string identifying the underlying platform. This string is composed + of several substrings in the following order, delimited by dashes (``-``): + + - the name of the platform system (e.g. Unix, Windows or MicroPython) + - the MicroPython version + - the architecture of the platform + - the version of the underlying platform + - the concatenation of the name of the libc that MicroPython is linked to + and its corresponding version. + + For example, this could be + ``"MicroPython-1.20.0-xtensa-IDFv4.2.4-with-newlib3.0.0"``. + """ + ... + +def python_compiler() -> str: + """ + Returns a string identifying the compiler used for compiling MicroPython. + """ + ... + +def libc_ver() -> Tuple: + """ + Returns a tuple of strings *(lib, version)*, where *lib* is the name of the + libc that MicroPython is linked to, and *version* the corresponding version + of this libc. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ADC.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ADC.pyi new file mode 100644 index 00000000..74dc1129 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ADC.pyi @@ -0,0 +1,151 @@ +""" """ + +from __future__ import annotations + +from array import array + +from _mpy_shed import AnyWritableBuf +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +from .Pin import Pin +from .Timer import Timer + +class ADC: + """ + Usage:: + + import pyb + + adc = pyb.ADC(pin) # create an analog object from a pin + val = adc.read() # read an analog value + + adc = pyb.ADCAll(resolution) # create an ADCAll object + adc = pyb.ADCAll(resolution, mask) # create an ADCAll object for selected analog channels + val = adc.read_channel(channel) # read the given channel + val = adc.read_core_temp() # read MCU temperature + val = adc.read_core_vbat() # read MCU VBAT + val = adc.read_core_vref() # read MCU VREF + val = adc.read_vref() # read MCU supply voltage + """ + + def __init__(self, pin: int | Pin, /) -> None: + """ + Create an ADC object associated with the given pin. + This allows you to then read analog values on that pin. + """ + + def read(self) -> int: + """ + Read the value on the analog pin and return it. The returned value + will be between 0 and 4095. + """ + ... + + def read_timed(self, buf: AnyWritableBuf, timer: Timer | int, /) -> None: + """ + Read analog values into ``buf`` at a rate set by the ``timer`` object. + + ``buf`` can be bytearray or array.array for example. The ADC values have + 12-bit resolution and are stored directly into ``buf`` if its element size is + 16 bits or greater. If ``buf`` has only 8-bit elements (eg a bytearray) then + the sample resolution will be reduced to 8 bits. + + ``timer`` should be a Timer object, and a sample is read each time the timer + triggers. The timer must already be initialised and running at the desired + sampling frequency. + + To support previous behaviour of this function, ``timer`` can also be an + integer which specifies the frequency (in Hz) to sample at. In this case + Timer(6) will be automatically configured to run at the given frequency. + + Example using a Timer object (preferred way):: + + adc = pyb.ADC(pyb.Pin.board.X19) # create an ADC on pin X19 + tim = pyb.Timer(6, freq=10) # create a timer running at 10Hz + buf = bytearray(100) # creat a buffer to store the samples + adc.read_timed(buf, tim) # sample 100 values, taking 10s + + Example using an integer for the frequency:: + + adc = pyb.ADC(pyb.Pin.board.X19) # create an ADC on pin X19 + buf = bytearray(100) # create a buffer of 100 bytes + adc.read_timed(buf, 10) # read analog values into buf at 10Hz + # this will take 10 seconds to finish + for val in buf: # loop over all values + print(val) # print the value out + + This function does not allocate any heap memory. It has blocking behaviour: + it does not return to the calling program until the buffer is full. + """ + ... + + @staticmethod + def read_timed_multi(adcs: tuple[ADC, ...], bufs: tuple[AnyWritableBuf, ...], timer: Timer, /) -> bool: + """ + This is a static method. It can be used to extract relative timing or + phase data from multiple ADC's. + + It reads analog values from multiple ADC's into buffers at a rate set by + the *timer* object. Each time the timer triggers a sample is rapidly + read from each ADC in turn. + + ADC and buffer instances are passed in tuples with each ADC having an + associated buffer. All buffers must be of the same type and length and + the number of buffers must equal the number of ADC's. + + Buffers can be ``bytearray`` or ``array.array`` for example. The ADC values + have 12-bit resolution and are stored directly into the buffer if its element + size is 16 bits or greater. If buffers have only 8-bit elements (eg a + ``bytearray``) then the sample resolution will be reduced to 8 bits. + + *timer* must be a Timer object. The timer must already be initialised + and running at the desired sampling frequency. + + Example reading 3 ADC's:: + + adc0 = pyb.ADC(pyb.Pin.board.X1) # Create ADC's + adc1 = pyb.ADC(pyb.Pin.board.X2) + adc2 = pyb.ADC(pyb.Pin.board.X3) + tim = pyb.Timer(8, freq=100) # Create timer + rx0 = array.array('H', (0 for i in range(100))) # ADC buffers of + rx1 = array.array('H', (0 for i in range(100))) # 100 16-bit words + rx2 = array.array('H', (0 for i in range(100))) + # read analog values into buffers at 100Hz (takes one second) + pyb.ADC.read_timed_multi((adc0, adc1, adc2), (rx0, rx1, rx2), tim) + for n in range(len(rx0)): + print(rx0[n], rx1[n], rx2[n]) + + This function does not allocate any heap memory. It has blocking behaviour: + it does not return to the calling program until the buffers are full. + + The function returns ``True`` if all samples were acquired with correct + timing. At high sample rates the time taken to acquire a set of samples + can exceed the timer period. In this case the function returns ``False``, + indicating a loss of precision in the sample interval. In extreme cases + samples may be missed. + + The maximum rate depends on factors including the data width and the + number of ADC's being read. In testing two ADC's were sampled at a timer + rate of 210kHz without overrun. Samples were missed at 215kHz. For three + ADC's the limit is around 140kHz, and for four it is around 110kHz. + At high sample rates disabling interrupts for the duration can reduce the + risk of sporadic data loss. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Accel.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Accel.pyi new file mode 100644 index 00000000..3c5835d8 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Accel.pyi @@ -0,0 +1,76 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import Tuple + +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class Accel: + """ + Accel is an object that controls the accelerometer. Example usage:: + + accel = pyb.Accel() + for i in range(10): + print(accel.x(), accel.y(), accel.z()) + + Raw values are between -32 and 31. + """ + + def __init__(self) -> None: + """ + Create and return an accelerometer object. + """ + + def filtered_xyz(self) -> Tuple: + """ + Get a 3-tuple of filtered x, y and z values. + + Implementation note: this method is currently implemented as taking the + sum of 4 samples, sampled from the 3 previous calls to this function along + with the sample from the current call. Returned values are therefore 4 + times the size of what they would be from the raw x(), y() and z() calls. + """ + ... + + def tilt(self) -> int: + """ + Get the tilt register. + """ + ... + + def x(self) -> int: + """ + Get the x-axis value. + """ + ... + + def y(self) -> int: + """ + Get the y-axis value. + """ + ... + + def z(self) -> int: + """ + Get the z-axis value. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/CAN.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/CAN.pyi new file mode 100644 index 00000000..077e0073 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/CAN.pyi @@ -0,0 +1,576 @@ +""" """ + +from __future__ import annotations + +from array import array +from collections.abc import Sequence +from typing import Callable, overload + +from _mpy_shed import AnyWritableBuf +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class CAN: + """ + CAN implements the standard CAN communications protocol. At + the physical level it consists of 2 lines: RX and TX. Note that + to connect the pyboard to a CAN bus you must use a CAN transceiver + to convert the CAN logic signals from the pyboard to the correct + voltage levels on the bus. + + Example usage (works without anything connected):: + + from pyb import CAN + can = CAN(1, CAN.LOOPBACK) + can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126)) # set a filter to receive messages with id=123, 124, 125 and 126 + can.send('message!', 123) # send a message with id 123 + can.recv(0) # receive message on FIFO 0 + """ + + NORMAL: Incomplete + """The mode of the CAN bus used in :meth:`~CAN.init()`.""" + LOOPBACK: Incomplete + """The mode of the CAN bus used in :meth:`~CAN.init()`.""" + SILENT: Incomplete + """The mode of the CAN bus used in :meth:`~CAN.init()`.""" + SILENT_LOOPBACK: Incomplete + """The mode of the CAN bus used in :meth:`~CAN.init()`.""" + STOPPED: Incomplete + """Possible states of the CAN controller returned from :meth:`~CAN.state()`.""" + ERROR_ACTIVE: Incomplete + """Possible states of the CAN controller returned from :meth:`~CAN.state()`.""" + ERROR_WARNING: Incomplete + """Possible states of the CAN controller returned from :meth:`~CAN.state()`.""" + ERROR_PASSIVE: Incomplete + """Possible states of the CAN controller returned from :meth:`~CAN.state()`.""" + BUS_OFF: Incomplete + """Possible states of the CAN controller returned from :meth:`~CAN.state()`.""" + LIST16: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for classic CAN.""" + MASK16: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for classic CAN.""" + LIST32: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for classic CAN.""" + MASK32: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for classic CAN.""" + DUAL: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for CAN FD.""" + RANGE: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for CAN FD.""" + MASK: Incomplete + """The operation mode of a filter used in :meth:`~CAN.setfilter()` for CAN FD.""" + def __init__( + self, + bus: int | str, + mode: int, + /, + extframe: bool = False, + prescaler: int = 100, + *, + sjw: int = 1, + bs1: int = 6, + bs2: int = 8, + auto_restart: bool = False, + ) -> None: + """ + Construct a CAN object on the given bus. *bus* can be 1-2, or ``'YA'`` or ``'YB'``. + With no additional parameters, the CAN object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See :meth:`CAN.init` for parameters of initialisation. + + The physical pins of the CAN buses are: + + - ``CAN(1)`` is on ``YA``: ``(RX, TX) = (Y3, Y4) = (PB8, PB9)`` + - ``CAN(2)`` is on ``YB``: ``(RX, TX) = (Y5, Y6) = (PB12, PB13)`` + """ + + def init( + self, + mode: int, + /, + extframe: bool = False, + prescaler: int = 100, + *, + sjw: int = 1, + bs1: int = 6, + bs2: int = 8, + auto_restart: bool = False, + baudrate: int = 0, + sample_point: int = 75, + ) -> None: + """ + Initialise the CAN bus with the given parameters: + + - *mode* is one of: NORMAL, LOOPBACK, SILENT, SILENT_LOOPBACK + - *prescaler* is the value by which the CAN input clock is divided to generate the + nominal bit time quanta. The prescaler can be a value between 1 and 1024 inclusive + for classic CAN, and between 1 and 512 inclusive for CAN FD. + - *sjw* is the resynchronisation jump width in units of time quanta for nominal bits; + it can be a value between 1 and 4 inclusive for classic CAN, and between 1 and 128 inclusive for CAN FD. + - *bs1* defines the location of the sample point in units of the time quanta for nominal bits; + it can be a value between 1 and 16 inclusive for classic CAN, and between 2 and 256 inclusive for CAN FD. + - *bs2* defines the location of the transmit point in units of the time quanta for nominal bits; + it can be a value between 1 and 8 inclusive for classic CAN, and between 2 and 128 inclusive for CAN FD. + - *auto_restart* sets whether the controller will automatically try and restart + communications after entering the bus-off state; if this is disabled then + :meth:`~CAN.restart()` can be used to leave the bus-off state + - *baudrate* if a baudrate other than 0 is provided, this function will try to automatically + calculate the CAN nominal bit time (overriding *prescaler*, *bs1* and *bs2*) that satisfies + both the baudrate and the desired *sample_point*. + - *sample_point* given in a percentage of the nominal bit time, the *sample_point* specifies the position + of the bit sample with respect to the whole nominal bit time. The default *sample_point* is 75%. + - *num_filter_banks* for classic CAN, this is the number of banks that will be assigned to CAN(1), + the rest of the 28 are assigned to CAN(2). + - *brs_prescaler* is the value by which the CAN FD input clock is divided to generate the + data bit time quanta. The prescaler can be a value between 1 and 32 inclusive. + - *brs_sjw* is the resynchronisation jump width in units of time quanta for data bits; + it can be a value between 1 and 16 inclusive + - *brs_bs1* defines the location of the sample point in units of the time quanta for data bits; + it can be a value between 1 and 32 inclusive + - *brs_bs2* defines the location of the transmit point in units of the time quanta for data bits; + it can be a value between 1 and 16 inclusive + - *brs_baudrate* if a baudrate other than 0 is provided, this function will try to automatically + calculate the CAN data bit time (overriding *brs_prescaler*, *brs_bs1* and *brs_bs2*) that satisfies + both the baudrate and the desired *brs_sample_point*. + - *brs_sample_point* given in a percentage of the data bit time, the *brs_sample_point* specifies the position + of the bit sample with respect to the whole data bit time. The default *brs_sample_point* is 75%. + + + The time quanta tq is the basic unit of time for the CAN bus. tq is the CAN + prescaler value divided by PCLK1 (the frequency of internal peripheral bus 1); + see :meth:`pyb.freq()` to determine PCLK1. + + A single bit is made up of the synchronisation segment, which is always 1 tq. + Then follows bit segment 1, then bit segment 2. The sample point is after bit + segment 1 finishes. The transmit point is after bit segment 2 finishes. + The baud rate will be 1/bittime, where the bittime is 1 + BS1 + BS2 multiplied + by the time quanta tq. + + For example, with PCLK1=42MHz, prescaler=100, sjw=1, bs1=6, bs2=8, the value of + tq is 2.38 microseconds. The bittime is 35.7 microseconds, and the baudrate + is 28kHz. + + See page 680 of the STM32F405 datasheet for more details. + """ + ... + + def deinit(self) -> None: + """ + Turn off the CAN bus. + """ + ... + + def restart(self) -> None: + """ + Force a software restart of the CAN controller without resetting its + configuration. + + If the controller enters the bus-off state then it will no longer participate + in bus activity. If the controller is not configured to automatically restart + (see :meth:`~CAN.init()`) then this method can be used to trigger a restart, + and the controller will follow the CAN protocol to leave the bus-off state and + go into the error active state. + """ + ... + + def state(self) -> int: + """ + Return the state of the controller. The return value can be one of: + + - ``CAN.STOPPED`` -- the controller is completely off and reset; + - ``CAN.ERROR_ACTIVE`` -- the controller is on and in the Error Active state + (both TEC and REC are less than 96); + - ``CAN.ERROR_WARNING`` -- the controller is on and in the Error Warning state + (at least one of TEC or REC is 96 or greater); + - ``CAN.ERROR_PASSIVE`` -- the controller is on and in the Error Passive state + (at least one of TEC or REC is 128 or greater); + - ``CAN.BUS_OFF`` -- the controller is on but not participating in bus activity + (TEC overflowed beyond 255). + """ + ... + + @overload + def info(self) -> list[int]: + """ + Get information about the controller's error states and TX and RX buffers. + If *list* is provided then it should be a list object with at least 8 entries, + which will be filled in with the information. Otherwise a new list will be + created and filled in. In both cases the return value of the method is the + populated list. + + The values in the list are: + + - TEC value + - REC value + - number of times the controller enterted the Error Warning state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Error Passive state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Bus Off state (wrapped + around to 0 after 65535) + - number of pending TX messages + - number of pending RX messages on fifo 0 + - number of pending RX messages on fifo 1 + """ + + @overload + def info(self, list: list[int], /) -> list[int]: + """ + Get information about the controller's error states and TX and RX buffers. + If *list* is provided then it should be a list object with at least 8 entries, + which will be filled in with the information. Otherwise a new list will be + created and filled in. In both cases the return value of the method is the + populated list. + + The values in the list are: + + - TEC value + - REC value + - number of times the controller enterted the Error Warning state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Error Passive state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Bus Off state (wrapped + around to 0 after 65535) + - number of pending TX messages + - number of pending RX messages on fifo 0 + - number of pending RX messages on fifo 1 + """ + + @overload + def setfilter(self, bank: int, mode: int, fifo: int, params: Sequence[int], /) -> None: + """ + Configure a filter bank: + + - *bank* is the classic CAN controller filter bank, or CAN FD filter index, to configure. + - *mode* is the mode the filter should operate in, see the tables below. + - *fifo* is which fifo (0 or 1) a message should be stored in, if it is accepted by this filter. + - *params* is an array of values the defines the filter. The contents of the array depends on the *mode* argument. + + +-----------+---------------------------------------------------------+ + |*mode* |Contents of *params* array for classic CAN controller | + +===========+=========================================================+ + |CAN.LIST16 |Four 16 bit ids that will be accepted | + +-----------+---------------------------------------------------------+ + |CAN.LIST32 |Two 32 bit ids that will be accepted | + +-----------+---------------------------------------------------------+ + |CAN.MASK16 |Two 16 bit id/mask pairs. E.g. (1, 3, 4, 4) | + | | | The first pair, 1 and 3 will accept all ids | + | | | that have bit 0 = 1 and bit 1 = 0. | + | | | The second pair, 4 and 4, will accept all ids | + | | | that have bit 2 = 1. | + +-----------+---------------------------------------------------------+ + |CAN.MASK32 |As with CAN.MASK16 but with only one 32 bit id/mask pair.| + +-----------+---------------------------------------------------------+ + + +-----------+---------------------------------------------------------+ + |*mode* |Contents of *params* array for CAN FD controller | + +===========+=========================================================+ + |CAN.RANGE |Two ids that represent a range of accepted ids. | + +-----------+---------------------------------------------------------+ + |CAN.DUAL |Two ids that will be accepted. For example (1, 2) | + +-----------+---------------------------------------------------------+ + |CAN.MASK |One filter ID and a mask. For example (0x111, 0x7FF) | + +-----------+---------------------------------------------------------+ + + - *rtr* For classic CAN controllers, this is an array of booleans that states if + a filter should accept a remote transmission request message. If this argument + is not given then it defaults to ``False`` for all entries. The length of the + array depends on the *mode* argument. For CAN FD, this argument is ignored. + + +-----------+----------------------+ + |*mode* |length of *rtr* array | + +===========+======================+ + |CAN.LIST16 |4 | + +-----------+----------------------+ + |CAN.LIST32 |2 | + +-----------+----------------------+ + |CAN.MASK16 |2 | + +-----------+----------------------+ + |CAN.MASK32 |1 | + +-----------+----------------------+ + + - *extframe* If True the frame will have an extended identifier (29 bits), + otherwise a standard identifier (11 bits) is used. + """ + + @overload + def setfilter( + self, + bank: int, + mode: int, + fifo: int, + params: Sequence[int], + /, + *, + rtr: Sequence[bool], + ) -> None: + """ + Configure a filter bank: + + - *bank* is the classic CAN controller filter bank, or CAN FD filter index, to configure. + - *mode* is the mode the filter should operate in, see the tables below. + - *fifo* is which fifo (0 or 1) a message should be stored in, if it is accepted by this filter. + - *params* is an array of values the defines the filter. The contents of the array depends on the *mode* argument. + + +-----------+---------------------------------------------------------+ + |*mode* |Contents of *params* array for classic CAN controller | + +===========+=========================================================+ + |CAN.LIST16 |Four 16 bit ids that will be accepted | + +-----------+---------------------------------------------------------+ + |CAN.LIST32 |Two 32 bit ids that will be accepted | + +-----------+---------------------------------------------------------+ + |CAN.MASK16 |Two 16 bit id/mask pairs. E.g. (1, 3, 4, 4) | + | | | The first pair, 1 and 3 will accept all ids | + | | | that have bit 0 = 1 and bit 1 = 0. | + | | | The second pair, 4 and 4, will accept all ids | + | | | that have bit 2 = 1. | + +-----------+---------------------------------------------------------+ + |CAN.MASK32 |As with CAN.MASK16 but with only one 32 bit id/mask pair.| + +-----------+---------------------------------------------------------+ + + +-----------+---------------------------------------------------------+ + |*mode* |Contents of *params* array for CAN FD controller | + +===========+=========================================================+ + |CAN.RANGE |Two ids that represent a range of accepted ids. | + +-----------+---------------------------------------------------------+ + |CAN.DUAL |Two ids that will be accepted. For example (1, 2) | + +-----------+---------------------------------------------------------+ + |CAN.MASK |One filter ID and a mask. For example (0x111, 0x7FF) | + +-----------+---------------------------------------------------------+ + + - *rtr* For classic CAN controllers, this is an array of booleans that states if + a filter should accept a remote transmission request message. If this argument + is not given then it defaults to ``False`` for all entries. The length of the + array depends on the *mode* argument. For CAN FD, this argument is ignored. + + +-----------+----------------------+ + |*mode* |length of *rtr* array | + +===========+======================+ + |CAN.LIST16 |4 | + +-----------+----------------------+ + |CAN.LIST32 |2 | + +-----------+----------------------+ + |CAN.MASK16 |2 | + +-----------+----------------------+ + |CAN.MASK32 |1 | + +-----------+----------------------+ + + - *extframe* If True the frame will have an extended identifier (29 bits), + otherwise a standard identifier (11 bits) is used. + """ + + def clearfilter(self, bank: int, /) -> None: + """ + Clear and disables a filter bank: + + - *bank* is the classic CAN controller filter bank, or CAN FD filter index, to clear. + - *extframe* For CAN FD controllers, if True, clear an extended filter (configured with extframe=True), + otherwise the clear a standard identifier (configured with extframe=False). + """ + ... + + def any(self, fifo: int, /) -> bool: + """ + Return ``True`` if any message waiting on the FIFO, else ``False``. + """ + ... + + @overload + def recv(self, fifo: int, /, *, timeout: int = 5000) -> tuple[int, bool, int, memoryview]: + """ + Receive data on the bus: + + - *fifo* is an integer, which is the FIFO to receive on + - *list* is an optional list object to be used as the return value + - *timeout* is the timeout in milliseconds to wait for the receive. + + Return value: A tuple containing five values. + + - The id of the message. + - A boolean that indicates if the message ID is standard or extended. + - A boolean that indicates if the message is an RTR message. + - The FMI (Filter Match Index) value. + - An array containing the data. + + If *list* is ``None`` then a new tuple will be allocated, as well as a new + bytes object to contain the data (as the fifth element in the tuple). + + If *list* is not ``None`` then it should be a list object with a least five + elements. The fifth element should be a memoryview object which is created + from either a bytearray or an array of type 'B' or 'b', and this array must + have enough room for at least 8 bytes. The list object will then be + populated with the first four return values above, and the memoryview object + will be resized inplace to the size of the data and filled in with that data. + The same list and memoryview objects can be reused in subsequent calls to + this method, providing a way of receiving data without using the heap. + For example:: + + buf = bytearray(8) + lst = [0, 0, 0, 0, memoryview(buf)] + # No heap memory is allocated in the following call + can.recv(0, lst) + """ + + @overload + def recv(self, fifo: int, list: None, /, *, timeout: int = 5000) -> tuple[int, bool, int, memoryview]: + """ + Receive data on the bus: + + - *fifo* is an integer, which is the FIFO to receive on + - *list* is an optional list object to be used as the return value + - *timeout* is the timeout in milliseconds to wait for the receive. + + Return value: A tuple containing five values. + + - The id of the message. + - A boolean that indicates if the message ID is standard or extended. + - A boolean that indicates if the message is an RTR message. + - The FMI (Filter Match Index) value. + - An array containing the data. + + If *list* is ``None`` then a new tuple will be allocated, as well as a new + bytes object to contain the data (as the fifth element in the tuple). + + If *list* is not ``None`` then it should be a list object with a least five + elements. The fifth element should be a memoryview object which is created + from either a bytearray or an array of type 'B' or 'b', and this array must + have enough room for at least 8 bytes. The list object will then be + populated with the first four return values above, and the memoryview object + will be resized inplace to the size of the data and filled in with that data. + The same list and memoryview objects can be reused in subsequent calls to + this method, providing a way of receiving data without using the heap. + For example:: + + buf = bytearray(8) + lst = [0, 0, 0, 0, memoryview(buf)] + # No heap memory is allocated in the following call + can.recv(0, lst) + """ + + @overload + def recv(self, fifo: int, list: list[int | bool | memoryview], /, *, timeout: int = 5000) -> None: + """ + Receive data on the bus: + + - *fifo* is an integer, which is the FIFO to receive on + - *list* is an optional list object to be used as the return value + - *timeout* is the timeout in milliseconds to wait for the receive. + + Return value: A tuple containing five values. + + - The id of the message. + - A boolean that indicates if the message ID is standard or extended. + - A boolean that indicates if the message is an RTR message. + - The FMI (Filter Match Index) value. + - An array containing the data. + + If *list* is ``None`` then a new tuple will be allocated, as well as a new + bytes object to contain the data (as the fifth element in the tuple). + + If *list* is not ``None`` then it should be a list object with a least five + elements. The fifth element should be a memoryview object which is created + from either a bytearray or an array of type 'B' or 'b', and this array must + have enough room for at least 8 bytes. The list object will then be + populated with the first four return values above, and the memoryview object + will be resized inplace to the size of the data and filled in with that data. + The same list and memoryview objects can be reused in subsequent calls to + this method, providing a way of receiving data without using the heap. + For example:: + + buf = bytearray(8) + lst = [0, 0, 0, 0, memoryview(buf)] + # No heap memory is allocated in the following call + can.recv(0, lst) + """ + + def send( + self, + data: int | AnyWritableBuf, + id: int, + /, + *, + timeout: int = 0, + rtr: bool = False, + ) -> None: + """ + Send a message on the bus: + + - *data* is the data to send (an integer to send, or a buffer object). + - *id* is the id of the message to be sent. + - *timeout* is the timeout in milliseconds to wait for the send. + - *rtr* is a boolean that specifies if the message shall be sent as + a remote transmission request. If *rtr* is True then only the length + of *data* is used to fill in the DLC slot of the frame; the actual + bytes in *data* are unused. + - *extframe* if True the frame will have an extended identifier (29 bits), + otherwise a standard identifier (11 bits) is used. + - *fdf* for CAN FD controllers, if set to True, the frame will have an FD + frame format, which supports data payloads up to 64 bytes. + - *brs* for CAN FD controllers, if set to True, the bitrate switching mode + is enabled, in which the data phase is transmitted at a different bitrate. + See :meth:`CAN.init` for the data bit timing configuration parameters. + + If timeout is 0 the message is placed in a buffer in one of three hardware + buffers and the method returns immediately. If all three buffers are in use + an exception is thrown. If timeout is not 0, the method waits until the + message is transmitted. If the message can't be transmitted within the + specified time an exception is thrown. + + Return value: ``None``. + """ + ... + + def rxcallback(self, fifo: int, fun: Callable[[CAN], None], /) -> None: + """ + Register a function to be called when a message is accepted into a empty fifo: + + - *fifo* is the receiving fifo. + - *fun* is the function to be called when the fifo becomes non empty. + + The callback function takes two arguments the first is the can object it self the second is + a integer that indicates the reason for the callback. + + +--------+------------------------------------------------+ + | Reason | | + +========+================================================+ + | 0 | A message has been accepted into a empty FIFO. | + +--------+------------------------------------------------+ + | 1 | The FIFO is full | + +--------+------------------------------------------------+ + | 2 | A message has been lost due to a full FIFO | + +--------+------------------------------------------------+ + + Example use of rxcallback:: + + def cb0(bus, reason): + print('cb0') + if reason == 0: + print('pending') + if reason == 1: + print('full') + if reason == 2: + print('overflow') + + can = CAN(1, CAN.LOOPBACK) + can.rxcallback(0, cb0) + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/DAC.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/DAC.pyi new file mode 100644 index 00000000..91b542ab --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/DAC.pyi @@ -0,0 +1,165 @@ +""" """ + +from __future__ import annotations + +from array import array + +from _mpy_shed import AnyWritableBuf +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +from .Pin import Pin +from .Timer import Timer + +class DAC: + """ + The DAC is used to output analog values (a specific voltage) on pin X5 or pin X6. + The voltage will be between 0 and 3.3V. + + *This module will undergo changes to the API.* + + Example usage:: + + from pyb import DAC + + dac = DAC(1) # create DAC 1 on pin X5 + dac.write(128) # write a value to the DAC (makes X5 1.65V) + + dac = DAC(1, bits=12) # use 12 bit resolution + dac.write(4095) # output maximum value, 3.3V + + To output a continuous sine-wave:: + + import math + from pyb import DAC + + # create a buffer containing a sine-wave + buf = bytearray(100) + for i in range(len(buf)): + buf[i] = 128 + int(127 * math.sin(2 * math.pi * i / len(buf))) + + # output the sine-wave at 400Hz + dac = DAC(1) + dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR) + + To output a continuous sine-wave at 12-bit resolution:: + + import math + from array import array + from pyb import DAC + + # create a buffer containing a sine-wave, using half-word samples + buf = array('H', 2048 + int(2047 * math.sin(2 * math.pi * i / 128)) for i in range(128)) + + # output the sine-wave at 400Hz + dac = DAC(1, bits=12) + dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR) + """ + + NORMAL: Incomplete + """NORMAL mode does a single transmission of the waveform in the data buffer,""" + CIRCULAR: Incomplete + """\ + CIRCULAR mode does a transmission of the waveform in the data buffer, and wraps around + to the start of the data buffer every time it reaches the end of the table. + """ + def __init__(self, port: int | Pin, /, bits: int = 8, *, buffering: bool | None = None) -> None: + """ + Construct a new DAC object. + + ``port`` can be a pin object, or an integer (1 or 2). + DAC(1) is on pin X5 and DAC(2) is on pin X6. + + ``bits`` is an integer specifying the resolution, and can be 8 or 12. + The maximum value for the write and write_timed methods will be + 2\*\*``bits``-1. + + The *buffering* parameter selects the behaviour of the DAC op-amp output + buffer, whose purpose is to reduce the output impedance. It can be + ``None`` to select the default (buffering enabled for :meth:`DAC.noise`, + :meth:`DAC.triangle` and :meth:`DAC.write_timed`, and disabled for + :meth:`DAC.write`), ``False`` to disable buffering completely, or ``True`` + to enable output buffering. + + When buffering is enabled the DAC pin can drive loads down to 5KΩ. + Otherwise it has an output impedance of 15KΩ maximum: consequently + to achieve a 1% accuracy without buffering requires the applied load + to be less than 1.5MΩ. Using the buffer incurs a penalty in accuracy, + especially near the extremes of range. + """ + + def init(self, bits: int = 8, *, buffering: bool | None = None) -> None: + """ + Reinitialise the DAC. *bits* can be 8 or 12. *buffering* can be + ``None``, ``False`` or ``True``; see above constructor for the meaning + of this parameter. + """ + ... + + def deinit(self) -> None: + """ + De-initialise the DAC making its pin available for other uses. + """ + ... + + def noise(self, freq: int, /) -> None: + """ + Generate a pseudo-random noise signal. A new random sample is written + to the DAC output at the given frequency. + """ + ... + + def triangle(self, freq: int, /) -> None: + """ + Generate a triangle wave. The value on the DAC output changes at the given + frequency and ramps through the full 12-bit range (up and down). Therefore + the frequency of the repeating triangle wave itself is 8192 times smaller. + """ + ... + + def write(self, value: int, /) -> None: + """ + Direct access to the DAC output. The minimum value is 0. The maximum + value is 2**``bits``-1, where ``bits`` is set when creating the DAC + object or by using the ``init`` method. + """ + ... + + def write_timed(self, data: AnyWritableBuf, freq: int | Timer, /, *, mode: int = NORMAL) -> None: + """ + Initiates a burst of RAM to DAC using a DMA transfer. + The input data is treated as an array of bytes in 8-bit mode, and + an array of unsigned half-words (array typecode 'H') in 12-bit mode. + + ``freq`` can be an integer specifying the frequency to write the DAC + samples at, using Timer(6). Or it can be an already-initialised + Timer object which is used to trigger the DAC sample. Valid timers + are 2, 4, 5, 6, 7 and 8. + + ``mode`` can be ``DAC.NORMAL`` or ``DAC.CIRCULAR``. + + Example using both DACs at the same time:: + + dac1 = DAC(1) + dac2 = DAC(2) + dac1.write_timed(buf1, pyb.Timer(6, freq=100), mode=DAC.CIRCULAR) + dac2.write_timed(buf2, pyb.Timer(7, freq=200), mode=DAC.CIRCULAR) + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ExtInt.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ExtInt.pyi new file mode 100644 index 00000000..a0459a86 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/ExtInt.pyi @@ -0,0 +1,136 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import Callable + +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +from .Pin import Pin + +class ExtInt: + """ + There are a total of 22 interrupt lines. 16 of these can come from GPIO pins + and the remaining 6 are from internal sources. + + For lines 0 through 15, a given line can map to the corresponding line from an + arbitrary port. So line 0 can map to Px0 where x is A, B, C, ... and + line 1 can map to Px1 where x is A, B, C, ... :: + + def callback(line): + print("line =", line) + + Note: ExtInt will automatically configure the gpio line as an input. :: + + extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback) + + Now every time a falling edge is seen on the X1 pin, the callback will be + called. Caution: mechanical pushbuttons have "bounce" and pushing or + releasing a switch will often generate multiple edges. + See: http://www.eng.utah.edu/~cs5780/debouncing.pdf for a detailed + explanation, along with various techniques for debouncing. + + Trying to register 2 callbacks onto the same pin will throw an exception. + + If pin is passed as an integer, then it is assumed to map to one of the + internal interrupt sources, and must be in the range 16 through 22. + + All other pin objects go through the pin mapper to come up with one of the + gpio pins. :: + + extint = pyb.ExtInt(pin, mode, pull, callback) + + Valid modes are pyb.ExtInt.IRQ_RISING, pyb.ExtInt.IRQ_FALLING, + pyb.ExtInt.IRQ_RISING_FALLING, pyb.ExtInt.EVT_RISING, + pyb.ExtInt.EVT_FALLING, and pyb.ExtInt.EVT_RISING_FALLING. + + Only the IRQ_xxx modes have been tested. The EVT_xxx modes have + something to do with sleep mode and the WFE instruction. + + Valid pull values are pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN, pyb.Pin.PULL_NONE. + + There is also a C API, so that drivers which require EXTI interrupt lines + can also use this code. See extint.h for the available functions and + usrsw.h for an example of using this. + """ + + IRQ_FALLING: Incomplete + """interrupt on a falling edge""" + IRQ_RISING: Incomplete + """interrupt on a rising edge""" + IRQ_RISING_FALLING: Incomplete + """interrupt on a rising or falling edge""" + def __init__( + self, + pin: int | str | Pin, + mode: int, + pull: int, + callback: Callable[[int], None], + ) -> None: + """ + Create an ExtInt object: + + - ``pin`` is the pin on which to enable the interrupt (can be a pin object or any valid pin name). + - ``mode`` can be one of: + - ``ExtInt.IRQ_RISING`` - trigger on a rising edge; + - ``ExtInt.IRQ_FALLING`` - trigger on a falling edge; + - ``ExtInt.IRQ_RISING_FALLING`` - trigger on a rising or falling edge. + - ``pull`` can be one of: + - ``pyb.Pin.PULL_NONE`` - no pull up or down resistors; + - ``pyb.Pin.PULL_UP`` - enable the pull-up resistor; + - ``pyb.Pin.PULL_DOWN`` - enable the pull-down resistor. + - ``callback`` is the function to call when the interrupt triggers. The + callback function must accept exactly 1 argument, which is the line that + triggered the interrupt. + """ + + @staticmethod + def regs() -> None: + """ + Dump the values of the EXTI registers. + """ + ... + + def disable(self) -> None: + """ + Disable the interrupt associated with the ExtInt object. + This could be useful for debouncing. + """ + ... + + def enable(self) -> None: + """ + Enable a disabled interrupt. + """ + ... + + def line(self) -> int: + """ + Return the line number that the pin is mapped to. + """ + ... + + def swint(self) -> None: + """ + Trigger the callback from software. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Flash.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Flash.pyi new file mode 100644 index 00000000..fa9322ce --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Flash.pyi @@ -0,0 +1,79 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import overload + +from _mpy_shed import AbstractBlockDev +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class Flash(AbstractBlockDev): + """ + The Flash class allows direct access to the primary flash device on the pyboard. + + In most cases, to store persistent data on the device, you'll want to use a + higher-level abstraction, for example the filesystem via Python's standard file + API, but this interface is useful to :ref:`customise the filesystem + configuration ` or implement a low-level storage system for your + application. + """ + + @overload + def __init__(self): + """ + Create and return a block device that represents the flash device presented + to the USB mass storage interface. + + It includes a virtual partition table at the start, and the actual flash + starts at block ``0x100``. + + This constructor is deprecated and will be removed in a future version of MicroPython. + """ + + @overload + def __init__(self, *, start: int = -1, len: int = -1): + """ + Create and return a block device that accesses the flash at the specified offset. The length defaults to the remaining size of the device. + + The *start* and *len* offsets are in bytes, and must be a multiple of the block size (typically 512 for internal flash). + """ + + def readblocks(self, blocknum: int, buf: bytes, offset: int = 0, /) -> None: + """ + These methods implement the simple and :ref:`extended + ` block protocol defined by + :class:`os.AbstractBlockDev`. + """ + + def writeblocks(self, blocknum: int, buf: bytes, offset: int = 0, /) -> None: + """ + These methods implement the simple and :ref:`extended + ` block protocol defined by + :class:`os.AbstractBlockDev`. + """ + + def ioctl(self, op: int, arg: int) -> int | None: + """ + These methods implement the simple and :ref:`extended + ` block protocol defined by + :class:`vfs.AbstractBlockDev`. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/I2C.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/I2C.pyi new file mode 100644 index 00000000..5e4dd34c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/I2C.pyi @@ -0,0 +1,294 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import List, overload + +from _mpy_shed import AnyWritableBuf +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class I2C: + """ + I2C is a two-wire protocol for communicating between devices. At the physical + level it consists of 2 wires: SCL and SDA, the clock and data lines respectively. + + I2C objects are created attached to a specific bus. They can be initialised + when created, or initialised later on. + + Example:: + + from pyb import I2C + + i2c = I2C(1) # create on bus 1 + i2c = I2C(1, I2C.CONTROLLER) # create and init as a controller + i2c.init(I2C.CONTROLLER, baudrate=20000) # init as a controller + i2c.init(I2C.PERIPHERAL, addr=0x42) # init as a peripheral with given address + i2c.deinit() # turn off the I2C unit + + Printing the i2c object gives you information about its configuration. + + The basic methods are send and recv:: + + i2c.send('abc') # send 3 bytes + i2c.send(0x42) # send a single byte, given by the number + data = i2c.recv(3) # receive 3 bytes + + To receive inplace, first create a bytearray:: + + data = bytearray(3) # create a buffer + i2c.recv(data) # receive 3 bytes, writing them into data + + You can specify a timeout (in ms):: + + i2c.send(b'123', timeout=2000) # timeout after 2 seconds + + A controller must specify the recipient's address:: + + i2c.init(I2C.CONTROLLER) + i2c.send('123', 0x42) # send 3 bytes to peripheral with address 0x42 + i2c.send(b'456', addr=0x42) # keyword for address + + Master also has other methods:: + + i2c.is_ready(0x42) # check if peripheral 0x42 is ready + i2c.scan() # scan for peripherals on the bus, returning + # a list of valid addresses + i2c.mem_read(3, 0x42, 2) # read 3 bytes from memory of peripheral 0x42, + # starting at address 2 in the peripheral + i2c.mem_write('abc', 0x42, 2, timeout=1000) # write 'abc' (3 bytes) to memory of peripheral 0x42 + # starting at address 2 in the peripheral, timeout after 1 second + """ + + CONTROLLER: Incomplete + """for initialising the bus to controller mode""" + PERIPHERAL: Incomplete + """for initialising the bus to peripheral mode""" + def __init__( + self, + bus: int | str, + mode: str, + /, + *, + addr: int = 0x12, + baudrate: int = 400_000, + gencall: bool = False, + dma: bool = False, + ) -> None: + """ + Construct an I2C object on the given bus. ``bus`` can be 1 or 2, 'X' or + 'Y'. With no additional parameters, the I2C object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + + The physical pins of the I2C buses on Pyboards V1.0 and V1.1 are: + + - ``I2C(1)`` is on the X position: ``(SCL, SDA) = (X9, X10) = (PB6, PB7)`` + - ``I2C(2)`` is on the Y position: ``(SCL, SDA) = (Y9, Y10) = (PB10, PB11)`` + + On the Pyboard Lite: + + - ``I2C(1)`` is on the X position: ``(SCL, SDA) = (X9, X10) = (PB6, PB7)`` + - ``I2C(3)`` is on the Y position: ``(SCL, SDA) = (Y9, Y10) = (PA8, PB8)`` + + Calling the constructor with 'X' or 'Y' enables portability between Pyboard + types. + """ + + def deinit(self) -> None: + """ + Turn off the I2C bus. + """ + ... + + def init( + self, + bus: int | str, + mode: str, + /, + *, + addr: int = 0x12, + baudrate: int = 400_000, + gencall: bool = False, + dma: bool = False, + ) -> None: + """ + Initialise the I2C bus with the given parameters: + + - ``mode`` must be either ``I2C.CONTROLLER`` or ``I2C.PERIPHERAL`` + - ``addr`` is the 7-bit address (only sensible for a peripheral) + - ``baudrate`` is the SCL clock rate (only sensible for a controller) + - ``gencall`` is whether to support general call mode + - ``dma`` is whether to allow the use of DMA for the I2C transfers (note + that DMA transfers have more precise timing but currently do not handle bus + errors properly) + + The actual clock frequency may be lower than the requested frequency. + This is dependent on the platform hardware. The actual rate may be determined + by printing the I2C object. + """ + ... + + def is_ready(self, addr: int, /) -> bool: + """ + Check if an I2C device responds to the given address. Only valid when in controller mode. + """ + ... + + @overload + def mem_read( + self, + data: int, + addr: int, + memaddr: int, + /, + *, + timeout: int = 5000, + addr_size: int = 8, + ) -> bytes: + """ + Read from the memory of an I2C device: + + - ``data`` can be an integer (number of bytes to read) or a buffer to read into + - ``addr`` is the I2C device address + - ``memaddr`` is the memory location within the I2C device + - ``timeout`` is the timeout in milliseconds to wait for the read + - ``addr_size`` selects width of memaddr: 8 or 16 bits + + Returns the read data. + This is only valid in controller mode. + """ + + @overload + def mem_read( + self, + data: AnyWritableBuf, + addr: int, + memaddr: int, + /, + *, + timeout: int = 5000, + addr_size: int = 8, + ) -> AnyWritableBuf: + """ + Read from the memory of an I2C device: + + - ``data`` can be an integer (number of bytes to read) or a buffer to read into + - ``addr`` is the I2C device address + - ``memaddr`` is the memory location within the I2C device + - ``timeout`` is the timeout in milliseconds to wait for the read + - ``addr_size`` selects width of memaddr: 8 or 16 bits + + Returns the read data. + This is only valid in controller mode. + """ + + def mem_write( + self, + data: int | AnyWritableBuf, + addr: int, + memaddr: int, + /, + *, + timeout: int = 5000, + addr_size: int = 8, + ) -> None: + """ + Write to the memory of an I2C device: + + - ``data`` can be an integer or a buffer to write from + - ``addr`` is the I2C device address + - ``memaddr`` is the memory location within the I2C device + - ``timeout`` is the timeout in milliseconds to wait for the write + - ``addr_size`` selects width of memaddr: 8 or 16 bits + + Returns ``None``. + This is only valid in controller mode. + """ + ... + + @overload + def recv( + self, + recv: int, + addr: int = 0x00, + /, + *, + timeout: int = 5000, + ) -> bytes: + """ + Receive data on the bus: + + - ``recv`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes + - ``addr`` is the address to receive from (only required in controller mode) + - ``timeout`` is the timeout in milliseconds to wait for the receive + + Return value: if ``recv`` is an integer then a new buffer of the bytes received, + otherwise the same buffer that was passed in to ``recv``. + """ + + @overload + def recv( + self, + recv: AnyWritableBuf, + addr: int = 0x00, + /, + *, + timeout: int = 5000, + ) -> AnyWritableBuf: + """ + Receive data on the bus: + + - ``recv`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes + - ``addr`` is the address to receive from (only required in controller mode) + - ``timeout`` is the timeout in milliseconds to wait for the receive + + Return value: if ``recv`` is an integer then a new buffer of the bytes received, + otherwise the same buffer that was passed in to ``recv``. + """ + + def send( + self, + addr: int = 0x00, + /, + *, + timeout: int = 5000, + ) -> None: + """ + Send data on the bus: + + - ``send`` is the data to send (an integer to send, or a buffer object) + - ``addr`` is the address to send to (only required in controller mode) + - ``timeout`` is the timeout in milliseconds to wait for the send + + Return value: ``None``. + """ + ... + + def scan(self) -> List: + """ + Scan all I2C addresses from 0x01 to 0x7f and return a list of those that respond. + Only valid when in controller mode. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LCD.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LCD.pyi new file mode 100644 index 00000000..552e37e5 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LCD.pyi @@ -0,0 +1,130 @@ +""" """ + +from __future__ import annotations + +from array import array + +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class LCD: + """ + The LCD class is used to control the LCD on the LCD touch-sensor pyskin, + LCD32MKv1.0. The LCD is a 128x32 pixel monochrome screen, part NHD-C12832A1Z. + + The pyskin must be connected in either the X or Y positions, and then + an LCD object is made using:: + + lcd = pyb.LCD('X') # if pyskin is in the X position + lcd = pyb.LCD('Y') # if pyskin is in the Y position + + Then you can use:: + + lcd.light(True) # turn the backlight on + lcd.write('Hello world!\n') # print text to the screen + + This driver implements a double buffer for setting/getting pixels. + For example, to make a bouncing dot, try:: + + x = y = 0 + dx = dy = 1 + while True: + # update the dot's position + x += dx + y += dy + + # make the dot bounce of the edges of the screen + if x <= 0 or x >= 127: dx = -dx + if y <= 0 or y >= 31: dy = -dy + + lcd.fill(0) # clear the buffer + lcd.pixel(x, y, 1) # draw the dot + lcd.show() # show the buffer + pyb.delay(50) # pause for 50ms + """ + + def __init__(self, skin_position: str, /) -> None: + """ + Construct an LCD object in the given skin position. ``skin_position`` can be 'X' or 'Y', and + should match the position where the LCD pyskin is plugged in. + """ + + def command(self, inst_data: int, buf: bytes, /) -> None: + """ + Send an arbitrary command to the LCD. Pass 0 for ``instr_data`` to send an + instruction, otherwise pass 1 to send data. ``buf`` is a buffer with the + instructions/data to send. + """ + ... + + def contrast(self, value: int, /) -> None: + """ + Set the contrast of the LCD. Valid values are between 0 and 47. + """ + ... + + def fill(self, colour: int, /) -> None: + """ + Fill the screen with the given colour (0 or 1 for white or black). + + This method writes to the hidden buffer. Use ``show()`` to show the buffer. + """ + ... + + def get(self, x: int, y: int, /) -> int: + """ + Get the pixel at the position ``(x, y)``. Returns 0 or 1. + + This method reads from the visible buffer. + """ + ... + + def light(self, value: bool | int, /) -> None: + """ + Turn the backlight on/off. True or 1 turns it on, False or 0 turns it off. + """ + ... + + def pixel(self, x: int, y: int, colour: int, /) -> None: + """ + Set the pixel at ``(x, y)`` to the given colour (0 or 1). + + This method writes to the hidden buffer. Use ``show()`` to show the buffer. + """ + ... + + def show(self) -> None: + """ + Show the hidden buffer on the screen. + """ + ... + + def text(self, str: str, x: int, y: int, colour: int, /) -> None: + """ + Draw the given text to the position ``(x, y)`` using the given colour (0 or 1). + + This method writes to the hidden buffer. Use ``show()`` to show the buffer. + """ + ... + + def write(self, str: str, /) -> None: + """ + Write the string ``str`` to the screen. It will appear immediately. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LED.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LED.pyi new file mode 100644 index 00000000..d7e5e619 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/LED.pyi @@ -0,0 +1,84 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import overload + +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class LED: + """ + The LED object controls an individual LED (Light Emitting Diode). + """ + + def __init__(self, id: int, /) -> None: + """ + Create an LED object associated with the given LED: + + - ``id`` is the LED number, 1-4. + """ + + @overload + def intensity(self) -> int: + """ + Get or set the LED intensity. Intensity ranges between 0 (off) and 255 (full on). + If no argument is given, return the LED intensity. + If an argument is given, set the LED intensity and return ``None``. + + *Note:* Only LED(3) and LED(4) can have a smoothly varying intensity, and + they use timer PWM to implement it. LED(3) uses Timer(2) and LED(4) uses + Timer(3). These timers are only configured for PWM if the intensity of the + relevant LED is set to a value between 1 and 254. Otherwise the timers are + free for general purpose use. + """ + + @overload + def intensity(self, value: int, /) -> None: + """ + Get or set the LED intensity. Intensity ranges between 0 (off) and 255 (full on). + If no argument is given, return the LED intensity. + If an argument is given, set the LED intensity and return ``None``. + + *Note:* Only LED(3) and LED(4) can have a smoothly varying intensity, and + they use timer PWM to implement it. LED(3) uses Timer(2) and LED(4) uses + Timer(3). These timers are only configured for PWM if the intensity of the + relevant LED is set to a value between 1 and 254. Otherwise the timers are + free for general purpose use. + """ + + def off(self) -> None: + """ + Turn the LED off. + """ + ... + + def on(self) -> None: + """ + Turn the LED on, to maximum intensity. + """ + ... + + def toggle(self) -> None: + """ + Toggle the LED between on (maximum intensity) and off. If the LED is at + non-zero intensity then it is considered "on" and toggle will turn it off. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Pin.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Pin.pyi new file mode 100644 index 00000000..3bf11e87 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Pin.pyi @@ -0,0 +1,331 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import Any, Callable, Dict, List, overload + +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class Pin: + """ + A pin is the basic object to control I/O pins. It has methods to set + the mode of the pin (input, output, etc) and methods to get and set the + digital logic level. For analog control of a pin, see the ADC class. + + Usage Model: + + All Board Pins are predefined as pyb.Pin.board.Name:: + + x1_pin = pyb.Pin.board.X1 + + g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN) + + CPU pins which correspond to the board pins are available + as ``pyb.Pin.cpu.Name``. For the CPU pins, the names are the port letter + followed by the pin number. On the PYBv1.0, ``pyb.Pin.board.X1`` and + ``pyb.Pin.cpu.A0`` are the same pin. + + You can also use strings:: + + g = pyb.Pin('X1', pyb.Pin.OUT_PP) + + Users can add their own names:: + + MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 } + pyb.Pin.dict(MyMapperDict) + g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD) + + and can query mappings:: + + pin = pyb.Pin("LeftMotorDir") + + Users can also add their own mapping function:: + + def MyMapper(pin_name): + if pin_name == "LeftMotorDir": + return pyb.Pin.cpu.A0 + + pyb.Pin.mapper(MyMapper) + + So, if you were to call: ``pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP)`` + then ``"LeftMotorDir"`` is passed directly to the mapper function. + + To summarise, the following order determines how things get mapped into + an ordinal pin number: + + 1. Directly specify a pin object + 2. User supplied mapping function + 3. User supplied mapping (object must be usable as a dictionary key) + 4. Supply a string which matches a board pin + 5. Supply a string which matches a CPU port/pin + + You can set ``pyb.Pin.debug(True)`` to get some debug information about + how a particular object gets mapped to a pin. + + When a pin has the ``Pin.PULL_UP`` or ``Pin.PULL_DOWN`` pull-mode enabled, + that pin has an effective 40k Ohm resistor pulling it to 3V3 or GND + respectively (except pin Y5 which has 11k Ohm resistors). + + Now every time a falling edge is seen on the gpio pin, the callback will be + executed. Caution: mechanical push buttons have "bounce" and pushing or + releasing a switch will often generate multiple edges. + See: http://www.eng.utah.edu/~cs5780/debouncing.pdf for a detailed + explanation, along with various techniques for debouncing. + + All pin objects go through the pin mapper to come up with one of the + gpio pins. + """ + + ALT: Incomplete + """initialise the pin to alternate-function mode for input or output""" + AF_OD: Incomplete + """initialise the pin to alternate-function mode with an open-drain drive""" + AF_PP: Incomplete + """initialise the pin to alternate-function mode with a push-pull drive""" + ANALOG: Incomplete + """initialise the pin to analog mode""" + IN: Incomplete + """initialise the pin to input mode""" + OUT_OD: Incomplete + """initialise the pin to output mode with an open-drain drive""" + OUT_PP: Incomplete + """initialise the pin to output mode with a push-pull drive""" + PULL_DOWN: Incomplete + """enable the pull-down resistor on the pin""" + PULL_NONE: Incomplete + """don't enable any pull up or down resistors on the pin""" + PULL_UP: Incomplete + """enable the pull-up resistor on the pin""" + def __init__( + self, + id: Pin | str | int, + /, + mode: int = IN, + pull: int = PULL_NONE, + *, + value: Any = None, + alt: str | int = -1, + ) -> None: + """ + Create a new Pin object associated with the id. If additional arguments are given, + they are used to initialise the pin. See :meth:`pin.init`. + """ + + @overload + @staticmethod + def debug() -> bool: + """ + Get or set the debugging state (``True`` or ``False`` for on or off). + """ + + @overload + @staticmethod + def debug(state: bool, /) -> None: + """ + Get or set the debugging state (``True`` or ``False`` for on or off). + """ + + @overload + @staticmethod + def dict() -> Dict[str, Pin]: + """ + Get or set the pin mapper dictionary. + """ + + @overload + @staticmethod + def dict(dict: Dict[str, Pin], /) -> None: + """ + Get or set the pin mapper dictionary. + """ + + @overload + @staticmethod + def mapper() -> Callable[[str], Pin]: + """ + Get or set the pin mapper function. + """ + + @overload + @staticmethod + def mapper(fun: Callable[[str], Pin], /) -> None: + """ + Get or set the pin mapper function. + """ + + def init( + self, + mode: int = IN, + pull: int = PULL_NONE, + *, + value: Any = None, + alt: str | int = -1, + ) -> None: + """ + Initialise the pin: + + - *mode* can be one of: + + - ``Pin.IN`` - configure the pin for input; + - ``Pin.OUT_PP`` - configure the pin for output, with push-pull control; + - ``Pin.OUT_OD`` - configure the pin for output, with open-drain control; + - ``Pin.ALT`` - configure the pin for alternate function, input or output; + - ``Pin.AF_PP`` - configure the pin for alternate function, push-pull; + - ``Pin.AF_OD`` - configure the pin for alternate function, open-drain; + - ``Pin.ANALOG`` - configure the pin for analog. + + - *pull* can be one of: + + - ``Pin.PULL_NONE`` - no pull up or down resistors; + - ``Pin.PULL_UP`` - enable the pull-up resistor; + - ``Pin.PULL_DOWN`` - enable the pull-down resistor. + + When a pin has the ``Pin.PULL_UP`` or ``Pin.PULL_DOWN`` pull-mode enabled, + that pin has an effective 40k Ohm resistor pulling it to 3V3 or GND + respectively (except pin Y5 which has 11k Ohm resistors). + + - *value* if not None will set the port output value before enabling the pin. + + - *alt* can be used when mode is ``Pin.ALT`` , ``Pin.AF_PP`` or ``Pin.AF_OD`` to + set the index or name of one of the alternate functions associated with a pin. + This arg was previously called *af* which can still be used if needed. + + Returns: ``None``. + """ + ... + + @overload + def value(self) -> int: + """ + Get or set the digital logic level of the pin: + + - With no argument, return 0 or 1 depending on the logic level of the pin. + - With ``value`` given, set the logic level of the pin. ``value`` can be + anything that converts to a boolean. If it converts to ``True``, the pin + is set high, otherwise it is set low. + """ + + @overload + def value(self, value: Any, /) -> None: + """ + Get or set the digital logic level of the pin: + + - With no argument, return 0 or 1 depending on the logic level of the pin. + - With ``value`` given, set the logic level of the pin. ``value`` can be + anything that converts to a boolean. If it converts to ``True``, the pin + is set high, otherwise it is set low. + """ + + def __str__(self) -> str: + """ + Return a string describing the pin object. + """ + ... + + def af(self) -> int: + """ + Returns the currently configured alternate-function of the pin. The + integer returned will match one of the allowed constants for the af + argument to the init function. + """ + ... + + def af_list(self) -> List: + """ + Returns an array of alternate functions available for this pin. + """ + ... + + def gpio(self) -> int: + """ + Returns the base address of the GPIO block associated with this pin. + """ + ... + + def mode(self) -> int: + """ + Returns the currently configured mode of the pin. The integer returned + will match one of the allowed constants for the mode argument to the init + function. + """ + ... + + def name(self) -> str: + """ + Get the pin name. + """ + ... + + def names(self) -> str: + """ + Returns the cpu and board names for this pin. + """ + ... + + def pin(self) -> int: + """ + Get the pin number. + """ + ... + + def port(self) -> int: + """ + Get the pin port. + """ + ... + + def pull(self) -> int: + """ + Returns the currently configured pull of the pin. The integer returned + will match one of the allowed constants for the pull argument to the init + function. + """ + ... + +class pinaf: + """ """ + + def __str__(self) -> str: + """ + Return a string describing the alternate function. + """ + ... + + def index(self) -> int: + """ + Return the alternate function index. + """ + ... + + def name(self) -> str: + """ + Return the name of the alternate function. + """ + ... + + def reg(self) -> Incomplete: + """ + Return the base register associated with the peripheral assigned to this + alternate function. For example, if the alternate function were TIM2_CH3 + this would return stm.TIM2 + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/RTC.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/RTC.pyi new file mode 100644 index 00000000..6ae92b94 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/RTC.pyi @@ -0,0 +1,120 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import Callable, Tuple, overload + +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class RTC: + """ + The RTC is an independent clock that keeps track of the date + and time. + + Example usage:: + + rtc = pyb.RTC() + rtc.datetime((2014, 5, 1, 4, 13, 0, 0, 0)) + print(rtc.datetime()) + """ + + def __init__(self) -> None: + """ + Create an RTC object. + """ + + def datetime(self, datetimetuple: tuple[int, int, int, int, int, int, int, int], /) -> Tuple: + """ + Get or set the date and time of the RTC. + + With no arguments, this method returns an 8-tuple with the current + date and time. With 1 argument (being an 8-tuple) it sets the date + and time (and ``subseconds`` is reset to 255). + + The 8-tuple has the following format: + + (year, month, day, weekday, hours, minutes, seconds, subseconds) + + ``weekday`` is 1-7 for Monday through Sunday. + + ``subseconds`` counts down from 255 to 0 + """ + ... + + def wakeup(self, timeout: int, callback: Callable[[RTC], None] | None = None, /) -> None: + """ + Set the RTC wakeup timer to trigger repeatedly at every ``timeout`` + milliseconds. This trigger can wake the pyboard from both the sleep + states: :meth:`pyb.stop` and :meth:`pyb.standby`. + + If ``timeout`` is ``None`` then the wakeup timer is disabled. + + If ``callback`` is given then it is executed at every trigger of the + wakeup timer. ``callback`` must take exactly one argument. + """ + ... + + def info(self) -> int: + """ + Get information about the startup time and reset source. + + - The lower 0xffff are the number of milliseconds the RTC took to + start up. + - Bit 0x10000 is set if a power-on reset occurred. + - Bit 0x20000 is set if an external reset occurred + """ + ... + + @overload + def calibration(self) -> int: + """ + Get or set RTC calibration. + + With no arguments, ``calibration()`` returns the current calibration + value, which is an integer in the range [-511 : 512]. With one + argument it sets the RTC calibration. + + The RTC Smooth Calibration mechanism adjusts the RTC clock rate by + adding or subtracting the given number of ticks from the 32768 Hz + clock over a 32 second period (corresponding to 2^20 clock ticks.) + Each tick added will speed up the clock by 1 part in 2^20, or 0.954 + ppm; likewise the RTC clock it slowed by negative values. The + usable calibration range is: + (-511 * 0.954) ~= -487.5 ppm up to (512 * 0.954) ~= 488.5 ppm + """ + + @overload + def calibration(self, cal: int, /) -> None: + """ + Get or set RTC calibration. + + With no arguments, ``calibration()`` returns the current calibration + value, which is an integer in the range [-511 : 512]. With one + argument it sets the RTC calibration. + + The RTC Smooth Calibration mechanism adjusts the RTC clock rate by + adding or subtracting the given number of ticks from the 32768 Hz + clock over a 32 second period (corresponding to 2^20 clock ticks.) + Each tick added will speed up the clock by 1 part in 2^20, or 0.954 + ppm; likewise the RTC clock it slowed by negative values. The + usable calibration range is: + (-511 * 0.954) ~= -487.5 ppm up to (512 * 0.954) ~= 488.5 ppm + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/SPI.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/SPI.pyi new file mode 100644 index 00000000..a21290ff --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/SPI.pyi @@ -0,0 +1,266 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import overload + +from _mpy_shed import AnyWritableBuf +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class SPI: + """ + SPI is a serial protocol that is driven by a controller. At the physical level + there are 3 lines: SCK, MOSI, MISO. + + See usage model of I2C; SPI is very similar. Main difference is + parameters to init the SPI bus:: + + from pyb import SPI + spi = SPI(1, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7) + + Only required parameter is mode, SPI.CONTROLLER or SPI.PERIPHERAL. Polarity can be + 0 or 1, and is the level the idle clock line sits at. Phase can be 0 or 1 + to sample data on the first or second clock edge respectively. Crc can be + None for no CRC, or a polynomial specifier. + + Additional methods for SPI:: + + data = spi.send_recv(b'1234') # send 4 bytes and receive 4 bytes + buf = bytearray(4) + spi.send_recv(b'1234', buf) # send 4 bytes and receive 4 into buf + spi.send_recv(buf, buf) # send/recv 4 bytes from/to buf + """ + + CONTROLLER: Incomplete + PERIPHERAL: Incomplete + """for initialising the SPI bus to controller or peripheral mode""" + LSB: Incomplete + MSB: Incomplete + """set the first bit to be the least or most significant bit""" + @overload + def __init__(self, bus: int, /): + """ + Construct an SPI object on the given bus. ``bus`` can be 1 or 2, or + 'X' or 'Y'. With no additional parameters, the SPI object is created but + not initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + + The physical pins of the SPI buses are: + + - ``SPI(1)`` is on the X position: ``(NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7)`` + - ``SPI(2)`` is on the Y position: ``(NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15)`` + + At the moment, the NSS pin is not used by the SPI driver and is free + for other use. + """ + + @overload + def __init__( + self, + bus: int, + /, + mode: int = CONTROLLER, + baudrate: int = 328125, + *, + polarity: int = 1, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + ti: bool = False, + crc: int | None = None, + ): + """ + Construct an SPI object on the given bus. ``bus`` can be 1 or 2, or + 'X' or 'Y'. With no additional parameters, the SPI object is created but + not initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + + The physical pins of the SPI buses are: + + - ``SPI(1)`` is on the X position: ``(NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7)`` + - ``SPI(2)`` is on the Y position: ``(NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15)`` + + At the moment, the NSS pin is not used by the SPI driver and is free + for other use. + """ + + @overload + def __init__( + self, + bus: int, + /, + mode: int = CONTROLLER, + *, + prescaler: int = 256, + polarity: int = 1, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + ti: bool = False, + crc: int | None = None, + ): + """ + Construct an SPI object on the given bus. ``bus`` can be 1 or 2, or + 'X' or 'Y'. With no additional parameters, the SPI object is created but + not initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + + The physical pins of the SPI buses are: + + - ``SPI(1)`` is on the X position: ``(NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7)`` + - ``SPI(2)`` is on the Y position: ``(NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15)`` + + At the moment, the NSS pin is not used by the SPI driver and is free + for other use. + """ + + def deinit(self) -> None: + """ + Turn off the SPI bus. + """ + ... + + @overload + def init( + self, + mode: int = CONTROLLER, + baudrate: int = 328125, + *, + polarity: int = 1, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + ti: bool = False, + crc: int | None = None, + ): + """ + Initialise the SPI bus with the given parameters: + + - ``mode`` must be either ``SPI.CONTROLLER`` or ``SPI.PERIPHERAL``. + - ``baudrate`` is the SCK clock rate (only sensible for a controller). + - ``prescaler`` is the prescaler to use to derive SCK from the APB bus frequency; + use of ``prescaler`` overrides ``baudrate``. + - ``polarity`` can be 0 or 1, and is the level the idle clock line sits at. + - ``phase`` can be 0 or 1 to sample data on the first or second clock edge + respectively. + - ``bits`` can be 8 or 16, and is the number of bits in each transferred word. + - ``firstbit`` can be ``SPI.MSB`` or ``SPI.LSB``. + - ``ti`` True indicates Texas Instruments, as opposed to Motorola, signal conventions. + - ``crc`` can be None for no CRC, or a polynomial specifier. + + Note that the SPI clock frequency will not always be the requested baudrate. + The hardware only supports baudrates that are the APB bus frequency + (see :meth:`pyb.freq`) divided by a prescaler, which can be 2, 4, 8, 16, 32, + 64, 128 or 256. SPI(1) is on AHB2, and SPI(2) is on AHB1. For precise + control over the SPI clock frequency, specify ``prescaler`` instead of + ``baudrate``. + + Printing the SPI object will show you the computed baudrate and the chosen + prescaler. + """ + + @overload + def init( + self, + mode: int = CONTROLLER, + *, + prescaler: int = 256, + polarity: int = 1, + phase: int = 0, + bits: int = 8, + firstbit: int = MSB, + ti: bool = False, + crc: int | None = None, + ): + """ + Initialise the SPI bus with the given parameters: + + - ``mode`` must be either ``SPI.CONTROLLER`` or ``SPI.PERIPHERAL``. + - ``baudrate`` is the SCK clock rate (only sensible for a controller). + - ``prescaler`` is the prescaler to use to derive SCK from the APB bus frequency; + use of ``prescaler`` overrides ``baudrate``. + - ``polarity`` can be 0 or 1, and is the level the idle clock line sits at. + - ``phase`` can be 0 or 1 to sample data on the first or second clock edge + respectively. + - ``bits`` can be 8 or 16, and is the number of bits in each transferred word. + - ``firstbit`` can be ``SPI.MSB`` or ``SPI.LSB``. + - ``ti`` True indicates Texas Instruments, as opposed to Motorola, signal conventions. + - ``crc`` can be None for no CRC, or a polynomial specifier. + + Note that the SPI clock frequency will not always be the requested baudrate. + The hardware only supports baudrates that are the APB bus frequency + (see :meth:`pyb.freq`) divided by a prescaler, which can be 2, 4, 8, 16, 32, + 64, 128 or 256. SPI(1) is on AHB2, and SPI(2) is on AHB1. For precise + control over the SPI clock frequency, specify ``prescaler`` instead of + ``baudrate``. + + Printing the SPI object will show you the computed baudrate and the chosen + prescaler. + """ + + def recv(self, recv: int | AnyWritableBuf, /, *, timeout: int = 5000) -> bytes: + """ + Receive data on the bus: + + - ``recv`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes. + - ``timeout`` is the timeout in milliseconds to wait for the receive. + + Return value: if ``recv`` is an integer then a new buffer of the bytes received, + otherwise the same buffer that was passed in to ``recv``. + """ + ... + + def send(self, send: int | AnyWritableBuf | bytes, /, *, timeout: int = 5000) -> None: + """ + Send data on the bus: + + - ``send`` is the data to send (an integer to send, or a buffer object). + - ``timeout`` is the timeout in milliseconds to wait for the send. + + Return value: ``None``. + """ + ... + + def send_recv( + self, + send: int | bytearray | array | bytes, + recv: AnyWritableBuf | None = None, + /, + *, + timeout: int = 5000, + ) -> bytes: + """ + Send and receive data on the bus at the same time: + + - ``send`` is the data to send (an integer to send, or a buffer object). + - ``recv`` is a mutable buffer which will be filled with received bytes. + It can be the same as ``send``, or omitted. If omitted, a new buffer will + be created. + - ``timeout`` is the timeout in milliseconds to wait for the receive. + + Return value: the buffer with the received bytes. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Servo.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Servo.pyi new file mode 100644 index 00000000..03158aac --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Servo.pyi @@ -0,0 +1,193 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import Any, overload + +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class Servo: + """ + Servo objects control standard hobby servo motors with 3-wires (ground, power, + signal). There are 4 positions on the pyboard where these motors can be plugged + in: pins X1 through X4 are the signal pins, and next to them are 4 sets of power + and ground pins. + + Example usage:: + + import pyb + + s1 = pyb.Servo(1) # create a servo object on position X1 + s2 = pyb.Servo(2) # create a servo object on position X2 + + s1.angle(45) # move servo 1 to 45 degrees + s2.angle(0) # move servo 2 to 0 degrees + + # move servo1 and servo2 synchronously, taking 1500ms + s1.angle(-60, 1500) + s2.angle(30, 1500) + + .. note:: The Servo objects use Timer(5) to produce the PWM output. You can + use Timer(5) for Servo control, or your own purposes, but not both at the + same time. + """ + + def __init__(self, id: int, /) -> None: + """ + Create a servo object. ``id`` is 1-4, and corresponds to pins X1 through X4. + """ + + @overload + def angle(self) -> int: + """ + If no arguments are given, this function returns the current angle. + + If arguments are given, this function sets the angle of the servo: + + - ``angle`` is the angle to move to in degrees. + - ``time`` is the number of milliseconds to take to get to the specified + angle. If omitted, then the servo moves as quickly as possible to its + new position. + """ + + @overload + def angle(self, angle: int, time: int = 0, /) -> None: + """ + If no arguments are given, this function returns the current angle. + + If arguments are given, this function sets the angle of the servo: + + - ``angle`` is the angle to move to in degrees. + - ``time`` is the number of milliseconds to take to get to the specified + angle. If omitted, then the servo moves as quickly as possible to its + new position. + """ + + @overload + def speed(self) -> int: + """ + If no arguments are given, this function returns the current speed. + + If arguments are given, this function sets the speed of the servo: + + - ``speed`` is the speed to change to, between -100 and 100. + - ``time`` is the number of milliseconds to take to get to the specified + speed. If omitted, then the servo accelerates as quickly as possible. + """ + + @overload + def speed(self, speed: int, time: int = 0, /) -> None: + """ + If no arguments are given, this function returns the current speed. + + If arguments are given, this function sets the speed of the servo: + + - ``speed`` is the speed to change to, between -100 and 100. + - ``time`` is the number of milliseconds to take to get to the specified + speed. If omitted, then the servo accelerates as quickly as possible. + """ + + @overload + def speed(self) -> int: + """ + If no arguments are given, this function returns the current speed. + + If arguments are given, this function sets the speed of the servo: + + - ``speed`` is the speed to change to, between -100 and 100. + - ``time`` is the number of milliseconds to take to get to the specified + speed. If omitted, then the servo accelerates as quickly as possible. + """ + + @overload + def speed(self, value: int, /) -> None: + """ + If no arguments are given, this function returns the current speed. + + If arguments are given, this function sets the speed of the servo: + + - ``speed`` is the speed to change to, between -100 and 100. + - ``time`` is the number of milliseconds to take to get to the specified + speed. If omitted, then the servo accelerates as quickly as possible. + """ + + def pulse_width(self, value: Any | None = None) -> Incomplete: + """ + If no arguments are given, this function returns the current raw pulse-width + value. + + If an argument is given, this function sets the raw pulse-width value. + """ + ... + + @overload + def calibration(self) -> tuple[int, int, int, int, int]: + """ + If no arguments are given, this function returns the current calibration + data, as a 5-tuple. + + If arguments are given, this function sets the timing calibration: + + - ``pulse_min`` is the minimum allowed pulse width. + - ``pulse_max`` is the maximum allowed pulse width. + - ``pulse_centre`` is the pulse width corresponding to the centre/zero position. + - ``pulse_angle_90`` is the pulse width corresponding to 90 degrees. + - ``pulse_speed_100`` is the pulse width corresponding to a speed of 100. + """ + + @overload + def calibration(self, pulse_min: int, pulse_max: int, pulse_centre: int, /) -> None: + """ + If no arguments are given, this function returns the current calibration + data, as a 5-tuple. + + If arguments are given, this function sets the timing calibration: + + - ``pulse_min`` is the minimum allowed pulse width. + - ``pulse_max`` is the maximum allowed pulse width. + - ``pulse_centre`` is the pulse width corresponding to the centre/zero position. + - ``pulse_angle_90`` is the pulse width corresponding to 90 degrees. + - ``pulse_speed_100`` is the pulse width corresponding to a speed of 100. + """ + + @overload + def calibration( + self, + pulse_min: int, + pulse_max: int, + pulse_centre: int, + pulse_angle_90: int, + pulse_speed_100: int, + /, + ) -> None: + """ + If no arguments are given, this function returns the current calibration + data, as a 5-tuple. + + If arguments are given, this function sets the timing calibration: + + - ``pulse_min`` is the minimum allowed pulse width. + - ``pulse_max`` is the maximum allowed pulse width. + - ``pulse_centre`` is the pulse width corresponding to the centre/zero position. + - ``pulse_angle_90`` is the pulse width corresponding to 90 degrees. + - ``pulse_speed_100`` is the pulse width corresponding to a speed of 100. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Switch.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Switch.pyi new file mode 100644 index 00000000..8759c162 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Switch.pyi @@ -0,0 +1,70 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import Callable + +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +from .Pin import Pin + +class Switch: + """ + A Switch object is used to control a push-button switch. + + Usage:: + + sw = pyb.Switch() # create a switch object + sw.value() # get state (True if pressed, False otherwise) + sw() # shorthand notation to get the switch state + sw.callback(f) # register a callback to be called when the + # switch is pressed down + sw.callback(None) # remove the callback + + Example:: + + pyb.Switch().callback(lambda: pyb.LED(1).toggle()) + """ + + def __init__(self) -> None: + """ + Create and return a switch object. + """ + + def __call__(self) -> bool: + """ + Call switch object directly to get its state: ``True`` if pressed down, + ``False`` otherwise. + """ + ... + + def value(self) -> bool: + """ + Get the switch state. Returns ``True`` if pressed down, otherwise ``False``. + """ + ... + + def callback(self, fun: Callable[[], None] | None) -> None: + """ + Register the given function to be called when the switch is pressed down. + If ``fun`` is ``None``, then it disables the callback. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Timer.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Timer.pyi new file mode 100644 index 00000000..a0a6de13 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/Timer.pyi @@ -0,0 +1,1005 @@ +""" """ + +from __future__ import annotations + +from abc import ABC, abstractmethod +from array import array +from typing import Callable, overload + +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +from .Pin import Pin + +class Timer: + """ + Timers can be used for a great variety of tasks. At the moment, only + the simplest case is implemented: that of calling a function periodically. + + Each timer consists of a counter that counts up at a certain rate. The rate + at which it counts is the peripheral clock frequency (in Hz) divided by the + timer prescaler. When the counter reaches the timer period it triggers an + event, and the counter resets back to zero. By using the callback method, + the timer event can call a Python function. + + Example usage to toggle an LED at a fixed frequency:: + + tim = pyb.Timer(4) # create a timer object using timer 4 + tim.init(freq=2) # trigger at 2Hz + tim.callback(lambda t:pyb.LED(1).toggle()) + + Example using named function for the callback:: + + def tick(timer): # we will receive the timer object when being called + print(timer.counter()) # show current timer's counter value + tim = pyb.Timer(4, freq=1) # create a timer object using timer 4 - trigger at 1Hz + tim.callback(tick) # set the callback to our tick function + + Further examples:: + + tim = pyb.Timer(4, freq=100) # freq in Hz + tim = pyb.Timer(4, prescaler=0, period=99) + tim.counter() # get counter (can also set) + tim.prescaler(2) # set prescaler (can also get) + tim.period(199) # set period (can also get) + tim.callback(lambda t: ...) # set callback for update interrupt (t=tim instance) + tim.callback(None) # clear callback + + *Note:* Timer(2) and Timer(3) are used for PWM to set the intensity of LED(3) + and LED(4) respectively. But these timers are only configured for PWM if + the intensity of the relevant LED is set to a value between 1 and 254. If + the intensity feature of the LEDs is not used then these timers are free for + general purpose use. Similarly, Timer(5) controls the servo driver, and + Timer(6) is used for timed ADC/DAC reading/writing. It is recommended to + use the other timers in your programs. + + *Note:* Memory can't be allocated during a callback (an interrupt) and so + exceptions raised within a callback don't give much information. See + :func:`micropython.alloc_emergency_exception_buf` for how to get around this + limitation. + """ + + UP: int + """Configures the timer to count Up, Down, or from 0 to ARR and then back down to 0.""" + DOWN: int + """Configures the timer to count Up, Down, or from 0 to ARR and then back down to 0.""" + CENTER: int + """Configures the timer to count Up, Down, or from 0 to ARR and then back down to 0.""" + BRK_OFF: Incomplete + """Configures the break mode when passed to the ``brk`` keyword argument.""" + BRK_LOW: Incomplete + """Configures the break mode when passed to the ``brk`` keyword argument.""" + BRK_HIGH: Incomplete + """Configures the break mode when passed to the ``brk`` keyword argument.""" + @overload + def __init__(self, id: int, /): + """ + Construct a new timer object of the given id. If additional + arguments are given, then the timer is initialised by ``init(...)``. + ``id`` can be 1 to 14. + """ + + @overload + def __init__( + self, + id: int, + /, + *, + freq: int, + mode: int = UP, + div: int = 1, + callback: Callable[[Timer], None] | None = None, + deadtime: int = 0, + ): + """ + Construct a new timer object of the given id. If additional + arguments are given, then the timer is initialised by ``init(...)``. + ``id`` can be 1 to 14. + """ + + @overload + def __init__( + self, + id: int, + /, + *, + prescaler: int, + period: int, + mode: int = UP, + div: int = 1, + callback: Callable[[Timer], None] | None = None, + deadtime: int = 0, + ): + """ + Construct a new timer object of the given id. If additional + arguments are given, then the timer is initialised by ``init(...)``. + ``id`` can be 1 to 14. + """ + + @overload + def init( + self, + *, + freq: int, + mode: int = UP, + div: int = 1, + callback: Callable[[Timer], None] | None = None, + deadtime: int = 0, + ) -> None: + """ + Initialise the timer. Initialisation must be either by frequency (in Hz) + or by prescaler and period:: + + tim.init(freq=100) # set the timer to trigger at 100Hz + tim.init(prescaler=83, period=999) # set the prescaler and period directly + + Keyword arguments: + + - ``freq`` --- specifies the periodic frequency of the timer. You might also + view this as the frequency with which the timer goes through one complete cycle. + + - ``prescaler`` [0-0xffff] - specifies the value to be loaded into the + timer's Prescaler Register (PSC). The timer clock source is divided by + (``prescaler + 1``) to arrive at the timer clock. Timers 2-7 and 12-14 + have a clock source of 84 MHz (pyb.freq()[2] * 2), and Timers 1, and 8-11 + have a clock source of 168 MHz (pyb.freq()[3] * 2). + + - ``period`` [0-0xffff] for timers 1, 3, 4, and 6-15. [0-0x3fffffff] for timers 2 & 5. + Specifies the value to be loaded into the timer's AutoReload + Register (ARR). This determines the period of the timer (i.e. when the + counter cycles). The timer counter will roll-over after ``period + 1`` + timer clock cycles. + + - ``mode`` can be one of: + + - ``Timer.UP`` - configures the timer to count from 0 to ARR (default) + - ``Timer.DOWN`` - configures the timer to count from ARR down to 0. + - ``Timer.CENTER`` - configures the timer to count from 0 to ARR and + then back down to 0. + + - ``div`` can be one of 1, 2, or 4. Divides the timer clock to determine + the sampling clock used by the digital filters. + + - ``callback`` - as per Timer.callback() + + - ``deadtime`` - specifies the amount of "dead" or inactive time between + transitions on complimentary channels (both channels will be inactive) + for this time). ``deadtime`` may be an integer between 0 and 1008, with + the following restrictions: 0-128 in steps of 1. 128-256 in steps of + 2, 256-512 in steps of 8, and 512-1008 in steps of 16. ``deadtime`` + measures ticks of ``source_freq`` divided by ``div`` clock ticks. + ``deadtime`` is only available on timers 1 and 8. + + - ``brk`` - specifies if the break mode is used to kill the output of + the PWM when the ``BRK_IN`` input is asserted. The value of this + argument determines if break is enabled and what the polarity is, and + can be one of ``Timer.BRK_OFF``, ``Timer.BRK_LOW`` or + ``Timer.BRK_HIGH``. To select the ``BRK_IN`` pin construct a Pin object with + ``mode=Pin.ALT, alt=Pin.AFn_TIMx``. The pin's GPIO input features are + available in alt mode - ``pull=`` , ``value()`` and ``irq()``. + + You must either specify freq or both of period and prescaler. + """ + + @overload + def init( + self, + *, + prescaler: int, + period: int, + mode: int = UP, + div: int = 1, + callback: Callable[[Timer], None] | None = None, + deadtime: int = 0, + ) -> None: + """ + Initialise the timer. Initialisation must be either by frequency (in Hz) + or by prescaler and period:: + + tim.init(freq=100) # set the timer to trigger at 100Hz + tim.init(prescaler=83, period=999) # set the prescaler and period directly + + Keyword arguments: + + - ``freq`` --- specifies the periodic frequency of the timer. You might also + view this as the frequency with which the timer goes through one complete cycle. + + - ``prescaler`` [0-0xffff] - specifies the value to be loaded into the + timer's Prescaler Register (PSC). The timer clock source is divided by + (``prescaler + 1``) to arrive at the timer clock. Timers 2-7 and 12-14 + have a clock source of 84 MHz (pyb.freq()[2] * 2), and Timers 1, and 8-11 + have a clock source of 168 MHz (pyb.freq()[3] * 2). + + - ``period`` [0-0xffff] for timers 1, 3, 4, and 6-15. [0-0x3fffffff] for timers 2 & 5. + Specifies the value to be loaded into the timer's AutoReload + Register (ARR). This determines the period of the timer (i.e. when the + counter cycles). The timer counter will roll-over after ``period + 1`` + timer clock cycles. + + - ``mode`` can be one of: + + - ``Timer.UP`` - configures the timer to count from 0 to ARR (default) + - ``Timer.DOWN`` - configures the timer to count from ARR down to 0. + - ``Timer.CENTER`` - configures the timer to count from 0 to ARR and + then back down to 0. + + - ``div`` can be one of 1, 2, or 4. Divides the timer clock to determine + the sampling clock used by the digital filters. + + - ``callback`` - as per Timer.callback() + + - ``deadtime`` - specifies the amount of "dead" or inactive time between + transitions on complimentary channels (both channels will be inactive) + for this time). ``deadtime`` may be an integer between 0 and 1008, with + the following restrictions: 0-128 in steps of 1. 128-256 in steps of + 2, 256-512 in steps of 8, and 512-1008 in steps of 16. ``deadtime`` + measures ticks of ``source_freq`` divided by ``div`` clock ticks. + ``deadtime`` is only available on timers 1 and 8. + + - ``brk`` - specifies if the break mode is used to kill the output of + the PWM when the ``BRK_IN`` input is asserted. The value of this + argument determines if break is enabled and what the polarity is, and + can be one of ``Timer.BRK_OFF``, ``Timer.BRK_LOW`` or + ``Timer.BRK_HIGH``. To select the ``BRK_IN`` pin construct a Pin object with + ``mode=Pin.ALT, alt=Pin.AFn_TIMx``. The pin's GPIO input features are + available in alt mode - ``pull=`` , ``value()`` and ``irq()``. + + You must either specify freq or both of period and prescaler. + """ + + def deinit(self) -> None: + """ + Deinitialises the timer. + + Disables the callback (and the associated irq). + + Disables any channel callbacks (and the associated irq). + Stops the timer, and disables the timer peripheral. + """ + ... + + def callback(self, fun: Callable[[Timer], None] | None, /) -> None: + """ + Set the function to be called when the timer triggers. + ``fun`` is passed 1 argument, the timer object. + If ``fun`` is ``None`` then the callback will be disabled. + """ + ... + + @overload + def channel(self, channel: int, /) -> timerchannel | None: + """ + If only a channel number is passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + Each channel can be configured to perform pwm, output compare, or + input capture. All channels share the same underlying timer, which means + that they share the same timer clock. + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.PWM`` --- configure the timer in PWM mode (active high). + - ``Timer.PWM_INVERTED`` --- configure the timer in PWM mode (active low). + - ``Timer.OC_TIMING`` --- indicates that no pin is driven. + - ``Timer.OC_ACTIVE`` --- the pin will be made active when a compare match occurs (active is determined by polarity) + - ``Timer.OC_INACTIVE`` --- the pin will be made inactive when a compare match occurs. + - ``Timer.OC_TOGGLE`` --- the pin will be toggled when an compare match occurs. + - ``Timer.OC_FORCED_ACTIVE`` --- the pin is forced active (compare match is ignored). + - ``Timer.OC_FORCED_INACTIVE`` --- the pin is forced inactive (compare match is ignored). + - ``Timer.IC`` --- configure the timer in Input Capture mode. + - ``Timer.ENC_A`` --- configure the timer in Encoder mode. The counter only changes when CH1 changes. + - ``Timer.ENC_B`` --- configure the timer in Encoder mode. The counter only changes when CH2 changes. + - ``Timer.ENC_AB`` --- configure the timer in Encoder mode. The counter changes when CH1 or CH2 changes. + + - ``callback`` - as per TimerChannel.callback() + + - ``pin`` None (the default) or a Pin object. If specified (and not None) + this will cause the alternate function of the the indicated pin + to be configured for this timer channel. An error will be raised if + the pin doesn't support any alternate functions for this timer channel. + + Keyword arguments for Timer.PWM modes: + + - ``pulse_width`` - determines the initial pulse width value to use. + - ``pulse_width_percent`` - determines the initial pulse width percentage to use. + + Keyword arguments for Timer.OC modes: + + - ``compare`` - determines the initial value of the compare register. + + - ``polarity`` can be one of: + + - ``Timer.HIGH`` - output is active high + - ``Timer.LOW`` - output is active low + + Optional keyword arguments for Timer.IC modes: + + - ``polarity`` can be one of: + + - ``Timer.RISING`` - captures on rising edge. + - ``Timer.FALLING`` - captures on falling edge. + - ``Timer.BOTH`` - captures on both edges. + + Note that capture only works on the primary channel, and not on the + complimentary channels. + + Notes for Timer.ENC modes: + + - Requires 2 pins, so one or both pins will need to be configured to use + the appropriate timer AF using the Pin API. + - Read the encoder value using the timer.counter() method. + - Only works on CH1 and CH2 (and not on CH1N or CH2N) + - The channel number is ignored when setting the encoder mode. + + PWM Example:: + + timer = pyb.Timer(2, freq=1000) + ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) + ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) + + PWM Motor Example with complementary outputs, dead time, break input and break callback:: + + from pyb import Timer + from machine import Pin # machine.Pin supports alt mode and irq on the same pin. + pin_t8_1 = Pin(Pin.board.Y1, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PC6, TIM8_CH1 + pin_t8_1n = Pin(Pin.board.X8, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA7, TIM8_CH1N + pin_bkin = Pin(Pin.board.X7, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA6, TIM8_BKIN + pin_bkin.irq(handler=break_callabck, trigger=Pin.IRQ_FALLING) + timer = pyb.Timer(8, freq=1000, deadtime=1008, brk=Timer.BRK_LOW) + ch1 = timer.channel(1, pyb.Timer.PWM, pulse_width_percent=30) + """ + + @overload + def channel( + self, + channel: int, + /, + mode: int, + *, + callback: Callable[[Timer], None] | None = None, + pin: Pin | None = None, + pulse_width: int, + ) -> timerchannel: + """ + If only a channel number is passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + Each channel can be configured to perform pwm, output compare, or + input capture. All channels share the same underlying timer, which means + that they share the same timer clock. + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.PWM`` --- configure the timer in PWM mode (active high). + - ``Timer.PWM_INVERTED`` --- configure the timer in PWM mode (active low). + - ``Timer.OC_TIMING`` --- indicates that no pin is driven. + - ``Timer.OC_ACTIVE`` --- the pin will be made active when a compare match occurs (active is determined by polarity) + - ``Timer.OC_INACTIVE`` --- the pin will be made inactive when a compare match occurs. + - ``Timer.OC_TOGGLE`` --- the pin will be toggled when an compare match occurs. + - ``Timer.OC_FORCED_ACTIVE`` --- the pin is forced active (compare match is ignored). + - ``Timer.OC_FORCED_INACTIVE`` --- the pin is forced inactive (compare match is ignored). + - ``Timer.IC`` --- configure the timer in Input Capture mode. + - ``Timer.ENC_A`` --- configure the timer in Encoder mode. The counter only changes when CH1 changes. + - ``Timer.ENC_B`` --- configure the timer in Encoder mode. The counter only changes when CH2 changes. + - ``Timer.ENC_AB`` --- configure the timer in Encoder mode. The counter changes when CH1 or CH2 changes. + + - ``callback`` - as per TimerChannel.callback() + + - ``pin`` None (the default) or a Pin object. If specified (and not None) + this will cause the alternate function of the the indicated pin + to be configured for this timer channel. An error will be raised if + the pin doesn't support any alternate functions for this timer channel. + + Keyword arguments for Timer.PWM modes: + + - ``pulse_width`` - determines the initial pulse width value to use. + - ``pulse_width_percent`` - determines the initial pulse width percentage to use. + + Keyword arguments for Timer.OC modes: + + - ``compare`` - determines the initial value of the compare register. + + - ``polarity`` can be one of: + + - ``Timer.HIGH`` - output is active high + - ``Timer.LOW`` - output is active low + + Optional keyword arguments for Timer.IC modes: + + - ``polarity`` can be one of: + + - ``Timer.RISING`` - captures on rising edge. + - ``Timer.FALLING`` - captures on falling edge. + - ``Timer.BOTH`` - captures on both edges. + + Note that capture only works on the primary channel, and not on the + complimentary channels. + + Notes for Timer.ENC modes: + + - Requires 2 pins, so one or both pins will need to be configured to use + the appropriate timer AF using the Pin API. + - Read the encoder value using the timer.counter() method. + - Only works on CH1 and CH2 (and not on CH1N or CH2N) + - The channel number is ignored when setting the encoder mode. + + PWM Example:: + + timer = pyb.Timer(2, freq=1000) + ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) + ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) + + PWM Motor Example with complementary outputs, dead time, break input and break callback:: + + from pyb import Timer + from machine import Pin # machine.Pin supports alt mode and irq on the same pin. + pin_t8_1 = Pin(Pin.board.Y1, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PC6, TIM8_CH1 + pin_t8_1n = Pin(Pin.board.X8, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA7, TIM8_CH1N + pin_bkin = Pin(Pin.board.X7, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA6, TIM8_BKIN + pin_bkin.irq(handler=break_callabck, trigger=Pin.IRQ_FALLING) + timer = pyb.Timer(8, freq=1000, deadtime=1008, brk=Timer.BRK_LOW) + ch1 = timer.channel(1, pyb.Timer.PWM, pulse_width_percent=30) + """ + + @overload + def channel( + self, + channel: int, + /, + mode: int, + *, + callback: Callable[[Timer], None] | None = None, + pin: Pin | None = None, + pulse_width_percent: int | float, + ) -> timerchannel: + """ + If only a channel number is passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + Each channel can be configured to perform pwm, output compare, or + input capture. All channels share the same underlying timer, which means + that they share the same timer clock. + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.PWM`` --- configure the timer in PWM mode (active high). + - ``Timer.PWM_INVERTED`` --- configure the timer in PWM mode (active low). + - ``Timer.OC_TIMING`` --- indicates that no pin is driven. + - ``Timer.OC_ACTIVE`` --- the pin will be made active when a compare match occurs (active is determined by polarity) + - ``Timer.OC_INACTIVE`` --- the pin will be made inactive when a compare match occurs. + - ``Timer.OC_TOGGLE`` --- the pin will be toggled when an compare match occurs. + - ``Timer.OC_FORCED_ACTIVE`` --- the pin is forced active (compare match is ignored). + - ``Timer.OC_FORCED_INACTIVE`` --- the pin is forced inactive (compare match is ignored). + - ``Timer.IC`` --- configure the timer in Input Capture mode. + - ``Timer.ENC_A`` --- configure the timer in Encoder mode. The counter only changes when CH1 changes. + - ``Timer.ENC_B`` --- configure the timer in Encoder mode. The counter only changes when CH2 changes. + - ``Timer.ENC_AB`` --- configure the timer in Encoder mode. The counter changes when CH1 or CH2 changes. + + - ``callback`` - as per TimerChannel.callback() + + - ``pin`` None (the default) or a Pin object. If specified (and not None) + this will cause the alternate function of the the indicated pin + to be configured for this timer channel. An error will be raised if + the pin doesn't support any alternate functions for this timer channel. + + Keyword arguments for Timer.PWM modes: + + - ``pulse_width`` - determines the initial pulse width value to use. + - ``pulse_width_percent`` - determines the initial pulse width percentage to use. + + Keyword arguments for Timer.OC modes: + + - ``compare`` - determines the initial value of the compare register. + + - ``polarity`` can be one of: + + - ``Timer.HIGH`` - output is active high + - ``Timer.LOW`` - output is active low + + Optional keyword arguments for Timer.IC modes: + + - ``polarity`` can be one of: + + - ``Timer.RISING`` - captures on rising edge. + - ``Timer.FALLING`` - captures on falling edge. + - ``Timer.BOTH`` - captures on both edges. + + Note that capture only works on the primary channel, and not on the + complimentary channels. + + Notes for Timer.ENC modes: + + - Requires 2 pins, so one or both pins will need to be configured to use + the appropriate timer AF using the Pin API. + - Read the encoder value using the timer.counter() method. + - Only works on CH1 and CH2 (and not on CH1N or CH2N) + - The channel number is ignored when setting the encoder mode. + + PWM Example:: + + timer = pyb.Timer(2, freq=1000) + ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) + ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) + + PWM Motor Example with complementary outputs, dead time, break input and break callback:: + + from pyb import Timer + from machine import Pin # machine.Pin supports alt mode and irq on the same pin. + pin_t8_1 = Pin(Pin.board.Y1, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PC6, TIM8_CH1 + pin_t8_1n = Pin(Pin.board.X8, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA7, TIM8_CH1N + pin_bkin = Pin(Pin.board.X7, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA6, TIM8_BKIN + pin_bkin.irq(handler=break_callabck, trigger=Pin.IRQ_FALLING) + timer = pyb.Timer(8, freq=1000, deadtime=1008, brk=Timer.BRK_LOW) + ch1 = timer.channel(1, pyb.Timer.PWM, pulse_width_percent=30) + """ + + @overload + def channel( + self, + channel: int, + /, + mode: int, + *, + callback: Callable[[Timer], None] | None = None, + pin: Pin | None = None, + compare: int, + polarity: int, + ) -> timerchannel: + """ + If only a channel number is passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + Each channel can be configured to perform pwm, output compare, or + input capture. All channels share the same underlying timer, which means + that they share the same timer clock. + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.PWM`` --- configure the timer in PWM mode (active high). + - ``Timer.PWM_INVERTED`` --- configure the timer in PWM mode (active low). + - ``Timer.OC_TIMING`` --- indicates that no pin is driven. + - ``Timer.OC_ACTIVE`` --- the pin will be made active when a compare match occurs (active is determined by polarity) + - ``Timer.OC_INACTIVE`` --- the pin will be made inactive when a compare match occurs. + - ``Timer.OC_TOGGLE`` --- the pin will be toggled when an compare match occurs. + - ``Timer.OC_FORCED_ACTIVE`` --- the pin is forced active (compare match is ignored). + - ``Timer.OC_FORCED_INACTIVE`` --- the pin is forced inactive (compare match is ignored). + - ``Timer.IC`` --- configure the timer in Input Capture mode. + - ``Timer.ENC_A`` --- configure the timer in Encoder mode. The counter only changes when CH1 changes. + - ``Timer.ENC_B`` --- configure the timer in Encoder mode. The counter only changes when CH2 changes. + - ``Timer.ENC_AB`` --- configure the timer in Encoder mode. The counter changes when CH1 or CH2 changes. + + - ``callback`` - as per TimerChannel.callback() + + - ``pin`` None (the default) or a Pin object. If specified (and not None) + this will cause the alternate function of the the indicated pin + to be configured for this timer channel. An error will be raised if + the pin doesn't support any alternate functions for this timer channel. + + Keyword arguments for Timer.PWM modes: + + - ``pulse_width`` - determines the initial pulse width value to use. + - ``pulse_width_percent`` - determines the initial pulse width percentage to use. + + Keyword arguments for Timer.OC modes: + + - ``compare`` - determines the initial value of the compare register. + + - ``polarity`` can be one of: + + - ``Timer.HIGH`` - output is active high + - ``Timer.LOW`` - output is active low + + Optional keyword arguments for Timer.IC modes: + + - ``polarity`` can be one of: + + - ``Timer.RISING`` - captures on rising edge. + - ``Timer.FALLING`` - captures on falling edge. + - ``Timer.BOTH`` - captures on both edges. + + Note that capture only works on the primary channel, and not on the + complimentary channels. + + Notes for Timer.ENC modes: + + - Requires 2 pins, so one or both pins will need to be configured to use + the appropriate timer AF using the Pin API. + - Read the encoder value using the timer.counter() method. + - Only works on CH1 and CH2 (and not on CH1N or CH2N) + - The channel number is ignored when setting the encoder mode. + + PWM Example:: + + timer = pyb.Timer(2, freq=1000) + ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) + ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) + + PWM Motor Example with complementary outputs, dead time, break input and break callback:: + + from pyb import Timer + from machine import Pin # machine.Pin supports alt mode and irq on the same pin. + pin_t8_1 = Pin(Pin.board.Y1, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PC6, TIM8_CH1 + pin_t8_1n = Pin(Pin.board.X8, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA7, TIM8_CH1N + pin_bkin = Pin(Pin.board.X7, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA6, TIM8_BKIN + pin_bkin.irq(handler=break_callabck, trigger=Pin.IRQ_FALLING) + timer = pyb.Timer(8, freq=1000, deadtime=1008, brk=Timer.BRK_LOW) + ch1 = timer.channel(1, pyb.Timer.PWM, pulse_width_percent=30) + """ + + @overload + def channel( + self, + channel: int, + /, + mode: int, + *, + callback: Callable[[Timer], None] | None = None, + pin: Pin | None = None, + polarity: int, + ) -> timerchannel: + """ + If only a channel number is passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + Each channel can be configured to perform pwm, output compare, or + input capture. All channels share the same underlying timer, which means + that they share the same timer clock. + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.PWM`` --- configure the timer in PWM mode (active high). + - ``Timer.PWM_INVERTED`` --- configure the timer in PWM mode (active low). + - ``Timer.OC_TIMING`` --- indicates that no pin is driven. + - ``Timer.OC_ACTIVE`` --- the pin will be made active when a compare match occurs (active is determined by polarity) + - ``Timer.OC_INACTIVE`` --- the pin will be made inactive when a compare match occurs. + - ``Timer.OC_TOGGLE`` --- the pin will be toggled when an compare match occurs. + - ``Timer.OC_FORCED_ACTIVE`` --- the pin is forced active (compare match is ignored). + - ``Timer.OC_FORCED_INACTIVE`` --- the pin is forced inactive (compare match is ignored). + - ``Timer.IC`` --- configure the timer in Input Capture mode. + - ``Timer.ENC_A`` --- configure the timer in Encoder mode. The counter only changes when CH1 changes. + - ``Timer.ENC_B`` --- configure the timer in Encoder mode. The counter only changes when CH2 changes. + - ``Timer.ENC_AB`` --- configure the timer in Encoder mode. The counter changes when CH1 or CH2 changes. + + - ``callback`` - as per TimerChannel.callback() + + - ``pin`` None (the default) or a Pin object. If specified (and not None) + this will cause the alternate function of the the indicated pin + to be configured for this timer channel. An error will be raised if + the pin doesn't support any alternate functions for this timer channel. + + Keyword arguments for Timer.PWM modes: + + - ``pulse_width`` - determines the initial pulse width value to use. + - ``pulse_width_percent`` - determines the initial pulse width percentage to use. + + Keyword arguments for Timer.OC modes: + + - ``compare`` - determines the initial value of the compare register. + + - ``polarity`` can be one of: + + - ``Timer.HIGH`` - output is active high + - ``Timer.LOW`` - output is active low + + Optional keyword arguments for Timer.IC modes: + + - ``polarity`` can be one of: + + - ``Timer.RISING`` - captures on rising edge. + - ``Timer.FALLING`` - captures on falling edge. + - ``Timer.BOTH`` - captures on both edges. + + Note that capture only works on the primary channel, and not on the + complimentary channels. + + Notes for Timer.ENC modes: + + - Requires 2 pins, so one or both pins will need to be configured to use + the appropriate timer AF using the Pin API. + - Read the encoder value using the timer.counter() method. + - Only works on CH1 and CH2 (and not on CH1N or CH2N) + - The channel number is ignored when setting the encoder mode. + + PWM Example:: + + timer = pyb.Timer(2, freq=1000) + ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) + ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) + + PWM Motor Example with complementary outputs, dead time, break input and break callback:: + + from pyb import Timer + from machine import Pin # machine.Pin supports alt mode and irq on the same pin. + pin_t8_1 = Pin(Pin.board.Y1, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PC6, TIM8_CH1 + pin_t8_1n = Pin(Pin.board.X8, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA7, TIM8_CH1N + pin_bkin = Pin(Pin.board.X7, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA6, TIM8_BKIN + pin_bkin.irq(handler=break_callabck, trigger=Pin.IRQ_FALLING) + timer = pyb.Timer(8, freq=1000, deadtime=1008, brk=Timer.BRK_LOW) + ch1 = timer.channel(1, pyb.Timer.PWM, pulse_width_percent=30) + """ + + @overload + def channel( + self, + channel: int, + /, + mode: int, + *, + callback: Callable[[Timer], None] | None = None, + pin: Pin | None = None, + ) -> timerchannel: + """ + If only a channel number is passed, then a previously initialized channel + object is returned (or ``None`` if there is no previous channel). + + Otherwise, a TimerChannel object is initialized and returned. + + Each channel can be configured to perform pwm, output compare, or + input capture. All channels share the same underlying timer, which means + that they share the same timer clock. + + Keyword arguments: + + - ``mode`` can be one of: + + - ``Timer.PWM`` --- configure the timer in PWM mode (active high). + - ``Timer.PWM_INVERTED`` --- configure the timer in PWM mode (active low). + - ``Timer.OC_TIMING`` --- indicates that no pin is driven. + - ``Timer.OC_ACTIVE`` --- the pin will be made active when a compare match occurs (active is determined by polarity) + - ``Timer.OC_INACTIVE`` --- the pin will be made inactive when a compare match occurs. + - ``Timer.OC_TOGGLE`` --- the pin will be toggled when an compare match occurs. + - ``Timer.OC_FORCED_ACTIVE`` --- the pin is forced active (compare match is ignored). + - ``Timer.OC_FORCED_INACTIVE`` --- the pin is forced inactive (compare match is ignored). + - ``Timer.IC`` --- configure the timer in Input Capture mode. + - ``Timer.ENC_A`` --- configure the timer in Encoder mode. The counter only changes when CH1 changes. + - ``Timer.ENC_B`` --- configure the timer in Encoder mode. The counter only changes when CH2 changes. + - ``Timer.ENC_AB`` --- configure the timer in Encoder mode. The counter changes when CH1 or CH2 changes. + + - ``callback`` - as per TimerChannel.callback() + + - ``pin`` None (the default) or a Pin object. If specified (and not None) + this will cause the alternate function of the the indicated pin + to be configured for this timer channel. An error will be raised if + the pin doesn't support any alternate functions for this timer channel. + + Keyword arguments for Timer.PWM modes: + + - ``pulse_width`` - determines the initial pulse width value to use. + - ``pulse_width_percent`` - determines the initial pulse width percentage to use. + + Keyword arguments for Timer.OC modes: + + - ``compare`` - determines the initial value of the compare register. + + - ``polarity`` can be one of: + + - ``Timer.HIGH`` - output is active high + - ``Timer.LOW`` - output is active low + + Optional keyword arguments for Timer.IC modes: + + - ``polarity`` can be one of: + + - ``Timer.RISING`` - captures on rising edge. + - ``Timer.FALLING`` - captures on falling edge. + - ``Timer.BOTH`` - captures on both edges. + + Note that capture only works on the primary channel, and not on the + complimentary channels. + + Notes for Timer.ENC modes: + + - Requires 2 pins, so one or both pins will need to be configured to use + the appropriate timer AF using the Pin API. + - Read the encoder value using the timer.counter() method. + - Only works on CH1 and CH2 (and not on CH1N or CH2N) + - The channel number is ignored when setting the encoder mode. + + PWM Example:: + + timer = pyb.Timer(2, freq=1000) + ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) + ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) + + PWM Motor Example with complementary outputs, dead time, break input and break callback:: + + from pyb import Timer + from machine import Pin # machine.Pin supports alt mode and irq on the same pin. + pin_t8_1 = Pin(Pin.board.Y1, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PC6, TIM8_CH1 + pin_t8_1n = Pin(Pin.board.X8, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA7, TIM8_CH1N + pin_bkin = Pin(Pin.board.X7, mode=Pin.ALT, af=Pin.AF3_TIM8) # Pin PA6, TIM8_BKIN + pin_bkin.irq(handler=break_callabck, trigger=Pin.IRQ_FALLING) + timer = pyb.Timer(8, freq=1000, deadtime=1008, brk=Timer.BRK_LOW) + ch1 = timer.channel(1, pyb.Timer.PWM, pulse_width_percent=30) + """ + + @overload + def counter(self) -> int: + """ + Get or set the timer counter. + """ + + @overload + def counter(self, value: int, /) -> None: + """ + Get or set the timer counter. + """ + + @overload + def freq(self) -> int: + """ + Get or set the frequency for the timer (changes prescaler and period if set). + """ + + @overload + def freq(self, value: int, /) -> None: + """ + Get or set the frequency for the timer (changes prescaler and period if set). + """ + + @overload + def period(self) -> int: + """ + Get or set the period of the timer. + """ + + @overload + def period(self, value: int, /) -> None: + """ + Get or set the period of the timer. + """ + + @overload + def prescaler(self) -> int: + """ + Get or set the prescaler for the timer. + """ + + @overload + def prescaler(self, value: int, /) -> None: + """ + Get or set the prescaler for the timer. + """ + + def source_freq(self) -> int: + """ + Get the frequency of the source of the timer. + """ + ... + +class timerchannel(ABC): + """ + Timer channels are used to generate/capture a signal using a timer. + + + + TimerChannel objects are created using the Timer.channel() method. + """ + + @abstractmethod + def callback(self, fun: Callable[[Timer], None] | None, /) -> None: + """ + Set the function to be called when the timer channel triggers. + ``fun`` is passed 1 argument, the timer object. + If ``fun`` is ``None`` then the callback will be disabled. + """ + ... + + @overload + @abstractmethod + def capture(self) -> int: + """ + Get or set the capture value associated with a channel. + capture, compare, and pulse_width are all aliases for the same function. + capture is the logical name to use when the channel is in input capture mode. + """ + + @overload + @abstractmethod + def capture(self, value: int, /) -> None: + """ + Get or set the capture value associated with a channel. + capture, compare, and pulse_width are all aliases for the same function. + capture is the logical name to use when the channel is in input capture mode. + """ + + @overload + @abstractmethod + def compare(self) -> int: + """ + Get or set the compare value associated with a channel. + capture, compare, and pulse_width are all aliases for the same function. + compare is the logical name to use when the channel is in output compare mode. + """ + + @overload + @abstractmethod + def compare(self, value: int, /) -> None: + """ + Get or set the compare value associated with a channel. + capture, compare, and pulse_width are all aliases for the same function. + compare is the logical name to use when the channel is in output compare mode. + """ + + @overload + @abstractmethod + def pulse_width(self) -> int: + """ + Get or set the pulse width value associated with a channel. + capture, compare, and pulse_width are all aliases for the same function. + pulse_width is the logical name to use when the channel is in PWM mode. + + In edge aligned mode, a pulse_width of ``period + 1`` corresponds to a duty cycle of 100% + In center aligned mode, a pulse width of ``period`` corresponds to a duty cycle of 100% + """ + + @overload + @abstractmethod + def pulse_width(self, value: int, /) -> None: + """ + Get or set the pulse width value associated with a channel. + capture, compare, and pulse_width are all aliases for the same function. + pulse_width is the logical name to use when the channel is in PWM mode. + + In edge aligned mode, a pulse_width of ``period + 1`` corresponds to a duty cycle of 100% + In center aligned mode, a pulse width of ``period`` corresponds to a duty cycle of 100% + """ + + @overload + @abstractmethod + def pulse_width_percent(self) -> float: + """ + Get or set the pulse width percentage associated with a channel. The value + is a number between 0 and 100 and sets the percentage of the timer period + for which the pulse is active. The value can be an integer or + floating-point number for more accuracy. For example, a value of 25 gives + a duty cycle of 25%. + """ + + @overload + @abstractmethod + def pulse_width_percent(self, value: int | float, /) -> None: + """ + Get or set the pulse width percentage associated with a channel. The value + is a number between 0 and 100 and sets the percentage of the timer period + for which the pulse is active. The value can be an integer or + floating-point number for more accuracy. For example, a value of 25 gives + a duty cycle of 25%. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/UART.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/UART.pyi new file mode 100644 index 00000000..cbdc76e6 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/UART.pyi @@ -0,0 +1,309 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import overload + +from _mpy_shed import AnyWritableBuf +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class UART: + """ + UART implements the standard UART/USART duplex serial communications protocol. At + the physical level it consists of 2 lines: RX and TX. The unit of communication + is a character (not to be confused with a string character) which can be 8 or 9 + bits wide. + + UART objects can be created and initialised using:: + + from pyb import UART + + uart = UART(1, 9600) # init with given baudrate + uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters + + Bits can be 7, 8 or 9. Parity can be None, 0 (even) or 1 (odd). Stop can be 1 or 2. + + *Note:* with parity=None, only 8 and 9 bits are supported. With parity enabled, + only 7 and 8 bits are supported. + + A UART object acts like a `stream` object and reading and writing is done + using the standard stream methods:: + + uart.read(10) # read 10 characters, returns a bytes object + uart.read() # read all available characters + uart.readline() # read a line + uart.readinto(buf) # read and store into the given buffer + uart.write('abc') # write the 3 characters + + Individual characters can be read/written using:: + + uart.readchar() # read 1 character and returns it as an integer + uart.writechar(42) # write 1 character + + To check if there is anything to be read, use:: + + uart.any() # returns the number of characters waiting + + + *Note:* The stream functions ``read``, ``write``, etc. are new in MicroPython v1.3.4. + Earlier versions use ``uart.send`` and ``uart.recv``. + """ + + RTS: Incomplete + """to select the flow control type.""" + CTS: Incomplete + """to select the flow control type.""" + @overload + def __init__(self, bus: int | str, /): + """ + Construct a UART object on the given bus. + For Pyboard ``bus`` can be 1-4, 6, 'XA', 'XB', 'YA', or 'YB'. + For Pyboard Lite ``bus`` can be 1, 2, 6, 'XB', or 'YA'. + For Pyboard D ``bus`` can be 1-4, 'XA', 'YA' or 'YB'. + With no additional parameters, the UART object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + + The physical pins of the UART buses on Pyboard are: + + - ``UART(4)`` is on ``XA``: ``(TX, RX) = (X1, X2) = (PA0, PA1)`` + - ``UART(1)`` is on ``XB``: ``(TX, RX) = (X9, X10) = (PB6, PB7)`` + - ``UART(6)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PC6, PC7)`` + - ``UART(3)`` is on ``YB``: ``(TX, RX) = (Y9, Y10) = (PB10, PB11)`` + - ``UART(2)`` is on: ``(TX, RX) = (X3, X4) = (PA2, PA3)`` + + The Pyboard Lite supports UART(1), UART(2) and UART(6) only, pins are: + + - ``UART(1)`` is on ``XB``: ``(TX, RX) = (X9, X10) = (PB6, PB7)`` + - ``UART(6)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PC6, PC7)`` + - ``UART(2)`` is on: ``(TX, RX) = (X1, X2) = (PA2, PA3)`` + + The Pyboard D supports UART(1), UART(2), UART(3) and UART(4) only, pins are: + + - ``UART(4)`` is on ``XA``: ``(TX, RX) = (X1, X2) = (PA0, PA1)`` + - ``UART(1)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PA9, PA10)`` + - ``UART(3)`` is on ``YB``: ``(TX, RX) = (Y9, Y10) = (PB10, PB11)`` + - ``UART(2)`` is on: ``(TX, RX) = (X3, X4) = (PA2, PA3)`` + + *Note:* Pyboard D has ``UART(1)`` on ``YA``, unlike Pyboard and Pyboard Lite that both + have ``UART(1)`` on ``XB`` and ``UART(6)`` on ``YA``. + """ + + @overload + def __init__( + self, + bus: int | str, + baudrate: int, + /, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + *, + timeout: int = 0, + flow: int = 0, + timeout_char: int = 0, + read_buf_len: int = 64, + ): + """ + Construct a UART object on the given bus. + For Pyboard ``bus`` can be 1-4, 6, 'XA', 'XB', 'YA', or 'YB'. + For Pyboard Lite ``bus`` can be 1, 2, 6, 'XB', or 'YA'. + For Pyboard D ``bus`` can be 1-4, 'XA', 'YA' or 'YB'. + With no additional parameters, the UART object is created but not + initialised (it has the settings from the last initialisation of + the bus, if any). If extra arguments are given, the bus is initialised. + See ``init`` for parameters of initialisation. + + The physical pins of the UART buses on Pyboard are: + + - ``UART(4)`` is on ``XA``: ``(TX, RX) = (X1, X2) = (PA0, PA1)`` + - ``UART(1)`` is on ``XB``: ``(TX, RX) = (X9, X10) = (PB6, PB7)`` + - ``UART(6)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PC6, PC7)`` + - ``UART(3)`` is on ``YB``: ``(TX, RX) = (Y9, Y10) = (PB10, PB11)`` + - ``UART(2)`` is on: ``(TX, RX) = (X3, X4) = (PA2, PA3)`` + + The Pyboard Lite supports UART(1), UART(2) and UART(6) only, pins are: + + - ``UART(1)`` is on ``XB``: ``(TX, RX) = (X9, X10) = (PB6, PB7)`` + - ``UART(6)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PC6, PC7)`` + - ``UART(2)`` is on: ``(TX, RX) = (X1, X2) = (PA2, PA3)`` + + The Pyboard D supports UART(1), UART(2), UART(3) and UART(4) only, pins are: + + - ``UART(4)`` is on ``XA``: ``(TX, RX) = (X1, X2) = (PA0, PA1)`` + - ``UART(1)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PA9, PA10)`` + - ``UART(3)`` is on ``YB``: ``(TX, RX) = (Y9, Y10) = (PB10, PB11)`` + - ``UART(2)`` is on: ``(TX, RX) = (X3, X4) = (PA2, PA3)`` + + *Note:* Pyboard D has ``UART(1)`` on ``YA``, unlike Pyboard and Pyboard Lite that both + have ``UART(1)`` on ``XB`` and ``UART(6)`` on ``YA``. + """ + + def init( + self, + baudrate: int, + /, + bits: int = 8, + parity: int | None = None, + stop: int = 1, + *, + timeout: int = 0, + flow: int = 0, + timeout_char: int = 0, + read_buf_len: int = 64, + ): + """ + Initialise the UART bus with the given parameters: + + - ``baudrate`` is the clock rate. + - ``bits`` is the number of bits per character, 7, 8 or 9. + - ``parity`` is the parity, ``None``, 0 (even) or 1 (odd). + - ``stop`` is the number of stop bits, 1 or 2. + - ``flow`` sets the flow control type. Can be 0, ``UART.RTS``, ``UART.CTS`` + or ``UART.RTS | UART.CTS``. + - ``timeout`` is the timeout in milliseconds to wait for writing/reading the first character. + - ``timeout_char`` is the timeout in milliseconds to wait between characters while writing or reading. + - ``read_buf_len`` is the character length of the read buffer (0 to disable). + + This method will raise an exception if the baudrate could not be set within + 5% of the desired value. The minimum baudrate is dictated by the frequency + of the bus that the UART is on; UART(1) and UART(6) are APB2, the rest are on + APB1. The default bus frequencies give a minimum baudrate of 1300 for + UART(1) and UART(6) and 650 for the others. Use :func:`pyb.freq ` + to reduce the bus frequencies to get lower baudrates. + + *Note:* with parity=None, only 8 and 9 bits are supported. With parity enabled, + only 7 and 8 bits are supported. + """ + ... + + def deinit(self) -> None: + """ + Turn off the UART bus. + """ + ... + + def any(self) -> int: + """ + Returns the number of bytes waiting (may be 0). + """ + ... + + @overload + def read(self) -> bytes | None: + """ + Read characters. If ``nbytes`` is specified then read at most that many bytes. + If ``nbytes`` are available in the buffer, returns immediately, otherwise returns + when sufficient characters arrive or the timeout elapses. + + If ``nbytes`` is not given then the method reads as much data as possible. It + returns after the timeout has elapsed. + + *Note:* for 9 bit characters each character takes two bytes, ``nbytes`` must + be even, and the number of characters is ``nbytes/2``. + + Return value: a bytes object containing the bytes read in. Returns ``None`` + on timeout. + """ + + @overload + def read(self, nbytes: int, /) -> bytes | None: + """ + Read characters. If ``nbytes`` is specified then read at most that many bytes. + If ``nbytes`` are available in the buffer, returns immediately, otherwise returns + when sufficient characters arrive or the timeout elapses. + + If ``nbytes`` is not given then the method reads as much data as possible. It + returns after the timeout has elapsed. + + *Note:* for 9 bit characters each character takes two bytes, ``nbytes`` must + be even, and the number of characters is ``nbytes/2``. + + Return value: a bytes object containing the bytes read in. Returns ``None`` + on timeout. + """ + + def readchar(self) -> int: + """ + Receive a single character on the bus. + + Return value: The character read, as an integer. Returns -1 on timeout. + """ + ... + + @overload + def readinto(self, buf: AnyWritableBuf, /) -> int | None: + """ + Read bytes into the ``buf``. If ``nbytes`` is specified then read at most + that many bytes. Otherwise, read at most ``len(buf)`` bytes. + + Return value: number of bytes read and stored into ``buf`` or ``None`` on + timeout. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, nbytes: int, /) -> int | None: + """ + Read bytes into the ``buf``. If ``nbytes`` is specified then read at most + that many bytes. Otherwise, read at most ``len(buf)`` bytes. + + Return value: number of bytes read and stored into ``buf`` or ``None`` on + timeout. + """ + + def readline(self) -> None: + """ + Read a line, ending in a newline character. If such a line exists, return is + immediate. If the timeout elapses, all available data is returned regardless + of whether a newline exists. + + Return value: the line read or ``None`` on timeout if no data is available. + """ + ... + + def write(self, buf: AnyWritableBuf, /) -> int: + """ + Write the buffer of bytes to the bus. If characters are 7 or 8 bits wide + then each byte is one character. If characters are 9 bits wide then two + bytes are used for each character (little endian), and ``buf`` must contain + an even number of bytes. + + Return value: number of bytes written. If a timeout occurs and no bytes + were written returns ``None``. + """ + ... + + def writechar(self, char: int, /) -> None: + """ + Write a single character on the bus. ``char`` is an integer to write. + Return value: ``None``. See note below if CTS flow control is used. + """ + ... + + def sendbreak(self) -> None: + """ + Send a break condition on the bus. This drives the bus low for a duration + of 13 bits. + Return value: ``None``. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_HID.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_HID.pyi new file mode 100644 index 00000000..2ce988f1 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_HID.pyi @@ -0,0 +1,76 @@ +""" """ + +from __future__ import annotations + +from array import array +from collections.abc import Sequence +from typing import overload + +from _mpy_shed import AnyWritableBuf +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class USB_HID: + """ + The USB_HID class allows creation of an object representing the USB + Human Interface Device (HID) interface. It can be used to emulate + a peripheral such as a mouse or keyboard. + + Before you can use this class, you need to use :meth:`pyb.usb_mode()` to set the USB mode to include the HID interface. + """ + + def __init__(self) -> None: + """ + Create a new USB_HID object. + """ + + @overload + def recv(self, data: int, /, *, timeout: int = 5000) -> bytes: + """ + Receive data on the bus: + + - ``data`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes. + - ``timeout`` is the timeout in milliseconds to wait for the receive. + + Return value: if ``data`` is an integer then a new buffer of the bytes received, + otherwise the number of bytes read into ``data`` is returned. + """ + + @overload + def recv(self, data: AnyWritableBuf, /, *, timeout: int = 5000) -> int: + """ + Receive data on the bus: + + - ``data`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes. + - ``timeout`` is the timeout in milliseconds to wait for the receive. + + Return value: if ``data`` is an integer then a new buffer of the bytes received, + otherwise the number of bytes read into ``data`` is returned. + """ + + def send(self, data: Sequence[int]) -> None: + """ + Send data over the USB HID interface: + + - ``data`` is the data to send (a tuple/list of integers, or a + bytearray). + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_VCP.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_VCP.pyi new file mode 100644 index 00000000..85bb45f9 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/USB_VCP.pyi @@ -0,0 +1,206 @@ +""" """ + +from __future__ import annotations + +from array import array +from typing import List, overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +class USB_VCP: + """ + The USB_VCP class allows creation of a `stream`-like object representing the USB + virtual comm port. It can be used to read and write data over USB to + the connected host. + """ + + RTS: Incomplete + """to select the flow control type.""" + CTS: Incomplete + """to select the flow control type.""" + IRQ_RX: Incomplete + """IRQ trigger values for :meth:`USB_VCP.irq`.""" + def __init__(self, id: int = 0, /) -> None: + """ + Create a new USB_VCP object. The *id* argument specifies which USB VCP port to + use. + """ + + def init(self, *, flow: int = -1) -> None: + """ + Configure the USB VCP port. If the *flow* argument is not -1 then the value sets + the flow control, which can be a bitwise-or of ``USB_VCP.RTS`` and ``USB_VCP.CTS``. + RTS is used to control read behaviour and CTS, to control write behaviour. + """ + ... + + def setinterrupt(self, chr: int, /) -> None: + """ + Set the character which interrupts running Python code. This is set + to 3 (CTRL-C) by default, and when a CTRL-C character is received over + the USB VCP port, a KeyboardInterrupt exception is raised. + + Set to -1 to disable this interrupt feature. This is useful when you + want to send raw bytes over the USB VCP port. + """ + ... + + def isconnected(self) -> bool: + """ + Return ``True`` if USB is connected as a serial device, else ``False``. + """ + ... + + def any(self) -> bool: + """ + Return ``True`` if any characters waiting, else ``False``. + """ + ... + + def close(self) -> None: + """ + This method does nothing. It exists so the USB_VCP object can act as + a file. + """ + ... + + @overload + def read(self) -> bytes | None: + """ + Read at most ``nbytes`` from the serial device and return them as a + bytes object. If ``nbytes`` is not specified then the method reads + all available bytes from the serial device. + USB_VCP `stream` implicitly works in non-blocking mode, + so if no pending data available, this method will return immediately + with ``None`` value. + """ + + @overload + def read(self, nbytes, /) -> bytes | None: + """ + Read at most ``nbytes`` from the serial device and return them as a + bytes object. If ``nbytes`` is not specified then the method reads + all available bytes from the serial device. + USB_VCP `stream` implicitly works in non-blocking mode, + so if no pending data available, this method will return immediately + with ``None`` value. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, /) -> int | None: + """ + Read bytes from the serial device and store them into ``buf``, which + should be a buffer-like object. At most ``len(buf)`` bytes are read. + If ``maxlen`` is given and then at most ``min(maxlen, len(buf))`` bytes + are read. + + Returns the number of bytes read and stored into ``buf`` or ``None`` + if no pending data available. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, maxlen: int, /) -> int | None: + """ + Read bytes from the serial device and store them into ``buf``, which + should be a buffer-like object. At most ``len(buf)`` bytes are read. + If ``maxlen`` is given and then at most ``min(maxlen, len(buf))`` bytes + are read. + + Returns the number of bytes read and stored into ``buf`` or ``None`` + if no pending data available. + """ + + def readline(self) -> bytes: + """ + Read a whole line from the serial device. + + Returns a bytes object containing the data, including the trailing + newline character or ``None`` if no pending data available. + """ + ... + + def readlines(self) -> List: + """ + Read as much data as possible from the serial device, breaking it into + lines. + + Returns a list of bytes objects, each object being one of the lines. + Each line will include the newline character. + """ + ... + + def write(self, buf: AnyReadableBuf, /) -> int: + """ + Write the bytes from ``buf`` to the serial device. + + Returns the number of bytes written. + """ + ... + + @overload + def recv(self, data: int, /, *, timeout: int = 5000) -> bytes | None: + """ + Receive data on the bus: + + - ``data`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes. + - ``timeout`` is the timeout in milliseconds to wait for the receive. + + Return value: if ``data`` is an integer then a new buffer of the bytes received, + otherwise the number of bytes read into ``data`` is returned. + """ + + @overload + def recv(self, data: AnyWritableBuf, /, *, timeout: int = 5000) -> int | None: + """ + Receive data on the bus: + + - ``data`` can be an integer, which is the number of bytes to receive, + or a mutable buffer, which will be filled with received bytes. + - ``timeout`` is the timeout in milliseconds to wait for the receive. + + Return value: if ``data`` is an integer then a new buffer of the bytes received, + otherwise the number of bytes read into ``data`` is returned. + """ + + def send(self, buf: AnyWritableBuf | bytes | int, /, *, timeout: int = 5000) -> int: + """ + Send data over the USB VCP: + + - ``data`` is the data to send (an integer to send, or a buffer object). + - ``timeout`` is the timeout in milliseconds to wait for the send. + + Return value: number of bytes sent. + """ + ... + + def irq(self, handler=None, trigger=IRQ_RX, hard=False) -> None: + """ + Register *handler* to be called whenever an event specified by *trigger* + occurs. The *handler* function must take exactly one argument, which will + be the USB VCP object. Pass in ``None`` to disable the callback. + + Valid values for *trigger* are: + + - ``USB_VCP.IRQ_RX``: new data is available for reading from the USB VCP object. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/__init__.pyi new file mode 100644 index 00000000..6759cb31 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/pyb/__init__.pyi @@ -0,0 +1,810 @@ +""" +Functions related to the board. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/pyb.html + +The ``pyb`` module contains specific functions related to the board. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/pyb.rst +from __future__ import annotations + +from array import array +from collections.abc import Sequence +from typing import NoReturn, overload + +from _mpy_shed import AbstractBlockDev, HID_Tuple, _OldAbstractBlockDev, _OldAbstractReadOnlyBlockDev +from pyb.Accel import Accel +from pyb.ADC import ADC +from pyb.CAN import CAN +from pyb.DAC import DAC +from pyb.ExtInt import ExtInt +from pyb.Flash import Flash +from pyb.I2C import I2C +from pyb.LCD import LCD +from pyb.LED import LED +from pyb.Pin import Pin +from pyb.RTC import RTC +from pyb.Servo import Servo +from pyb.SPI import SPI +from pyb.Switch import Switch +from pyb.Timer import Timer +from pyb.UART import UART +from pyb.USB_HID import USB_HID +from pyb.USB_VCP import USB_VCP + +from .UART import UART + +hid_mouse: HID_Tuple +"""\ +A tuple of (subclass, protocol, max packet length, polling interval, report +descriptor) to set appropriate values for a USB mouse or keyboard. +""" +hid_keyboard: HID_Tuple +"""\ +A tuple of (subclass, protocol, max packet length, polling interval, report +descriptor) to set appropriate values for a USB mouse or keyboard. +""" + +def delay(ms: int, /) -> None: + """ + Delay for the given number of milliseconds. + """ + ... + +def udelay(us: int, /) -> None: + """ + Delay for the given number of microseconds. + """ + ... + +def millis() -> int: + """ + Returns the number of milliseconds since the board was last reset. + + The result is always a MicroPython smallint (31-bit signed number), so + after 2^30 milliseconds (about 12.4 days) this will start to return + negative numbers. + + Note that if :meth:`pyb.stop()` is issued the hardware counter supporting this + function will pause for the duration of the "sleeping" state. This + will affect the outcome of :meth:`pyb.elapsed_millis()`. + """ + ... + +def micros() -> int: + """ + Returns the number of microseconds since the board was last reset. + + The result is always a MicroPython smallint (31-bit signed number), so + after 2^30 microseconds (about 17.8 minutes) this will start to return + negative numbers. + + Note that if :meth:`pyb.stop()` is issued the hardware counter supporting this + function will pause for the duration of the "sleeping" state. This + will affect the outcome of :meth:`pyb.elapsed_micros()`. + """ + ... + +def elapsed_millis(start: int, /) -> int: + """ + Returns the number of milliseconds which have elapsed since ``start``. + + This function takes care of counter wrap, and always returns a positive + number. This means it can be used to measure periods up to about 12.4 days. + + Example:: + + start = pyb.millis() + while pyb.elapsed_millis(start) < 1000: + # Perform some operation + """ + ... + +def elapsed_micros(start: int, /) -> int: + """ + Returns the number of microseconds which have elapsed since ``start``. + + This function takes care of counter wrap, and always returns a positive + number. This means it can be used to measure periods up to about 17.8 minutes. + + Example:: + + start = pyb.micros() + while pyb.elapsed_micros(start) < 1000: + # Perform some operation + pass + """ + ... + +def hard_reset() -> NoReturn: + """ + Resets the pyboard in a manner similar to pushing the external RESET + button. + """ + ... + +def bootloader() -> None: + """ + Activate the bootloader without BOOT* pins. + """ + ... + +def fault_debug(value: bool = False) -> None: + """ + Enable or disable hard-fault debugging. A hard-fault is when there is a fatal + error in the underlying system, like an invalid memory access. + + If the *value* argument is ``False`` then the board will automatically reset if + there is a hard fault. + + If *value* is ``True`` then, when the board has a hard fault, it will print the + registers and the stack trace, and then cycle the LEDs indefinitely. + + The default value is disabled, i.e. to automatically reset. + """ + ... + +def disable_irq() -> bool: + """ + Disable interrupt requests. + Returns the previous IRQ state: ``False``/``True`` for disabled/enabled IRQs + respectively. This return value can be passed to enable_irq to restore + the IRQ to its original state. + """ + ... + +def enable_irq(state: bool = True, /) -> None: + """ + Enable interrupt requests. + If ``state`` is ``True`` (the default value) then IRQs are enabled. + If ``state`` is ``False`` then IRQs are disabled. The most common use of + this function is to pass it the value returned by ``disable_irq`` to + exit a critical section. + """ + ... + +@overload +def freq() -> tuple[int, int, int, int]: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +@overload +def freq(self) -> int: + """ + Get or set the frequency for the timer (changes prescaler and period if set). + """ + +@overload +def freq(self, value: int, /) -> None: + """ + Get or set the frequency for the timer (changes prescaler and period if set). + """ + +@overload +def freq(sysclk: int, /) -> None: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +@overload +def freq(sysclk: int, hclk: int, /) -> None: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +@overload +def freq(sysclk: int, hclk: int, pclk1: int, /) -> None: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +@overload +def freq(sysclk: int, hclk: int, pclk1: int, pclk2: int, /) -> None: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +@overload +def freq(self) -> int: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +@overload +def freq(self, value: int, /) -> None: + """ + If given no arguments, returns a tuple of clock frequencies: + (sysclk, hclk, pclk1, pclk2). + These correspond to: + + - sysclk: frequency of the CPU + - hclk: frequency of the AHB bus, core memory and DMA + - pclk1: frequency of the APB1 bus + - pclk2: frequency of the APB2 bus + + If given any arguments then the function sets the frequency of the CPU, + and the buses if additional arguments are given. Frequencies are given in + Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that + not all values are supported and the largest supported frequency not greater + than the given value will be selected. + + Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48, + 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. + + The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is + 84MHz. Be sure not to set frequencies above these values. + + The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency + using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8, + 16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2, + 4, 8. A prescaler will be chosen to best match the requested frequency. + + A sysclk frequency of + 8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI + (internal oscillator) directly. The higher frequencies use the HSE to + drive the PLL (phase locked loop), and then use the output of the PLL. + + Note that if you change the frequency while the USB is enabled then + the USB may become unreliable. It is best to change the frequency + in boot.py, before the USB peripheral is started. Also note that sysclk + frequencies below 36MHz do not allow the USB to function correctly. + """ + +def wfi() -> None: + """ + Wait for an internal or external interrupt. + + This executes a ``wfi`` instruction which reduces power consumption + of the MCU until any interrupt occurs (be it internal or external), + at which point execution continues. Note that the system-tick interrupt + occurs once every millisecond (1000Hz) so this function will block for + at most 1ms. + """ + ... + +def stop() -> None: + """ + Put the pyboard in a "sleeping" state. + + This reduces power consumption to less than 500 uA. To wake from this + sleep state requires an external interrupt or a real-time-clock event. + Upon waking execution continues where it left off. + + See :meth:`rtc.wakeup` to configure a real-time-clock wakeup event. + """ + ... + +def standby() -> None: + """ + Put the pyboard into a "deep sleep" state. + + This reduces power consumption to less than 50 uA. To wake from this + sleep state requires a real-time-clock event, or an external interrupt + on X1 (PA0=WKUP) or X18 (PC13=TAMP1). + Upon waking the system undergoes a hard reset. + + See :meth:`rtc.wakeup` to configure a real-time-clock wakeup event. + """ + ... + +def have_cdc() -> bool: + """ + Return True if USB is connected as a serial device, False otherwise. + + ``Note:`` This function is deprecated. Use pyb.USB_VCP().isconnected() instead. + """ + ... + +@overload +def hid(data: tuple[int, int, int, int], /) -> None: + """ + Takes a 4-tuple (or list) and sends it to the USB host (the PC) to + signal a HID mouse-motion event. + + ``Note:`` This function is deprecated. Use :meth:`pyb.USB_HID.send()` instead. + """ + +@overload +def hid(data: Sequence[int], /) -> None: + """ + Takes a 4-tuple (or list) and sends it to the USB host (the PC) to + signal a HID mouse-motion event. + + ``Note:`` This function is deprecated. Use :meth:`pyb.USB_HID.send()` instead. + """ + +@overload +def info() -> None: + """ + Print out lots of information about the board. + """ + +@overload +def info(self) -> list[int]: + """ + Get information about the controller's error states and TX and RX buffers. + If *list* is provided then it should be a list object with at least 8 entries, + which will be filled in with the information. Otherwise a new list will be + created and filled in. In both cases the return value of the method is the + populated list. + + The values in the list are: + + - TEC value + - REC value + - number of times the controller enterted the Error Warning state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Error Passive state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Bus Off state (wrapped + around to 0 after 65535) + - number of pending TX messages + - number of pending RX messages on fifo 0 + - number of pending RX messages on fifo 1 + """ + +@overload +def info(self, list: list[int], /) -> list[int]: + """ + Get information about the controller's error states and TX and RX buffers. + If *list* is provided then it should be a list object with at least 8 entries, + which will be filled in with the information. Otherwise a new list will be + created and filled in. In both cases the return value of the method is the + populated list. + + The values in the list are: + + - TEC value + - REC value + - number of times the controller enterted the Error Warning state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Error Passive state (wrapped + around to 0 after 65535) + - number of times the controller enterted the Bus Off state (wrapped + around to 0 after 65535) + - number of pending TX messages + - number of pending RX messages on fifo 0 + - number of pending RX messages on fifo 1 + """ + +@overload +def info(dump_alloc_table: bytes, /) -> None: + """ + Print out lots of information about the board. + """ + +@overload +def info(self) -> list[int]: + """ + Print out lots of information about the board. + """ + +@overload +def info(self, list: list[int], /) -> list[int]: + """ + Print out lots of information about the board. + """ + +def main(filename: str, /) -> None: + """ + Set the filename of the main script to run after boot.py is finished. If + this function is not called then the default file main.py will be executed. + + It only makes sense to call this function from within boot.py. + """ + ... + +@overload +def mount( + device: _OldAbstractReadOnlyBlockDev, + mountpoint: str, + /, + *, + readonly: bool = False, + mkfs: bool = False, +) -> None: + """ + ``Note:`` This function is deprecated. Mounting and unmounting devices should + be performed by :meth:`vfs.mount` and :meth:`vfs.umount` instead. + + Mount a block device and make it available as part of the filesystem. + ``device`` must be an object that provides the block protocol. (The + following is also deprecated. See :class:`vfs.AbstractBlockDev` for the + correct way to create a block device.) + + - ``readblocks(self, blocknum, buf)`` + - ``writeblocks(self, blocknum, buf)`` (optional) + - ``count(self)`` + - ``sync(self)`` (optional) + + ``readblocks`` and ``writeblocks`` should copy data between ``buf`` and + the block device, starting from block number ``blocknum`` on the device. + ``buf`` will be a bytearray with length a multiple of 512. If + ``writeblocks`` is not defined then the device is mounted read-only. + The return value of these two functions is ignored. + + ``count`` should return the number of blocks available on the device. + ``sync``, if implemented, should sync the data on the device. + + The parameter ``mountpoint`` is the location in the root of the filesystem + to mount the device. It must begin with a forward-slash. + + If ``readonly`` is ``True``, then the device is mounted read-only, + otherwise it is mounted read-write. + + If ``mkfs`` is ``True``, then a new filesystem is created if one does not + already exist. + """ + +@overload +def mount( + device: _OldAbstractBlockDev, + mountpoint: str, + /, + *, + readonly: bool = False, + mkfs: bool = False, +) -> None: + """ + ``Note:`` This function is deprecated. Mounting and unmounting devices should + be performed by :meth:`vfs.mount` and :meth:`vfs.umount` instead. + + Mount a block device and make it available as part of the filesystem. + ``device`` must be an object that provides the block protocol. (The + following is also deprecated. See :class:`vfs.AbstractBlockDev` for the + correct way to create a block device.) + + - ``readblocks(self, blocknum, buf)`` + - ``writeblocks(self, blocknum, buf)`` (optional) + - ``count(self)`` + - ``sync(self)`` (optional) + + ``readblocks`` and ``writeblocks`` should copy data between ``buf`` and + the block device, starting from block number ``blocknum`` on the device. + ``buf`` will be a bytearray with length a multiple of 512. If + ``writeblocks`` is not defined then the device is mounted read-only. + The return value of these two functions is ignored. + + ``count`` should return the number of blocks available on the device. + ``sync``, if implemented, should sync the data on the device. + + The parameter ``mountpoint`` is the location in the root of the filesystem + to mount the device. It must begin with a forward-slash. + + If ``readonly`` is ``True``, then the device is mounted read-only, + otherwise it is mounted read-write. + + If ``mkfs`` is ``True``, then a new filesystem is created if one does not + already exist. + """ + +@overload +def repl_uart() -> UART | None: + """ + Get or set the UART object where the REPL is repeated on. + """ + +@overload +def repl_uart(uart: UART, /) -> None: + """ + Get or set the UART object where the REPL is repeated on. + """ + +def rng() -> int: + """ + Return a 30-bit hardware generated random number. + """ + ... + +def sync() -> None: + """ + Sync all file systems. + """ + ... + +def unique_id() -> str: + """ + Returns a string of 12 bytes (96 bits), which is the unique ID of the MCU. + """ + ... + +# noinspection PyShadowingNames +@overload +def usb_mode() -> str: + """ + If called with no arguments, return the current USB mode as a string. + + If called with *modestr* provided, attempts to configure the USB mode. + The following values of *modestr* are understood: + + - ``None``: disables USB + - ``'VCP'``: enable with VCP (Virtual COM Port) interface + - ``'MSC'``: enable with MSC (mass storage device class) interface + - ``'VCP+MSC'``: enable with VCP and MSC + - ``'VCP+HID'``: enable with VCP and HID (human interface device) + - ``'VCP+MSC+HID'``: enabled with VCP, MSC and HID (only available on PYBD boards) + + For backwards compatibility, ``'CDC'`` is understood to mean + ``'VCP'`` (and similarly for ``'CDC+MSC'`` and ``'CDC+HID'``). + + The *port* parameter should be an integer (0, 1, ...) and selects which + USB port to use if the board supports multiple ports. A value of -1 uses + the default or automatically selected port. + + The *vid* and *pid* parameters allow you to specify the VID (vendor id) + and PID (product id). A *pid* value of -1 will select a PID based on the + value of *modestr*. + + If enabling MSC mode, the *msc* parameter can be used to specify a list + of SCSI LUNs to expose on the mass storage interface. For example + ``msc=(pyb.Flash(), pyb.SDCard())``. + + If enabling HID mode, you may also specify the HID details by + passing the *hid* keyword parameter. It takes a tuple of + (subclass, protocol, max packet length, polling interval, report + descriptor). By default it will set appropriate values for a USB + mouse. There is also a ``pyb.hid_keyboard`` constant, which is an + appropriate tuple for a USB keyboard. + + The *high_speed* parameter, when set to ``True``, enables USB HS mode if + it is supported by the hardware. + """ + +# noinspection PyShadowingNames +@overload +def usb_mode( + modestr: str, + /, + *, + port: int = -1, + vid: int = 0xF055, + pid: int = -1, + msc: Sequence[AbstractBlockDev] = (), + hid: tuple[int, int, int, int, bytes] = hid_mouse, + high_speed: bool = False, +) -> None: + """ + If called with no arguments, return the current USB mode as a string. + + If called with *modestr* provided, attempts to configure the USB mode. + The following values of *modestr* are understood: + + - ``None``: disables USB + - ``'VCP'``: enable with VCP (Virtual COM Port) interface + - ``'MSC'``: enable with MSC (mass storage device class) interface + - ``'VCP+MSC'``: enable with VCP and MSC + - ``'VCP+HID'``: enable with VCP and HID (human interface device) + - ``'VCP+MSC+HID'``: enabled with VCP, MSC and HID (only available on PYBD boards) + + For backwards compatibility, ``'CDC'`` is understood to mean + ``'VCP'`` (and similarly for ``'CDC+MSC'`` and ``'CDC+HID'``). + + The *port* parameter should be an integer (0, 1, ...) and selects which + USB port to use if the board supports multiple ports. A value of -1 uses + the default or automatically selected port. + + The *vid* and *pid* parameters allow you to specify the VID (vendor id) + and PID (product id). A *pid* value of -1 will select a PID based on the + value of *modestr*. + + If enabling MSC mode, the *msc* parameter can be used to specify a list + of SCSI LUNs to expose on the mass storage interface. For example + ``msc=(pyb.Flash(), pyb.SDCard())``. + + If enabling HID mode, you may also specify the HID details by + passing the *hid* keyword parameter. It takes a tuple of + (subclass, protocol, max packet length, polling interval, report + descriptor). By default it will set appropriate values for a USB + mouse. There is also a ``pyb.hid_keyboard`` constant, which is an + appropriate tuple for a USB keyboard. + + The *high_speed* parameter, when set to ``True``, enables USB HS mode if + it is supported by the hardware. + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/random/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/random/__init__.pyi new file mode 100644 index 00000000..7ecf3197 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/random/__init__.pyi @@ -0,0 +1,113 @@ +""" +Random numbers. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/random.html + +This module implements a pseudo-random number generator (PRNG). + +CPython module: :mod:`python:random` https://docs.python.org/3/library/random.html . . + +.. note:: + + The following notation is used for intervals: + + - () are open interval brackets and do not include their endpoints. + For example, (0, 1) means greater than 0 and less than 1. + In set notation: (0, 1) = {x | 0 < x < 1}. + + - [] are closed interval brackets which include all their limit points. + For example, [0, 1] means greater than or equal to 0 and less than + or equal to 1. + In set notation: [0, 1] = {x | 0 <= x <= 1}. + +.. note:: + + The :func:`randrange`, :func:`randint` and :func:`choice` functions are only + available if the ``MICROPY_PY_RANDOM_EXTRA_FUNCS`` configuration option is + enabled. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/random.rst +from __future__ import annotations + +from typing import overload + +from _mpy_shed import Subscriptable +from typing_extensions import TypeVar + +_T = TypeVar("_T") + +def getrandbits(n: int, /) -> int: + """ + Return an integer with *n* random bits (0 <= n <= 32). + """ + ... + +def randint(a: int, b: int, /) -> int: + """ + Return a random integer in the range [*a*, *b*]. + """ + ... + +@overload +def randrange(stop: int, /) -> int: + """ + The first form returns a random integer from the range [0, *stop*). + The second form returns a random integer from the range [*start*, *stop*). + The third form returns a random integer from the range [*start*, *stop*) in + steps of *step*. For instance, calling ``randrange(1, 10, 2)`` will + return odd numbers between 1 and 9 inclusive. + """ + +@overload +def randrange(start: int, stop: int, /) -> int: + """ + The first form returns a random integer from the range [0, *stop*). + The second form returns a random integer from the range [*start*, *stop*). + The third form returns a random integer from the range [*start*, *stop*) in + steps of *step*. For instance, calling ``randrange(1, 10, 2)`` will + return odd numbers between 1 and 9 inclusive. + """ + +@overload +def randrange(start: int, stop: int, step: int, /) -> int: + """ + The first form returns a random integer from the range [0, *stop*). + The second form returns a random integer from the range [*start*, *stop*). + The third form returns a random integer from the range [*start*, *stop*) in + steps of *step*. For instance, calling ``randrange(1, 10, 2)`` will + return odd numbers between 1 and 9 inclusive. + """ + +def random() -> int: + """ + Return a random floating point number in the range [0.0, 1.0). + """ + ... + +def uniform(a: float, b: float) -> int: + """ + Return a random floating point number N such that *a* <= N <= *b* for *a* <= *b*, + and *b* <= N <= *a* for *b* < *a*. + """ + ... + +def seed(n: int | None = None, /) -> None: + """ + Initialise the random number generator module with the seed *n* which should + be an integer. When no argument (or ``None``) is passed in it will (if + supported by the port) initialise the PRNG with a true random number + (usually a hardware generated random number). + + The ``None`` case only works if ``MICROPY_PY_RANDOM_SEED_INIT_FUNC`` is + enabled by the port, otherwise it raises ``ValueError``. + """ + ... + +def choice(sequence: Subscriptable, /) -> None: + """ + Chooses and returns one item at random from *sequence* (tuple, list or + any object that supports the subscript operation). + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/DMA.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/DMA.pyi new file mode 100644 index 00000000..0d7bd2b0 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/DMA.pyi @@ -0,0 +1,158 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Literal + +from _mpy_shed import _IRQ, AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from machine import Pin +from rp2 import bootsel_button +from rp2.DMA import DMA +from rp2.Flash import Flash +from rp2.PIO import PIO +from rp2.PIOASMEmit import PIOASMEmit +from rp2.StateMachine import StateMachine +from typing_extensions import TypeAlias + +_PIO_ASM_Program: TypeAlias = Incomplete +_IRQ_TRIGGERS: TypeAlias = Literal[256, 512, 1024, 2048] + +class DMA: + """ + Claim one of the DMA controller channels for exclusive use. + """ + + def __init__( + self, + read: int | AnyReadableBuf | None = None, + write: int | AnyWritableBuf | None = None, + count: int = -1, + ctrl: int = -1, + trigger: bool = False, + ) -> None: ... + def config( + self, + read: int | AnyReadableBuf | None = None, + write: int | AnyWritableBuf | None = None, + count: int = -1, + ctrl: int = -1, + trigger: bool = False, + ) -> None: + """ + Configure the DMA registers for the channel and optionally start the transfer. + Parameters are: + + - *read*: The address from which the DMA controller will start reading data or + an object that will provide data to be read. It can be an integer or any + object that supports the buffer protocol. + - *write*: The address to which the DMA controller will start writing or an + object into which data will be written. It can be an integer or any object + that supports the buffer protocol. + - *count*: The number of bus transfers that will execute before this channel + stops. Note that this is the number of transfers, not the number of bytes. + If the transfers are 2 or 4 bytes wide then the total amount of data moved + (and thus the size of required buffer) needs to be multiplied accordingly. + - *ctrl*: The value for the DMA control register. This is an integer value + that is typically packed using the :meth:`DMA.pack_ctrl()`. + - *trigger*: Optionally commence the transfer immediately. + """ + ... + + def irq(self, handler=None, hard=False) -> _IRQ: + """ + Returns the IRQ object for this DMA channel and optionally configures it. + """ + ... + + def close(self) -> None: + """ + Release the claim on the underlying DMA channel and free the interrupt + handler. The :class:`DMA` object can not be used after this operation. + """ + ... + + def pack_ctrl(self, default=None, **kwargs) -> int: + """ + Pack the values provided in the keyword arguments into the named fields of a new control + register value. Any field that is not provided will be set to a default value. The + default will either be taken from the provided ``default`` value, or if that is not + given, a default suitable for the current channel; setting this to the current value + of the `DMA.ctrl` attribute provides an easy way to override a subset of the fields. + + The keys for the keyword arguments can be any key returned by the :meth:`DMA.unpack_ctrl()` + method. The writable values are: + + - *enable*: ``bool`` Set to enable the channel (default: ``True``). + + - *high_pri*: ``bool`` Make this channel's bus traffic high priority (default: ``False``). + + - *size*: ``int`` Transfer size: 0=byte, 1=half word, 2=word (default: 2). + + - *inc_read*: ``bool`` Increment the read address after each transfer (default: ``True``). + + - *inc_write*: ``bool`` Increment the write address after each transfer (default: ``True``). + + - *ring_size*: ``int`` If non-zero, only the bottom ``ring_size`` bits of one + address register will change when an address is incremented, causing the + address to wrap at the next ``1 << ring_size`` byte boundary. Which + address is wrapped is controlled by the ``ring_sel`` flag. A zero value + disables address wrapping. + + - *ring_sel*: ``bool`` Set to ``False`` to have the ``ring_size`` apply to the read address + or ``True`` to apply to the write address. + + - *chain_to*: ``int`` The channel number for a channel to trigger after this transfer + completes. Setting this value to this DMA object's own channel number + disables chaining (this is the default). + + - *treq_sel*: ``int`` Select a Transfer Request signal. See section 2.5.3 in the RP2040 + datasheet for details. + + - *irq_quiet*: ``bool`` Do not generate interrupt at the end of each transfer. Interrupts + will instead be generated when a zero value is written to the trigger + register, which will halt a sequence of chained transfers (default: + ``True``). + + - *bswap*: ``bool`` If set to true, bytes in words or half-words will be reversed before + writing (default: ``True``). + + - *sniff_en*: ``bool`` Set to ``True`` to allow data to be accessed by the chips sniff + hardware (default: ``False``). + + - *write_err*: ``bool`` Setting this to ``True`` will clear a previously reported write + error. + + - *read_err*: ``bool`` Setting this to ``True`` will clear a previously reported read + error. + + See the description of the ``CH0_CTRL_TRIG`` register in section 2.5.7 of the RP2040 + datasheet for details of all of these fields. + """ + ... + + def unpack_ctrl(self, value) -> dict: + """ + Unpack a value for a DMA channel control register into a dictionary with key/value pairs + for each of the fields in the control register. *value* is the ``ctrl`` register value + to unpack. + + This method will return values for all the keys that can be passed to ``DMA.pack_ctrl``. + In addition, it will also return the read-only flags in the control register: ``busy``, + which goes high when a transfer starts and low when it ends, and ``ahb_err``, which is + the logical OR of the ``read_err`` and ``write_err`` flags. These values will be ignored + when packing, so that the dictionary created by unpacking a control register can be used + directly as the keyword arguments for packing. + """ + ... + + def active(self, value: Any | None = None) -> bool: + """ + Gets or sets whether the DMA channel is currently running. + + >>> sm.active() + 0 + >>> sm.active(1) + >>> while sm.active(): + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/Flash.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/Flash.pyi new file mode 100644 index 00000000..c23605be --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/Flash.pyi @@ -0,0 +1,35 @@ +""" """ + +from __future__ import annotations + +from typing import Literal, Optional + +from _mpy_shed import AbstractBlockDev +from _typeshed import Incomplete +from machine import Pin +from rp2 import bootsel_button +from rp2.DMA import DMA +from rp2.Flash import Flash +from rp2.PIO import PIO +from rp2.PIOASMEmit import PIOASMEmit +from rp2.StateMachine import StateMachine +from typing_extensions import TypeAlias + +_PIO_ASM_Program: TypeAlias = Incomplete +_IRQ_TRIGGERS: TypeAlias = Literal[256, 512, 1024, 2048] + +class Flash(AbstractBlockDev): + """ + Gets the singleton object for accessing the SPI flash memory. + """ + + def __init__(self) -> None: ... + def readblocks(self, block_num, buf, offset: Optional[int] = 0) -> Incomplete: ... + def writeblocks(self, block_num, buf, offset: Optional[int] = 0) -> Incomplete: ... + def ioctl(self, cmd, arg) -> Incomplete: + """ + These methods implement the simple and extended + :ref:`block protocol ` defined by + :class:`vfs.AbstractBlockDev`. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIO.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIO.pyi new file mode 100644 index 00000000..02e5af0e --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIO.pyi @@ -0,0 +1,132 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Callable, Literal, Optional + +from _mpy_shed import _IRQ +from _typeshed import Incomplete +from machine import Pin +from rp2 import bootsel_button +from rp2.DMA import DMA +from rp2.Flash import Flash +from rp2.PIO import PIO +from rp2.PIOASMEmit import PIOASMEmit +from rp2.StateMachine import StateMachine +from typing_extensions import TypeAlias + +_PIO_ASM_Program: TypeAlias = Incomplete +_IRQ_TRIGGERS: TypeAlias = Literal[256, 512, 1024, 2048] + +class PIO: + """ + Gets the PIO instance numbered *id*. The RP2040 has two PIO instances, + numbered 0 and 1. + + Raises a ``ValueError`` if any other argument is provided. + """ + + IN_LOW: Incomplete + """\ + These constants are used for the *out_init*, *set_init*, and *sideset_init* + arguments to `asm_pio`. + """ + IN_HIGH: Incomplete + """\ + These constants are used for the *out_init*, *set_init*, and *sideset_init* + arguments to `asm_pio`. + """ + OUT_LOW: Incomplete + """\ + These constants are used for the *out_init*, *set_init*, and *sideset_init* + arguments to `asm_pio`. + """ + OUT_HIGH: Incomplete + """\ + These constants are used for the *out_init*, *set_init*, and *sideset_init* + arguments to `asm_pio`. + """ + SHIFT_LEFT: Incomplete + """\ + These constants are used for the *in_shiftdir* and *out_shiftdir* arguments + to `asm_pio` or `StateMachine.init`. + """ + SHIFT_RIGHT: Incomplete + """\ + These constants are used for the *in_shiftdir* and *out_shiftdir* arguments + to `asm_pio` or `StateMachine.init`. + """ + JOIN_NONE: Incomplete + """These constants are used for the *fifo_join* argument to `asm_pio`.""" + JOIN_TX: Incomplete + """These constants are used for the *fifo_join* argument to `asm_pio`.""" + JOIN_RX: Incomplete + """These constants are used for the *fifo_join* argument to `asm_pio`.""" + IRQ_SM0: Incomplete + """These constants are used for the *trigger* argument to `PIO.irq`.""" + IRQ_SM1: Incomplete + """These constants are used for the *trigger* argument to `PIO.irq`.""" + IRQ_SM2: Incomplete + """These constants are used for the *trigger* argument to `PIO.irq`.""" + IRQ_SM3: Incomplete + """These constants are used for the *trigger* argument to `PIO.irq`.""" + def __init__(self, id) -> None: ... + def gpio_base(self, base: Optional[Any] = None) -> Incomplete: + """ + Query and optionally set the current GPIO base for this PIO instance. + + If an argument is given then it must be a pin (or integer corresponding to a pin + number), restricted to either GPIO0 or GPIO16. The GPIO base will then be set to + that pin. Setting the GPIO base must be done before any programs are added or state + machines created. + + Returns the current GPIO base pin. + """ + ... + + def add_program(self, program: _PIO_ASM_Program) -> None: + """ + Add the *program* to the instruction memory of this PIO instance. + + The amount of memory available for programs on each PIO instance is + limited. If there isn't enough space left in the PIO's program memory + this method will raise ``OSError(ENOMEM)``. + """ + ... + + def remove_program(self, program: Optional[_PIO_ASM_Program] = None) -> None: + """ + Remove *program* from the instruction memory of this PIO instance. + + If no program is provided, it removes all programs. + + It is not an error to remove a program which has already been removed. + """ + ... + + def state_machine(self, id: int, program: _PIO_ASM_Program, *args, **kwargs) -> StateMachine: + """ + Gets the state machine numbered *id*. On the RP2040, each PIO instance has + four state machines, numbered 0 to 3. + + Optionally initialize it with a *program*: see `StateMachine.init`. + + >>> rp2.PIO(1).state_machine(3) + StateMachine(7) + """ + ... + + def irq( + self, + handler: Optional[Callable[[PIO], None]] = None, + trigger: _IRQ_TRIGGERS | None = None, + hard: bool = False, + ) -> _IRQ: + """ + Returns the IRQ object for this PIO instance. + + MicroPython only uses IRQ 0 on each PIO instance. IRQ 1 is not available. + + Optionally configure it. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIOASMEmit.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIOASMEmit.pyi new file mode 100644 index 00000000..7f483946 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/PIOASMEmit.pyi @@ -0,0 +1,91 @@ +""" +Module: '_rp2.PIOASMEmit' +""" + +from __future__ import annotations + +from typing import Dict, List + +from _typeshed import Incomplete + +class PIOASMEmit: + """ + The PIOASMEmit class provides a comprehensive interface for constructing PIO programs, + handling the intricacies of instruction encoding, label management, and program state. + This allows users to build complex PIO programs in pythone, leveraging the flexibility + and power of the PIO state machine. + + The class should not be instantiated directly, but used via the `@asm_pio` decorator. + """ + + labels: Dict + prog: List + wrap_used: bool + sideset_count: int + delay_max: int + sideset_opt: bool + pass_: int + num_instr: int + num_sideset: int + + def __init__( + self, + *, + out_init: int | List | None = ..., + set_init: int | List | None = ..., + sideset_init: int | List | None = ..., + in_shiftdir: int = ..., + out_shiftdir: int = ..., + autopush: bool = ..., + autopull: bool = ..., + push_thresh: int = ..., + pull_thresh: int = ..., + fifo_join: int = ..., + ) -> None: ... + def __getitem__(self, key): ... + def start_pass(self, pass_) -> None: + """The start_pass method is used to start a pass over the instructions, + setting up the necessary state for the pass. It handles wrapping instructions + if needed and adjusts the delay maximum based on the number of side-set bits. + """ + + ... + + def delay(self, delay: int): + """ + The delay method allows setting a delay for the current instruction, + ensuring it does not exceed the maximum allowed delay. + """ + + def side(self, value: int): + """\ + This is a modifier which can be applied to any instruction, and is used to control side-set pin values. + value: the value (bits) to output on the side-set pins + + When an instruction has side 0 next to it, the corresponding output is set LOW, + and when it has side 1 next to it, the corresponding output is set HIGH. + There can be up to 5 side-set pins, in which case side N is interpreted as a binary number. + + `side(0b00011)` sets the first and the second side-set pin HIGH, and the others LOW. + """ + ... + + def wrap_target(self) -> None: ... + def wrap(self) -> None: + """ + The wrap method sets the wrap point for the program, ensuring the program loops correctly. + """ + ... + + def label(self, label: str) -> None: ... + def word(self, instr, label: str | None = ...): ... + def nop(self): ... + def jmp(self, cond, label: str | None = ...): ... + def wait(self, polarity, src, index): ... + def in_(self, src, data): ... + def out(self, dest, data): ... + def push(self, value: int = ..., value2: int = ...): ... + def pull(self, value: int = ..., value2: int = ...): ... + def mov(self, dest, src): ... + def irq(self, mod, index: Incomplete | None = ...): ... + def set(self, dest, data): ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/StateMachine.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/StateMachine.pyi new file mode 100644 index 00000000..69a6e67f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/StateMachine.pyi @@ -0,0 +1,190 @@ +""" """ + +from __future__ import annotations + +from typing import Any, Literal, Optional + +from _mpy_shed import _IRQ +from _typeshed import Incomplete +from machine import Pin +from rp2 import bootsel_button +from rp2.DMA import DMA +from rp2.Flash import Flash +from rp2.PIO import PIO +from rp2.PIOASMEmit import PIOASMEmit +from rp2.StateMachine import StateMachine +from typing_extensions import TypeAlias + +_PIO_ASM_Program: TypeAlias = Incomplete +_IRQ_TRIGGERS: TypeAlias = Literal[256, 512, 1024, 2048] + +class StateMachine: + """ + Get the state machine numbered *id*. The RP2040 has two identical PIO + instances, each with 4 state machines: so there are 8 state machines in + total, numbered 0 to 7. + + Optionally initialize it with the given program *program*: see + `StateMachine.init`. + """ + + def __init__( + self, + program: int, + freq: int = 1, + *, + in_base: Pin | None = None, + out_base: Pin | None = None, + set_base: Pin | None = None, + jmp_pin: Pin | None = None, + sideset_base: Pin | None = None, + in_shiftdir: int | None = None, + out_shiftdir: int | None = None, + push_thresh: int | None = None, + pull_thresh: int | None = None, + ) -> None: ... + def init( + self, + program: int, + freq: int = 1, + *, + in_base: Pin | None = None, + out_base: Pin | None = None, + set_base: Pin | None = None, + jmp_pin: Pin | None = None, + sideset_base: Pin | None = None, + in_shiftdir: int | None = None, + out_shiftdir: int | None = None, + push_thresh: int | None = None, + pull_thresh: int | None = None, + ) -> None: + """ + Configure the state machine instance to run the given *program*. + + The program is added to the instruction memory of this PIO instance. If the + instruction memory already contains this program, then its offset is + reused so as to save on instruction memory. + + - *freq* is the frequency in Hz to run the state machine at. Defaults to + the system clock frequency. + + The clock divider is computed as ``system clock frequency / freq``, so + there can be slight rounding errors. + + The minimum possible clock divider is one 65536th of the system clock: so + at the default system clock frequency of 125MHz, the minimum value of + *freq* is ``1908``. To run state machines at slower frequencies, you'll + need to reduce the system clock speed with `machine.freq()`. + - *in_base* is the first pin to use for ``in()`` instructions. + - *out_base* is the first pin to use for ``out()`` instructions. + - *set_base* is the first pin to use for ``set()`` instructions. + - *jmp_pin* is the first pin to use for ``jmp(pin, ...)`` instructions. + - *sideset_base* is the first pin to use for side-setting. + - *in_shiftdir* is the direction the ISR will shift, either + `PIO.SHIFT_LEFT` or `PIO.SHIFT_RIGHT`. + - *out_shiftdir* is the direction the OSR will shift, either + `PIO.SHIFT_LEFT` or `PIO.SHIFT_RIGHT`. + - *push_thresh* is the threshold in bits before auto-push or conditional + re-pushing is triggered. + - *pull_thresh* is the threshold in bits before auto-pull or conditional + re-pulling is triggered. + """ + ... + + def active(self, value: Optional[Any] = None) -> bool: + """ + Gets or sets whether the state machine is currently running. + + >>> sm.active() + True + >>> sm.active(0) + False + """ + ... + + def restart(self) -> None: + """ + Restarts the state machine and jumps to the beginning of the program. + + This method clears the state machine's internal state using the RP2040's + ``SM_RESTART`` register. This includes: + + - input and output shift counters + - the contents of the input shift register + - the delay counter + - the waiting-on-IRQ state + - a stalled instruction run using `StateMachine.exec()` + """ + ... + + def exec(self, instr) -> None: + """ + Execute a single PIO instruction. + + If *instr* is a string then uses `asm_pio_encode` to encode the instruction + from the given string. + + >>> sm.exec("set(0, 1)") + + If *instr* is an integer then it is treated as an already encoded PIO + machine code instruction to be executed. + + >>> sm.exec(rp2.asm_pio_encode("out(y, 8)", 0)) + """ + ... + + def get(self, buf=None, shift=0) -> Incomplete: + """ + Pull a word from the state machine's RX FIFO. + + If the FIFO is empty, it blocks until data arrives (i.e. the state machine + pushes a word). + + The value is shifted right by *shift* bits before returning, i.e. the + return value is ``word >> shift``. + """ + ... + + def put(self, value, shift=0): + """ + Push words onto the state machine's TX FIFO. + + *value* can be an integer, an array of type ``B``, ``H`` or ``I``, or a + `bytearray`. + + This method will block until all words have been written to the FIFO. If + the FIFO is, or becomes, full, the method will block until the state machine + pulls enough words to complete the write. + + Each word is first shifted left by *shift* bits, i.e. the state machine + receives ``word << shift``. + """ + ... + + def rx_fifo(self) -> int: + """ + Returns the number of words in the state machine's RX FIFO. A value of 0 + indicates the FIFO is empty. + + Useful for checking if data is waiting to be read, before calling + `StateMachine.get()`. + """ + ... + + def tx_fifo(self) -> int: + """ + Returns the number of words in the state machine's TX FIFO. A value of 0 + indicates the FIFO is empty. + + Useful for checking if there is space to push another word using + `StateMachine.put()`. + """ + ... + + def irq(self, handler=None, trigger=0 | 1, hard=False) -> _IRQ: + """ + Returns the IRQ object for the given StateMachine. + + Optionally configure it. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/__init__.pyi new file mode 100644 index 00000000..02814e0b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/rp2/__init__.pyi @@ -0,0 +1,111 @@ +""" +Functionality specific to the RP2. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/rp2.html + +The ``rp2`` module contains functions and classes specific to the RP2040, as +used in the Raspberry Pi Pico. + +See the `RP2040 Python datasheet +`_ +for more information, and `pico-micropython-examples +`_ +for example code. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/rp2.rst +from __future__ import annotations + +from typing import Callable, List, Literal, Union + +from _typeshed import Incomplete +from machine import Pin +from rp2 import bootsel_button +from rp2.DMA import DMA +from rp2.Flash import Flash +from rp2.PIO import PIO +from rp2.PIOASMEmit import PIOASMEmit +from rp2.StateMachine import StateMachine +from typing_extensions import TypeAlias + +_PIO_ASM_Program: TypeAlias = Incomplete +_IRQ_TRIGGERS: TypeAlias = Literal[256, 512, 1024, 2048] + +class PIOASMError(Exception): + """ + This exception is raised from `asm_pio()` or `asm_pio_encode()` if there is + an error assembling a PIO program. + """ + +def asm_pio( + *, + out_init: Union[Pin, List[Pin], int, List[int], None] = None, + set_init: Union[Pin, List[Pin], int, List[int], None] = None, + sideset_init: Union[Pin, List[Pin], int, List[int], None] = None, + in_shiftdir=0, + out_shiftdir=0, + autopush=False, + autopull=False, + push_thresh=32, + pull_thresh=32, + fifo_join=PIO.JOIN_NONE, +) -> Callable[..., PIOASMEmit]: + """ + Assemble a PIO program. + + The following parameters control the initial state of the GPIO pins, as one + of `PIO.IN_LOW`, `PIO.IN_HIGH`, `PIO.OUT_LOW` or `PIO.OUT_HIGH`. If the + program uses more than one pin, provide a tuple, e.g. + ``out_init=(PIO.OUT_LOW, PIO.OUT_LOW)``. + + - *out_init* configures the pins used for ``out()`` instructions. + - *set_init* configures the pins used for ``set()`` instructions. There can + be at most 5. + - *sideset_init* configures the pins used side-setting. There can be at + most 5. + + The following parameters are used by default, but can be overridden in + `StateMachine.init()`: + + - *in_shiftdir* is the default direction the ISR will shift, either + `PIO.SHIFT_LEFT` or `PIO.SHIFT_RIGHT`. + - *out_shiftdir* is the default direction the OSR will shift, either + `PIO.SHIFT_LEFT` or `PIO.SHIFT_RIGHT`. + - *push_thresh* is the threshold in bits before auto-push or conditional + re-pushing is triggered. + - *pull_thresh* is the threshold in bits before auto-pull or conditional + re-pulling is triggered. + + The remaining parameters are: + + - *autopush* configures whether auto-push is enabled. + - *autopull* configures whether auto-pull is enabled. + - *fifo_join* configures whether the 4-word TX and RX FIFOs should be + combined into a single 8-word FIFO for one direction only. The options + are `PIO.JOIN_NONE`, `PIO.JOIN_RX` and `PIO.JOIN_TX`. + """ + ... + +def asm_pio_encode(instr, sideset_count, sideset_opt=False) -> int: + """ + Assemble a single PIO instruction. You usually want to use `asm_pio()` + instead. + + >>> rp2.asm_pio_encode("set(0, 1)", 0) + 57345 + """ + ... + +def bootsel_button() -> int: + """ + Temporarily turns the QSPI_SS pin into an input and reads its value, + returning 1 for low and 0 for high. + On a typical RP2040 board with a BOOTSEL button, a return value of 1 + indicates that the button is pressed. + + Since this function temporarily disables access to the external flash + memory, it also temporarily disables interrupts and the other core to + prevent them from trying to execute code from flash. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/select/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/select/__init__.pyi new file mode 100644 index 00000000..f3b617ad --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/select/__init__.pyi @@ -0,0 +1,116 @@ +""" +Wait for events on a set of streams. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/select.html + +CPython module: :mod:`python:select` https://docs.python.org/3/library/select.html . + +This module provides functions to efficiently wait for events on multiple +`streams ` (select streams which are ready for operations). +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/select.rst +from __future__ import annotations + +from typing import Any, Iterable, Iterator, List, Optional, Tuple + +from _typeshed import Incomplete + +class poll: + """ + Create an instance of the Poll class. + """ + + def __init__(self) -> None: ... + def register(self, obj, eventmask: Optional[Any] = None) -> None: + """ + Register `stream` *obj* for polling. *eventmask* is logical OR of: + + * ``select.POLLIN`` - data available for reading + * ``select.POLLOUT`` - more data can be written + + Note that flags like ``select.POLLHUP`` and ``select.POLLERR`` are + *not* valid as input eventmask (these are unsolicited events which + will be returned from `poll()` regardless of whether they are asked + for). This semantics is per POSIX. + + *eventmask* defaults to ``select.POLLIN | select.POLLOUT``. + + It is OK to call this function multiple times for the same *obj*. + Successive calls will update *obj*'s eventmask to the value of + *eventmask* (i.e. will behave as `modify()`). + """ + ... + + def unregister(self, obj) -> Incomplete: + """ + Unregister *obj* from polling. + """ + ... + + def modify(self, obj, eventmask) -> None: + """ + Modify the *eventmask* for *obj*. If *obj* is not registered, `OSError` + is raised with error of ENOENT. + """ + ... + + def poll(self, timeout=-1, /) -> List: + """ + Wait for at least one of the registered objects to become ready or have an + exceptional condition, with optional timeout in milliseconds (if *timeout* + arg is not specified or -1, there is no timeout). + + Returns list of (``obj``, ``event``, ...) tuples. There may be other elements in + tuple, depending on a platform and version, so don't assume that its size is 2. + The ``event`` element specifies which events happened with a stream and + is a combination of ``select.POLL*`` constants described above. Note that + flags ``select.POLLHUP`` and ``select.POLLERR`` can be returned at any time + (even if were not asked for), and must be acted on accordingly (the + corresponding stream unregistered from poll and likely closed), because + otherwise all further invocations of `poll()` may return immediately with + these flags set for this stream again. + + In case of timeout, an empty list is returned. + + Admonition:Difference to CPython + :class: attention + + Tuples returned may contain more than 2 elements as described above. + """ + ... + + def ipoll(self, timeout=-1, flags=0, /) -> Iterator[Tuple]: + """ + Like :meth:`poll.poll`, but instead returns an iterator which yields a + `callee-owned tuple`. This function provides an efficient, allocation-free + way to poll on streams. + + If *flags* is 1, one-shot behaviour for events is employed: streams for + which events happened will have their event masks automatically reset + (equivalent to ``poll.modify(obj, 0)``), so new events for such a stream + won't be processed until new mask is set with `poll.modify()`. This + behaviour is useful for asynchronous I/O schedulers. + + Admonition:Difference to CPython + :class: attention + + This function is a MicroPython extension. + """ + ... + +def select( + rlist: Iterable[Any], + wlist: Iterable[Any], + xlist: Iterable[Any], + timeout: int = -1, + /, +) -> None: + """ + Wait for activity on a set of objects. + + This function is provided by some MicroPython ports for compatibility + and is not efficient. Usage of :class:`Poll` is recommended instead. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/socket/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/socket/__init__.pyi new file mode 100644 index 00000000..013f2c25 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/socket/__init__.pyi @@ -0,0 +1,456 @@ +""" +Socket module. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/socket.html + +CPython module: :mod:`python:socket` https://docs.python.org/3/library/socket.html . + +This module provides access to the BSD socket interface. + +Admonition:Difference to CPython + :class: attention + + For efficiency and consistency, socket objects in MicroPython implement a `stream` + (file-like) interface directly. In CPython, you need to convert a socket to + a file-like object using `makefile()` method. This method is still supported + by MicroPython (but is a no-op), so where compatibility with CPython matters, + be sure to use it. + +Socket address format(s) +------------------------ + +The native socket address format of the ``socket`` module is an opaque data type +returned by `getaddrinfo` function, which must be used to resolve textual address +(including numeric addresses):: + + sockaddr = socket.getaddrinfo('www.micropython.org', 80)[0][-1] + # You must use getaddrinfo() even for numeric addresses + sockaddr = socket.getaddrinfo('127.0.0.1', 80)[0][-1] + # Now you can use that address + sock.connect(sockaddr) + +Using `getaddrinfo` is the most efficient (both in terms of memory and processing +power) and portable way to work with addresses. + +However, ``socket`` module (note the difference with native MicroPython +``socket`` module described here) provides CPython-compatible way to specify +addresses using tuples, as described below. Note that depending on a +:term:`MicroPython port`, ``socket`` module can be builtin or need to be +installed from `micropython-lib` (as in the case of :term:`MicroPython Unix port`), +and some ports still accept only numeric addresses in the tuple format, +and require to use `getaddrinfo` function to resolve domain names. + +Summing up: + +* Always use `getaddrinfo` when writing portable applications. +* Tuple addresses described below can be used as a shortcut for + quick hacks and interactive use, if your port supports them. + +Tuple address format for ``socket`` module: + +* IPv4: *(ipv4_address, port)*, where *ipv4_address* is a string with + dot-notation numeric IPv4 address, e.g. ``"8.8.8.8"``, and *port* is and + integer port number in the range 1-65535. Note the domain names are not + accepted as *ipv4_address*, they should be resolved first using + `socket.getaddrinfo()`. +* IPv6: *(ipv6_address, port, flowinfo, scopeid)*, where *ipv6_address* + is a string with colon-notation numeric IPv6 address, e.g. ``"2001:db8::1"``, + and *port* is an integer port number in the range 1-65535. *flowinfo* + must be 0. *scopeid* is the interface scope identifier for link-local + addresses. Note the domain names are not accepted as *ipv6_address*, + they should be resolved first using `socket.getaddrinfo()`. Availability + of IPv6 support depends on a :term:`MicroPython port`. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/socket.rst +from __future__ import annotations + +from typing import Literal, Tuple, overload + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf +from _typeshed import Incomplete +from stdlib.socket import * # type: ignore +from typing_extensions import TypeAlias + +_Address: TypeAlias = tuple[str, int] | tuple[str, int, int, int] | str +Socket: TypeAlias = socket + +AF_INET: Incomplete +"""Address family types. Availability depends on a particular :term:`MicroPython port`.""" +AF_INET6: Incomplete +"""Address family types. Availability depends on a particular :term:`MicroPython port`.""" +SOCK_STREAM: Incomplete +"""Socket types.""" +SOCK_DGRAM: Incomplete +"""Socket types.""" +IPPROTO_UDP: Incomplete +"""\ +IP protocol numbers. Availability depends on a particular :term:`MicroPython port`. +Note that you don't need to specify these in a call to `socket.socket()`, +because `SOCK_STREAM` socket type automatically selects `IPPROTO_TCP`, and +`SOCK_DGRAM` - `IPPROTO_UDP`. Thus, the only real use of these constants +is as an argument to `setsockopt()`. +""" +IPPROTO_TCP: Incomplete +"""\ +IP protocol numbers. Availability depends on a particular :term:`MicroPython port`. +Note that you don't need to specify these in a call to `socket.socket()`, +because `SOCK_STREAM` socket type automatically selects `IPPROTO_TCP`, and +`SOCK_DGRAM` - `IPPROTO_UDP`. Thus, the only real use of these constants +is as an argument to `setsockopt()`. +""" +# SOL_*: Incomplete +"""\ +Socket option levels (an argument to `setsockopt()`). The exact +inventory depends on a :term:`MicroPython port`. +""" +# SO_*: Incomplete +"""\ +Socket options (an argument to `setsockopt()`). The exact +inventory depends on a :term:`MicroPython port`. + +Constants specific to WiPy: +""" +IPPROTO_SEC: Incomplete +"""Special protocol value to create SSL-compatible socket.""" + +class socket: + """ + A unix like socket, for more information see module ``socket``'s description. + + The name, `Socket`, used for typing is not the same as the runtime name, `socket` (note lowercase `s`). + The reason for this difference is that the runtime uses `socket` as both a class name and as a method name and + this is not possible within code written entirely in Python and therefore not possible within typing code. + """ + + def __init__( + self, + af: int = AF_INET, + type: int = SOCK_STREAM, + proto: int = IPPROTO_TCP, + /, + ) -> None: + """ + Create a new socket using the given address family, socket type and + protocol number. Note that specifying *proto* in most cases is not + required (and not recommended, as some MicroPython ports may omit + ``IPPROTO_*`` constants). Instead, *type* argument will select needed + protocol automatically:: + + # Create STREAM TCP socket + socket(AF_INET, SOCK_STREAM) + # Create DGRAM UDP socket + socket(AF_INET, SOCK_DGRAM) + """ + + def close(self) -> None: + """ + Mark the socket closed and release all resources. Once that happens, all future operations + on the socket object will fail. The remote end will receive EOF indication if + supported by protocol. + + Sockets are automatically closed when they are garbage-collected, but it is recommended + to `close()` them explicitly as soon you finished working with them. + """ + ... + + def bind(self, address: _Address | bytes, /) -> None: + """ + Bind the socket to *address*. The socket must not already be bound. + """ + ... + + def listen(self, backlog: int = ..., /) -> None: + """ + Enable a server to accept connections. If *backlog* is specified, it must be at least 0 + (if it's lower, it will be set to 0); and specifies the number of unaccepted connections + that the system will allow before refusing new connections. If not specified, a default + reasonable value is chosen. + """ + ... + + def accept(self) -> Tuple: + """ + Accept a connection. The socket must be bound to an address and listening for connections. + The return value is a pair (conn, address) where conn is a new socket object usable to send + and receive data on the connection, and address is the address bound to the socket on the + other end of the connection. + """ + ... + + def connect(self, address: _Address | bytes, /) -> None: + """ + Connect to a remote socket at *address*. + """ + ... + + def send(self, bytes: AnyReadableBuf, /) -> int: + """ + Send data to the socket. The socket must be connected to a remote socket. + Returns number of bytes sent, which may be smaller than the length of data + ("short write"). + """ + ... + + def sendall(self, bytes: AnyReadableBuf, /) -> int: + """ + Send all data to the socket. The socket must be connected to a remote socket. + Unlike `send()`, this method will try to send all of data, by sending data + chunk by chunk consecutively. + + The behaviour of this method on non-blocking sockets is undefined. Due to this, + on MicroPython, it's recommended to use `write()` method instead, which + has the same "no short writes" policy for blocking sockets, and will return + number of bytes sent on non-blocking sockets. + """ + ... + + def recv(self, bufsize: int, /) -> bytes: + """ + Receive data from the socket. The return value is a bytes object representing the data + received. The maximum amount of data to be received at once is specified by bufsize. + """ + ... + + def sendto(self, bytes: AnyReadableBuf, address: _Address, /) -> None: + """ + Send data to the socket. The socket should not be connected to a remote socket, since the + destination socket is specified by *address*. + """ + ... + + def recvfrom(self, bufsize: int, /) -> Tuple: + """ + Receive data from the socket. The return value is a pair *(bytes, address)* where *bytes* is a + bytes object representing the data received and *address* is the address of the socket sending + the data. + """ + ... + + def setsockopt(self, level: int, optname: int, value: AnyReadableBuf | int, /) -> None: + """ + Set the value of the given socket option. The needed symbolic constants are defined in the + socket module (SO_* etc.). The *value* can be an integer or a bytes-like object representing + a buffer. + """ + ... + + def settimeout(self, value: float | None, /) -> None: + """ + **Note**: Not every port supports this method, see below. + + Set a timeout on blocking socket operations. The value argument can be a nonnegative floating + point number expressing seconds, or None. If a non-zero value is given, subsequent socket operations + will raise an `OSError` exception if the timeout period value has elapsed before the operation has + completed. If zero is given, the socket is put in non-blocking mode. If None is given, the socket + is put in blocking mode. + + Not every :term:`MicroPython port` supports this method. A more portable and + generic solution is to use `select.poll` object. This allows to wait on + multiple objects at the same time (and not just on sockets, but on generic + `stream` objects which support polling). Example:: + + # Instead of: + s.settimeout(1.0) # time in seconds + s.read(10) # may timeout + + # Use: + poller = select.poll() + poller.register(s, select.POLLIN) + res = poller.poll(1000) # time in milliseconds + if not res: + # s is still not ready for input, i.e. operation timed out + + Admonition:Difference to CPython + :class: attention + + CPython raises a ``socket.timeout`` exception in case of timeout, + which is an `OSError` subclass. MicroPython raises an OSError directly + instead. If you use ``except OSError:`` to catch the exception, + your code will work both in MicroPython and CPython. + """ + ... + + def setblocking(self, value: bool, /) -> None: + """ + Set blocking or non-blocking mode of the socket: if flag is false, the socket is set to non-blocking, + else to blocking mode. + + This method is a shorthand for certain `settimeout()` calls: + + * ``sock.setblocking(True)`` is equivalent to ``sock.settimeout(None)`` + * ``sock.setblocking(False)`` is equivalent to ``sock.settimeout(0)`` + """ + ... + + @overload + def makefile(self, mode: Literal["rb", "wb", "rwb"] = "rb", buffering: int = 0, /) -> Socket: + """ + Return a file object associated with the socket. The exact returned type depends on the arguments + given to makefile(). The support is limited to binary modes only ('rb', 'wb', and 'rwb'). + CPython's arguments: *encoding*, *errors* and *newline* are not supported. + + Admonition:Difference to CPython + :class: attention + + As MicroPython doesn't support buffered streams, values of *buffering* + parameter is ignored and treated as if it was 0 (unbuffered). + + Admonition:Difference to CPython + :class: attention + + Closing the file object returned by makefile() WILL close the + original socket as well. + """ + + @overload + def makefile(self, mode: str, buffering: int = 0, /) -> Socket: + """ + Return a file object associated with the socket. The exact returned type depends on the arguments + given to makefile(). The support is limited to binary modes only ('rb', 'wb', and 'rwb'). + CPython's arguments: *encoding*, *errors* and *newline* are not supported. + + Admonition:Difference to CPython + :class: attention + + As MicroPython doesn't support buffered streams, values of *buffering* + parameter is ignored and treated as if it was 0 (unbuffered). + + Admonition:Difference to CPython + :class: attention + + Closing the file object returned by makefile() WILL close the + original socket as well. + """ + + @overload + def read(self) -> bytes: + """ + Read up to size bytes from the socket. Return a bytes object. If *size* is not given, it + reads all data available from the socket until EOF; as such the method will not return until + the socket is closed. This function tries to read as much data as + requested (no "short reads"). This may be not possible with + non-blocking socket though, and then less data will be returned. + """ + + @overload + def read(self, size: int, /) -> bytes: + """ + Read up to size bytes from the socket. Return a bytes object. If *size* is not given, it + reads all data available from the socket until EOF; as such the method will not return until + the socket is closed. This function tries to read as much data as + requested (no "short reads"). This may be not possible with + non-blocking socket though, and then less data will be returned. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, /) -> int | None: + """ + Read bytes into the *buf*. If *nbytes* is specified then read at most + that many bytes. Otherwise, read at most *len(buf)* bytes. Just as + `read()`, this method follows "no short reads" policy. + + Return value: number of bytes read and stored into *buf*. + """ + + @overload + def readinto(self, buf: AnyWritableBuf, nbytes: int, /) -> int | None: + """ + Read bytes into the *buf*. If *nbytes* is specified then read at most + that many bytes. Otherwise, read at most *len(buf)* bytes. Just as + `read()`, this method follows "no short reads" policy. + + Return value: number of bytes read and stored into *buf*. + """ + + def readline(self) -> bytes: + """ + Read a line, ending in a newline character. + + Return value: the line read. + """ + ... + + def write(self, buf: AnyReadableBuf, /) -> int: + """ + Write the buffer of bytes to the socket. This function will try to + write all data to a socket (no "short writes"). This may be not possible + with a non-blocking socket though, and returned value will be less than + the length of *buf*. + + Return value: number of bytes written. + """ + ... + +class error(Exception): ... + +def getaddrinfo( + host: str, + port: int, + af: int = 0, + type: int = 0, + proto: int = 0, + flags: int = 0, + /, +) -> list[tuple[int, int, int, str, tuple[str, int] | tuple[str, int, int, int]]]: + """ + Translate the host/port argument into a sequence of 5-tuples that contain all the + necessary arguments for creating a socket connected to that service. Arguments + *af*, *type*, and *proto* (which have the same meaning as for the `socket()` function) + can be used to filter which kind of addresses are returned. If a parameter is not + specified or zero, all combinations of addresses can be returned (requiring + filtering on the user side). + + The resulting list of 5-tuples has the following structure:: + + (family, type, proto, canonname, sockaddr) + + The following example shows how to connect to a given url:: + + s = socket.socket() + # This assumes that if "type" is not specified, an address for + # SOCK_STREAM will be returned, which may be not true + s.connect(socket.getaddrinfo('www.micropython.org', 80)[0][-1]) + + Recommended use of filtering params:: + + s = socket.socket() + # Guaranteed to return an address which can be connect'ed to for + # stream operation. + s.connect(socket.getaddrinfo('www.micropython.org', 80, 0, SOCK_STREAM)[0][-1]) + + Admonition:Difference to CPython + :class: attention + + CPython raises a ``socket.gaierror`` exception (`OSError` subclass) in case + of error in this function. MicroPython doesn't have ``socket.gaierror`` + and raises OSError directly. Note that error numbers of `getaddrinfo()` + form a separate namespace and may not match error numbers from + the :mod:`errno` module. To distinguish `getaddrinfo()` errors, they are + represented by negative numbers, whereas standard system errors are + positive numbers (error numbers are accessible using ``e.args[0]`` property + from an exception object). The use of negative values is a provisional + detail which may change in the future. + """ + ... + +def inet_ntop(af: int, bin_addr: bytes, /) -> str: + """ + Convert a binary network address *bin_addr* of the given address family *af* + to a textual representation:: + + >>> socket.inet_ntop(socket.AF_INET, b"\x7f\0\0\1") + '127.0.0.1' + """ + ... + +def inet_pton(af: int, txt_addr: str, /) -> bytes: + """ + Convert a textual network address *txt_addr* of the given address family *af* + to a binary representation:: + + >>> socket.inet_pton(socket.AF_INET, "1.2.3.4") + b'\x01\x02\x03\x04' + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/ssl/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ssl/__init__.pyi new file mode 100644 index 00000000..d52ecc68 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ssl/__init__.pyi @@ -0,0 +1,149 @@ +""" +TLS/SSL wrapper for socket objects. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/ssl.html + +CPython module: :mod:`python:ssl` https://docs.python.org/3/library/ssl.html . + +This module provides access to Transport Layer Security (previously and +widely known as “Secure Sockets Layer”) encryption and peer authentication +facilities for network sockets, both client-side and server-side. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/ssl.rst +from __future__ import annotations + +from socket import socket +from typing import List + +from _mpy_shed import StrOrBytesPath +from _typeshed import Incomplete +from stdlib.ssl import * # type: ignore +from typing_extensions import TypeAlias + +SSLSocket: TypeAlias = Incomplete +SSLError: Incomplete +"""This exception does NOT exist. Instead its base class, OSError, is used.""" +PROTOCOL_TLS_CLIENT: Incomplete +"""Supported values for the *protocol* parameter.""" +PROTOCOL_TLS_SERVER: Incomplete +"""Supported values for the *protocol* parameter.""" +CERT_NONE: Incomplete +"""\ +Supported values for *cert_reqs* parameter, and the :attr:`SSLContext.verify_mode` +attribute. +""" +CERT_OPTIONAL: Incomplete +"""\ +Supported values for *cert_reqs* parameter, and the :attr:`SSLContext.verify_mode` +attribute. +""" +CERT_REQUIRED: Incomplete +"""\ +Supported values for *cert_reqs* parameter, and the :attr:`SSLContext.verify_mode` +attribute. +""" + +class SSLContext: + """ + Create a new SSLContext instance. The *protocol* argument must be one of the ``PROTOCOL_*`` + constants. + """ + + def __init__(self, protocol, /) -> None: ... + def load_cert_chain(self, certfile, keyfile) -> None: + """ + Load a private key and the corresponding certificate. The *certfile* is a string + with the file path of the certificate. The *keyfile* is a string with the file path + of the private key. + + Admonition:Difference to CPython + :class: attention + + MicroPython extension: *certfile* and *keyfile* can be bytes objects instead of + strings, in which case they are interpreted as the actual certificate/key data. + """ + ... + + def load_verify_locations(self, cafile=None, cadata=None) -> None: + """ + Load the CA certificate chain that will validate the peer's certificate. + *cafile* is the file path of the CA certificates. *cadata* is a bytes object + containing the CA certificates. Only one of these arguments should be provided. + """ + ... + + def get_ciphers(self) -> List[str]: + """ + Get a list of enabled ciphers, returned as a list of strings. + """ + ... + + def set_ciphers(self, ciphers) -> None: + """ + Set the available ciphers for sockets created with this context. *ciphers* should be + a list of strings in the `IANA cipher suite format `_ . + """ + ... + + def wrap_socket( + self, + sock, + *, + server_side=False, + do_handshake_on_connect=True, + server_hostname=None, + ) -> Incomplete: + """ + Takes a `stream` *sock* (usually socket.socket instance of ``SOCK_STREAM`` type), + and returns an instance of ssl.SSLSocket, wrapping the underlying stream. + The returned object has the usual `stream` interface methods like + ``read()``, ``write()``, etc. + + - *server_side* selects whether the wrapped socket is on the server or client side. + A server-side SSL socket should be created from a normal socket returned from + :meth:`~socket.socket.accept()` on a non-SSL listening server socket. + + - *do_handshake_on_connect* determines whether the handshake is done as part of the ``wrap_socket`` + or whether it is deferred to be done as part of the initial reads or writes + For blocking sockets doing the handshake immediately is standard. For non-blocking + sockets (i.e. when the *sock* passed into ``wrap_socket`` is in non-blocking mode) + the handshake should generally be deferred because otherwise ``wrap_socket`` blocks + until it completes. Note that in AXTLS the handshake can be deferred until the first + read or write but it then blocks until completion. + + - *server_hostname* is for use as a client, and sets the hostname to check against the received + server certificate. It also sets the name for Server Name Indication (SNI), allowing the server + to present the proper certificate. + """ + ... + +def wrap_socket( + sock: socket, + server_side: bool = False, + keyfile: StrOrBytesPath | None = None, + certfile: StrOrBytesPath | None = None, + cert_reqs: int = CERT_NONE, + ca_certs: str | None = None, + do_handshake: bool = True, + /, +) -> SSLSocket: + """ + Wrap the given *sock* and return a new wrapped-socket object. The implementation + of this function is to first create an `SSLContext` and then call the `SSLContext.wrap_socket` + method on that context object. The arguments *sock*, *server_side* and *server_hostname* are + passed through unchanged to the method call. The argument *do_handshake* is passed through as + *do_handshake_on_connect*. The remaining arguments have the following behaviour: + + - *cert_reqs* determines whether the peer (server or client) must present a valid certificate. + Note that for mbedtls based ports, ``ssl.CERT_NONE`` and ``ssl.CERT_OPTIONAL`` will not + validate any certificate, only ``ssl.CERT_REQUIRED`` will. + + - *cadata* is a bytes object containing the CA certificate chain (in DER format) that will + validate the peer's certificate. Currently only a single DER-encoded certificate is supported. + + Depending on the underlying module implementation in a particular + :term:`MicroPython port`, some or all keyword arguments above may be not supported. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/stm/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/stm/__init__.pyi new file mode 100644 index 00000000..65b45806 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/stm/__init__.pyi @@ -0,0 +1,113 @@ +""" +Functionality specific to STM32 MCUs. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/stm.html + +This module provides functionality specific to STM32 microcontrollers, including +direct access to peripheral registers. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/stm.rst +from __future__ import annotations + +from typing import Tuple + +from _typeshed import Incomplete + +mem8: bytearray +"""Read/write 8 bits of memory.""" +mem16: bytearray +"""Read/write 16 bits of memory.""" +mem32: bytearray +"""\ +Read/write 32 bits of memory. + +Use subscript notation ``[...]`` to index these objects with the address of +interest. + +These memory objects can be used in combination with the peripheral register +constants to read and write registers of the MCU hardware peripherals, as well +as all other areas of address space. +""" +GPIOA: int +"""Base address of the GPIOA peripheral.""" +GPIOB: int +"""Base address of the GPIOB peripheral.""" +GPIO_BSRR: Incomplete +"""Offset of the GPIO bit set/reset register.""" +GPIO_IDR: Incomplete +"""Offset of the GPIO input data register.""" +GPIO_ODR: int +"""\ +Offset of the GPIO output data register. + +Constants that are named after a peripheral, like ``GPIOA``, are the absolute +address of that peripheral. Constants that have a prefix which is the name of a +peripheral, like ``GPIO_BSRR``, are relative offsets of the register. Accessing +peripheral registers requires adding the absolute base address of the peripheral +and the relative register offset. For example ``GPIOA + GPIO_BSRR`` is the +full, absolute address of the ``GPIOA->BSRR`` register. + +Example use: +""" + +def rfcore_status() -> int: + """ + Returns the status of the second CPU as an integer (the first word of device + info table). + """ + ... + +def rfcore_fw_version(id: int, /) -> Tuple: + """ + Get the version of the firmware running on the second CPU. Pass in 0 for + *id* to get the FUS version, and 1 to get the WS version. + + Returns a 5-tuple with the full version number. + """ + ... + +def rfcore_sys_hci(ogf: int, ocf: int, data: int, timeout_ms: int = 0, /) -> bytes: + """ + Execute a HCI command on the SYS channel. The execution is synchronous. + + Returns a bytes object with the result of the SYS command. + """ + ... + +def subghz_cs(level) -> None: + """ + Sets the internal SPI CS pin attached to the radio peripheral. The ``level`` + argument is active-low: a truthy value means "CS pin high" and de-asserts the + signal, a falsey value means "CS pin low" and asserts the signal. + + The internal-only SPI bus corresponding to this CS signal can be instantiated + using :ref:`machine.SPI()` ``id`` value ``"SUBGHZ"``. + """ + ... + +def subghz_irq(handler) -> None: + """ + Sets the internal SUBGHZ radio interrupt handler to the provided + function. The handler function is called as a "hard" interrupt in response to + radio peripheral interrupts. See :ref:`isr_rules` for more information about + interrupt handlers in MicroPython. + + Calling this function with the handler argument set to None disables the IRQ. + + Due to a hardware limitation, each time this IRQ fires MicroPython disables + it before calling the handler. In order to receive another interrupt, Python + code should call ``subghz_irq()`` to set the handler again. This has the side + effect of re-enabling the IRQ. + """ + ... + +def subghz_is_busy() -> bool: + """ + Return a ``bool`` corresponding to the internal "RFBUSYS" signal from the + radio peripheral. Before sending a new command to the radio over SPI then + this function should be polled until it returns ``False``, to confirm the + busy signal is de-asserted. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/struct/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/struct/__init__.pyi new file mode 100644 index 00000000..d5589b3f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/struct/__init__.pyi @@ -0,0 +1,104 @@ +""" +Pack and unpack primitive data types. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/struct.html + +CPython module: :mod:`python:struct` https://docs.python.org/3/library/struct.html . + +The following byte orders are supported: + ++-----------+------------------------+----------+-----------+ +| Character | Byte order | Size | Alignment | ++===========+========================+==========+===========+ +| @ | native | native | native | ++-----------+------------------------+----------+-----------+ +| < | little-endian | standard | none | ++-----------+------------------------+----------+-----------+ +| > | big-endian | standard | none | ++-----------+------------------------+----------+-----------+ +| ! | network (= big-endian) | standard | none | ++-----------+------------------------+----------+-----------+ + +The following data types are supported: + ++--------+--------------------+-------------------+---------------+ +| Format | C Type | Python type | Standard size | ++========+====================+===================+===============+ +| b | signed char | integer | 1 | ++--------+--------------------+-------------------+---------------+ +| B | unsigned char | integer | 1 | ++--------+--------------------+-------------------+---------------+ +| h | short | integer | 2 | ++--------+--------------------+-------------------+---------------+ +| H | unsigned short | integer | 2 | ++--------+--------------------+-------------------+---------------+ +| i | int | integer (`1`) | 4 | ++--------+--------------------+-------------------+---------------+ +| I | unsigned int | integer (`1`) | 4 | ++--------+--------------------+-------------------+---------------+ +| l | long | integer (`1`) | 4 | ++--------+--------------------+-------------------+---------------+ +| L | unsigned long | integer (`1`) | 4 | ++--------+--------------------+-------------------+---------------+ +| q | long long | integer (`1`) | 8 | ++--------+--------------------+-------------------+---------------+ +| Q | unsigned long long | integer (`1`) | 8 | ++--------+--------------------+-------------------+---------------+ +| e | n/a (half-float) | float (`2`) | 2 | ++--------+--------------------+-------------------+---------------+ +| f | float | float (`2`) | 4 | ++--------+--------------------+-------------------+---------------+ +| d | double | float (`2`) | 8 | ++--------+--------------------+-------------------+---------------+ +| s | char[] | bytes | | ++--------+--------------------+-------------------+---------------+ +| P | void * | integer | | ++--------+--------------------+-------------------+---------------+ +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/struct.rst +from __future__ import annotations + +from typing import Any, Tuple + +from _mpy_shed import AnyReadableBuf, AnyWritableBuf + +def calcsize( + fmt: str | bytes, + /, +) -> int: + """ + Return the number of bytes needed to store the given *fmt*. + """ + ... + +def pack(fmt: str | bytes, /, *v: Any) -> bytes: + """ + Pack the values *v1*, *v2*, ... according to the format string *fmt*. + The return value is a bytes object encoding the values. + """ + ... + +def pack_into(fmt: str | bytes, buffer: AnyWritableBuf, offset: int, /, *v: Any) -> None: + """ + Pack the values *v1*, *v2*, ... according to the format string *fmt* + into a *buffer* starting at *offset*. *offset* may be negative to count + from the end of *buffer*. + """ + ... + +def unpack(fmt: str | bytes, data: AnyReadableBuf, /) -> Tuple: + """ + Unpack from the *data* according to the format string *fmt*. + The return value is a tuple of the unpacked values. + """ + ... + +def unpack_from(fmt: str | bytes, data: AnyReadableBuf, offset: int = 0, /) -> Tuple: + """ + Unpack from the *data* starting at *offset* according to the format string + *fmt*. *offset* may be negative to count from the end of *data*. The return + value is a tuple of the unpacked values. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/sys/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/sys/__init__.pyi new file mode 100644 index 00000000..e2d57dab --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/sys/__init__.pyi @@ -0,0 +1,176 @@ +""" +System specific functions. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/sys.html + +CPython module: :mod:`python:sys` https://docs.python.org/3/library/sys.html . +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/sys.rst +from __future__ import annotations + +from typing import Callable, Dict, List, NoReturn, Tuple + +from _mpy_shed import IOBase +from _typeshed import Incomplete + +argv: List +"""A mutable list of arguments the current program was started with.""" +byteorder: Incomplete +"""The byte order of the system (``"little"`` or ``"big"``).""" +implementation: Incomplete +"""\ +Object with information about the current Python implementation. For +MicroPython, it has following attributes: + +* *name* - string "micropython" +* *version* - tuple (major, minor, micro, releaselevel), e.g. (1, 22, 0, '') +* *_machine* - string describing the underlying machine +* *_mpy* - supported mpy file-format version (optional attribute) + +This object is the recommended way to distinguish MicroPython from other +Python implementations (note that it still may not exist in the very +minimal ports). + +Starting with version 1.22.0-preview, the fourth node *releaselevel* in +*implementation.version* is either an empty string or ``"preview"``. + +Admonition:Difference to CPython +:class: attention + +CPython mandates more attributes for this object, but the actual useful +bare minimum is implemented in MicroPython. +""" +maxsize: int +"""\ +Maximum value which a native integer type can hold on the current platform, +or maximum value representable by MicroPython integer type, if it's smaller +than platform max value (that is the case for MicroPython ports without +long int support). + +This attribute is useful for detecting "bitness" of a platform (32-bit vs +64-bit, etc.). It's recommended to not compare this attribute to some +value directly, but instead count number of bits in it:: + +bits = 0 +v = sys.maxsize +while v: +bits += 1 +v >>= 1 +if bits > 32: +# 64-bit (or more) platform +""" +modules: Dict +"""\ +Dictionary of loaded modules. On some ports, it may not include builtin +modules. +""" +path: List +"""\ +A mutable list of directories to search for imported modules. + +Admonition:Difference to CPython +:class: attention + +On MicroPython, an entry with the value ``".frozen"`` will indicate that import +should search :term:`frozen modules ` at that point in the search. +If no frozen module is found then search will *not* look for a directory called +``.frozen``, instead it will continue with the next entry in ``sys.path``. +""" +platform: Incomplete +"""\ +The platform that MicroPython is running on. For OS/RTOS ports, this is +usually an identifier of the OS, e.g. ``"linux"``. For baremetal ports it +is an identifier of a board, e.g. ``"pyboard"`` for the original MicroPython +reference board. It thus can be used to distinguish one board from another. +If you need to check whether your program runs on MicroPython (vs other +Python implementation), use `sys.implementation` instead. +""" +ps1: Incomplete +"""\ +Mutable attributes holding strings, which are used for the REPL prompt. The defaults +give the standard Python prompt of ``>>>`` and ``...``. +""" +ps2: Incomplete +"""\ +Mutable attributes holding strings, which are used for the REPL prompt. The defaults +give the standard Python prompt of ``>>>`` and ``...``. +""" +stderr: Incomplete +"""Standard error `stream`.""" +stdin: Incomplete +"""Standard input `stream`.""" +stdout: Incomplete +"""Standard output `stream`.""" +tracebacklimit: int +"""\ +A mutable attribute holding an integer value which is the maximum number of traceback +entries to store in an exception. Set to 0 to disable adding tracebacks. Defaults +to 1000. + +Note: this is not available on all ports. +""" +version: str +"""Python language version that this implementation conforms to, as a string.""" +version_info: Tuple +"""\ +Python language version that this implementation conforms to, as a tuple of ints. + +Admonition:Difference to CPython +:class: attention + +Only the first three version numbers (major, minor, micro) are supported and +they can be referenced only by index, not by name. +""" + +def exit(retval: object = 0, /) -> NoReturn: + """ + Terminate current program with a given exit code. Underlyingly, this + function raise as `SystemExit` exception. If an argument is given, its + value given as an argument to `SystemExit`. + """ + ... + +def atexit(func: Callable[[], None] | None, /) -> Callable[[], None] | None: + """ + Register *func* to be called upon termination. *func* must be a callable + that takes no arguments, or ``None`` to disable the call. The ``atexit`` + function will return the previous value set by this function, which is + initially ``None``. + + Admonition:Difference to CPython + :class: attention + + This function is a MicroPython extension intended to provide similar + functionality to the :mod:`atexit` module in CPython. + """ + ... + +def print_exception(exc: BaseException, file: IOBase = stdout, /) -> None: + """ + Print exception with a traceback to a file-like object *file* (or + `sys.stdout` by default). + + Admonition:Difference to CPython + :class: attention + + This is simplified version of a function which appears in the + ``traceback`` module in CPython. Unlike ``traceback.print_exception()``, + this function takes just exception value instead of exception type, + exception value, and traceback object; *file* argument should be + positional; further arguments are not supported. CPython-compatible + ``traceback`` module can be found in `micropython-lib`. + """ + ... + +def settrace(tracefunc) -> None: + """ + Enable tracing of bytecode execution. For details see the `CPython + documentation `. + + This function requires a custom MicroPython build as it is typically not + present in pre-built firmware (due to it affecting performance). The relevant + configuration option is *MICROPY_PY_SYS_SETTRACE*. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/time/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/time/__init__.pyi new file mode 100644 index 00000000..aa3a5355 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/time/__init__.pyi @@ -0,0 +1,305 @@ +""" +Time related functions. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/time.html + +CPython module: :mod:`python:time` https://docs.python.org/3/library/time.html . + +The ``time`` module provides functions for getting the current time and date, +measuring time intervals, and for delays. + +**Time Epoch**: Unix port uses standard for POSIX systems epoch of +1970-01-01 00:00:00 UTC. However, some embedded ports use epoch of +2000-01-01 00:00:00 UTC. Epoch year may be determined with ``gmtime(0)[0]``. + +**Maintaining actual calendar date/time**: This requires a +Real Time Clock (RTC). On systems with underlying OS (including some +RTOS), an RTC may be implicit. Setting and maintaining actual calendar +time is responsibility of OS/RTOS and is done outside of MicroPython, +it just uses OS API to query date/time. On baremetal ports however +system time depends on ``machine.RTC()`` object. The current calendar time +may be set using ``machine.RTC().datetime(tuple)`` function, and maintained +by following means: + +* By a backup battery (which may be an additional, optional component for + a particular board). +* Using networked time protocol (requires setup by a port/user). +* Set manually by a user on each power-up (many boards then maintain + RTC time across hard resets, though some may require setting it again + in such case). + +If actual calendar time is not maintained with a system/MicroPython RTC, +functions below which require reference to current absolute time may +behave not as expected. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/time.rst +from __future__ import annotations + +from typing import Tuple + +from typing_extensions import TypeAlias, TypeVar + +_TicksMs: TypeAlias = int +_TicksUs: TypeAlias = int +_TicksCPU: TypeAlias = int +_Ticks = TypeVar("_Ticks", _TicksMs, _TicksUs, _TicksCPU, int) +_Time8Tuple: TypeAlias = Tuple[int, int, int, int, int, int, int, int, int] +_Time9Tuple: TypeAlias = Tuple[int, int, int, int, int, int, int, int, int, int] +_TimeTuple: TypeAlias = _Time8Tuple | _Time9Tuple + +def gmtime(secs: int | None = None, /) -> Tuple: + """ + Convert the time *secs* expressed in seconds since the Epoch (see above) into an + 8-tuple which contains: ``(year, month, mday, hour, minute, second, weekday, yearday)`` + If *secs* is not provided or None, then the current time from the RTC is used. + + The `gmtime()` function returns a date-time tuple in UTC, and `localtime()` returns a + date-time tuple in local time. + + The format of the entries in the 8-tuple are: + + * year includes the century (for example 2014). + * month is 1-12 + * mday is 1-31 + * hour is 0-23 + * minute is 0-59 + * second is 0-59 + * weekday is 0-6 for Mon-Sun + * yearday is 1-366 + """ + ... + +def localtime(secs: int | None = None, /) -> Tuple: + """ + Convert the time *secs* expressed in seconds since the Epoch (see above) into an + 8-tuple which contains: ``(year, month, mday, hour, minute, second, weekday, yearday)`` + If *secs* is not provided or None, then the current time from the RTC is used. + + The `gmtime()` function returns a date-time tuple in UTC, and `localtime()` returns a + date-time tuple in local time. + + The format of the entries in the 8-tuple are: + + * year includes the century (for example 2014). + * month is 1-12 + * mday is 1-31 + * hour is 0-23 + * minute is 0-59 + * second is 0-59 + * weekday is 0-6 for Mon-Sun + * yearday is 1-366 + """ + ... + +def mktime(local_time: _TimeTuple, /) -> int: + """ + This is inverse function of localtime. It's argument is a full 8-tuple + which expresses a time as per localtime. It returns an integer which is + the number of seconds since Jan 1, 2000. + """ + ... + +def sleep(seconds: float, /) -> None: + """ + Sleep for the given number of seconds. Some boards may accept *seconds* as a + floating-point number to sleep for a fractional number of seconds. Note that + other boards may not accept a floating-point argument, for compatibility with + them use `sleep_ms()` and `sleep_us()` functions. + """ + ... + +def sleep_ms(ms: int, /) -> None: + """ + Delay for given number of milliseconds, should be positive or 0. + + This function will delay for at least the given number of milliseconds, but + may take longer than that if other processing must take place, for example + interrupt handlers or other threads. Passing in 0 for *ms* will still allow + this other processing to occur. Use `sleep_us()` for more precise delays. + """ + ... + +def sleep_us(us: int, /) -> None: + """ + Delay for given number of microseconds, should be positive or 0. + + This function attempts to provide an accurate delay of at least *us* + microseconds, but it may take longer if the system has other higher priority + processing to perform. + """ + ... + +def ticks_ms() -> int: + """ + Returns an increasing millisecond counter with an arbitrary reference point, that + wraps around after some value. + + The wrap-around value is not explicitly exposed, but we will + refer to it as *TICKS_MAX* to simplify discussion. Period of the values is + *TICKS_PERIOD = TICKS_MAX + 1*. *TICKS_PERIOD* is guaranteed to be a power of + two, but otherwise may differ from port to port. The same period value is used + for all of `ticks_ms()`, `ticks_us()`, `ticks_cpu()` functions (for + simplicity). Thus, these functions will return a value in range [*0* .. + *TICKS_MAX*], inclusive, total *TICKS_PERIOD* values. Note that only + non-negative values are used. For the most part, you should treat values returned + by these functions as opaque. The only operations available for them are + `ticks_diff()` and `ticks_add()` functions described below. + + Note: Performing standard mathematical operations (+, -) or relational + operators (<, <=, >, >=) directly on these value will lead to invalid + result. Performing mathematical operations and then passing their results + as arguments to `ticks_diff()` or `ticks_add()` will also lead to + invalid results from the latter functions. + """ + ... + +def ticks_us() -> _TicksUs: + """ + Just like `ticks_ms()` above, but in microseconds. + """ + ... + +def ticks_cpu() -> _TicksCPU: + """ + Similar to `ticks_ms()` and `ticks_us()`, but with the highest possible resolution + in the system. This is usually CPU clocks, and that's why the function is named that + way. But it doesn't have to be a CPU clock, some other timing source available in a + system (e.g. high-resolution timer) can be used instead. The exact timing unit + (resolution) of this function is not specified on ``time`` module level, but + documentation for a specific port may provide more specific information. This + function is intended for very fine benchmarking or very tight real-time loops. + Avoid using it in portable code. + + Availability: Not every port implements this function. + """ + ... + +def ticks_add(ticks: _Ticks, delta: int, /) -> _Ticks: + """ + Offset ticks value by a given number, which can be either positive or negative. + Given a *ticks* value, this function allows to calculate ticks value *delta* + ticks before or after it, following modular-arithmetic definition of tick values + (see `ticks_ms()` above). *ticks* parameter must be a direct result of call + to `ticks_ms()`, `ticks_us()`, or `ticks_cpu()` functions (or from previous + call to `ticks_add()`). However, *delta* can be an arbitrary integer number + or numeric expression. `ticks_add()` is useful for calculating deadlines for + events/tasks. (Note: you must use `ticks_diff()` function to work with + deadlines.) + + Examples:: + + # Find out what ticks value there was 100ms ago + print(ticks_add(time.ticks_ms(), -100)) + + # Calculate deadline for operation and test for it + deadline = ticks_add(time.ticks_ms(), 200) + while ticks_diff(deadline, time.ticks_ms()) > 0: + do_a_little_of_something() + + # Find out TICKS_MAX used by this port + print(ticks_add(0, -1)) + """ + ... + +def ticks_diff(ticks1: _Ticks, ticks2: _Ticks, /) -> int: + """ + Measure ticks difference between values returned from `ticks_ms()`, `ticks_us()`, + or `ticks_cpu()` functions, as a signed value which may wrap around. + + The argument order is the same as for subtraction + operator, ``ticks_diff(ticks1, ticks2)`` has the same meaning as ``ticks1 - ticks2``. + However, values returned by `ticks_ms()`, etc. functions may wrap around, so + directly using subtraction on them will produce incorrect result. That is why + `ticks_diff()` is needed, it implements modular (or more specifically, ring) + arithmetic to produce correct result even for wrap-around values (as long as they not + too distant in between, see below). The function returns **signed** value in the range + [*-TICKS_PERIOD/2* .. *TICKS_PERIOD/2-1*] (that's a typical range definition for + two's-complement signed binary integers). If the result is negative, it means that + *ticks1* occurred earlier in time than *ticks2*. Otherwise, it means that + *ticks1* occurred after *ticks2*. This holds **only** if *ticks1* and *ticks2* + are apart from each other for no more than *TICKS_PERIOD/2-1* ticks. If that does + not hold, incorrect result will be returned. Specifically, if two tick values are + apart for *TICKS_PERIOD/2-1* ticks, that value will be returned by the function. + However, if *TICKS_PERIOD/2* of real-time ticks has passed between them, the + function will return *-TICKS_PERIOD/2* instead, i.e. result value will wrap around + to the negative range of possible values. + + Informal rationale of the constraints above: Suppose you are locked in a room with no + means to monitor passing of time except a standard 12-notch clock. Then if you look at + dial-plate now, and don't look again for another 13 hours (e.g., if you fall for a + long sleep), then once you finally look again, it may seem to you that only 1 hour + has passed. To avoid this mistake, just look at the clock regularly. Your application + should do the same. "Too long sleep" metaphor also maps directly to application + behaviour: don't let your application run any single task for too long. Run tasks + in steps, and do time-keeping in between. + + `ticks_diff()` is designed to accommodate various usage patterns, among them: + + * Polling with timeout. In this case, the order of events is known, and you will deal + only with positive results of `ticks_diff()`:: + + # Wait for GPIO pin to be asserted, but at most 500us + start = time.ticks_us() + while pin.value() == 0: + if time.ticks_diff(time.ticks_us(), start) > 500: + raise TimeoutError + + * Scheduling events. In this case, `ticks_diff()` result may be negative + if an event is overdue:: + + # This code snippet is not optimized + now = time.ticks_ms() + scheduled_time = task.scheduled_time() + if ticks_diff(scheduled_time, now) > 0: + print("Too early, let's nap") + sleep_ms(ticks_diff(scheduled_time, now)) + task.run() + elif ticks_diff(scheduled_time, now) == 0: + print("Right at time!") + task.run() + elif ticks_diff(scheduled_time, now) < 0: + print("Oops, running late, tell task to run faster!") + task.run(run_faster=true) + + Note: Do not pass `time()` values to `ticks_diff()`, you should use + normal mathematical operations on them. But note that `time()` may (and will) + also overflow. This is known as https://en.wikipedia.org/wiki/Year_2038_problem . + """ + ... + +def time() -> int: + """ + Returns the number of seconds, as an integer, since the Epoch, assuming that + underlying RTC is set and maintained as described above. If an RTC is not set, this + function returns number of seconds since a port-specific reference point in time (for + embedded boards without a battery-backed RTC, usually since power up or reset). If you + want to develop portable MicroPython application, you should not rely on this function + to provide higher than second precision. If you need higher precision, absolute + timestamps, use `time_ns()`. If relative times are acceptable then use the + `ticks_ms()` and `ticks_us()` functions. If you need calendar time, `gmtime()` or + `localtime()` without an argument is a better choice. + + Admonition:Difference to CPython + :class: attention + + In CPython, this function returns number of + seconds since Unix epoch, 1970-01-01 00:00 UTC, as a floating-point, + usually having microsecond precision. With MicroPython, only Unix port + uses the same Epoch, and if floating-point precision allows, + returns sub-second precision. Embedded hardware usually doesn't have + floating-point precision to represent both long time ranges and subsecond + precision, so they use integer value with second precision. Some embedded + hardware also lacks battery-powered RTC, so returns number of seconds + since last power-up or from other relative, hardware-specific point + (e.g. reset). + """ + ... + +def time_ns() -> int: + """ + Similar to `time()` but returns nanoseconds since the Epoch, as an integer (usually + a big integer, so will allocate on the heap). + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/uarray.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uarray.pyi new file mode 100644 index 00000000..873ca499 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uarray.pyi @@ -0,0 +1,4 @@ +# array module +# Allow the use of micro-module notation + +from array import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/ubinascii.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ubinascii.pyi new file mode 100644 index 00000000..fe2d8f75 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ubinascii.pyi @@ -0,0 +1,4 @@ +# binascii module +# Allow the use of micro-module notation + +from binascii import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/uctypes/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uctypes/__init__.pyi new file mode 100644 index 00000000..c6dabc58 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uctypes/__init__.pyi @@ -0,0 +1,159 @@ +""" +Access binary data in a structured way. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/uctypes.html + +This module implements "foreign data interface" for MicroPython. The idea +behind it is similar to CPython's ``ctypes`` modules, but the actual API is +different, streamlined and optimized for small size. The basic idea of the +module is to define data structure layout with about the same power as the +C language allows, and then access it using familiar dot-syntax to reference +sub-fields. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/uctypes.rst +from __future__ import annotations + +from _mpy_shed import AnyReadableBuf +from _typeshed import Incomplete +from typing_extensions import TypeAlias + +_ScalarProperty: TypeAlias = int +_RecursiveProperty: TypeAlias = tuple[int, _property] +_ArrayProperty: TypeAlias = tuple[int, int] +_ArrayOfAggregateProperty: TypeAlias = tuple[int, int, _property] +_PointerToAPrimitiveProperty: TypeAlias = tuple[int, int] +_PointerToAaAggregateProperty: TypeAlias = tuple[int, "_property"] +_BitfieldProperty: TypeAlias = int +_property: TypeAlias = ( + _ScalarProperty + | _RecursiveProperty + | _ArrayProperty + | _ArrayOfAggregateProperty + | _PointerToAPrimitiveProperty + | _PointerToAaAggregateProperty + | _BitfieldProperty +) +_descriptor: TypeAlias = tuple[str, _property] + +LITTLE_ENDIAN: bytes +"""\ +Layout type for a little-endian packed structure. (Packed means that every +field occupies exactly as many bytes as defined in the descriptor, i.e. +the alignment is 1). +""" +BIG_ENDIAN: Incomplete +"""Layout type for a big-endian packed structure.""" +NATIVE: Incomplete +"""\ +Layout type for a native structure - with data endianness and alignment +conforming to the ABI of the system on which MicroPython runs. +""" +UINT8: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +INT8: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +UINT16: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +INT16: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +UINT32: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +INT32: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +UINT64: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +INT64: int +"""\ +Integer types for structure descriptors. Constants for 8, 16, 32, +and 64 bit types are provided, both signed and unsigned. +""" +FLOAT32: Incomplete +"""Floating-point types for structure descriptors.""" +FLOAT64: Incomplete +"""Floating-point types for structure descriptors.""" +VOID: Incomplete +"""\ +``VOID`` is an alias for ``UINT8``, and is provided to conveniently define +C's void pointers: ``(uctypes.PTR, uctypes.VOID)``. +""" +PTR: Incomplete +"""\ +Type constants for pointers and arrays. Note that there is no explicit +constant for structures, it's implicit: an aggregate type without ``PTR`` +or ``ARRAY`` flags is a structure. +""" +ARRAY: Incomplete +"""\ +Type constants for pointers and arrays. Note that there is no explicit +constant for structures, it's implicit: an aggregate type without ``PTR`` +or ``ARRAY`` flags is a structure. +""" + +class struct: + """ + Module contents + --------------- + """ + + def __init__(self, addr: int, descriptor: _descriptor, layout_type: int = NATIVE, /) -> None: + """ + Instantiate a "foreign data structure" object based on structure address in + memory, descriptor (encoded as a dictionary), and layout type (see below). + """ + +def sizeof(struct: struct | _descriptor, layout_type: int = NATIVE, /) -> int: + """ + Return size of data structure in bytes. The *struct* argument can be + either a structure class or a specific instantiated structure object + (or its aggregate field). + """ + ... + +def addressof(obj: AnyReadableBuf, /) -> int: + """ + Return address of an object. Argument should be bytes, bytearray or + other object supporting buffer protocol (and address of this buffer + is what actually returned). + """ + ... + +def bytes_at(addr: int, size: int, /) -> bytes: + """ + Capture memory at the given address and size as bytes object. As bytes + object is immutable, memory is actually duplicated and copied into + bytes object, so if memory contents change later, created object + retains original value. + """ + ... + +def bytearray_at(addr: int, size: int, /) -> bytearray: + """ + Capture memory at the given address and size as bytearray object. + Unlike bytes_at() function above, memory is captured by reference, + so it can be both written too, and you will access current value + at the given memory address. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/uio.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uio.pyi new file mode 100644 index 00000000..626627aa --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uio.pyi @@ -0,0 +1,4 @@ +# io module +# Allow the use of micro-module notation + +from io import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/ujson.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ujson.pyi new file mode 100644 index 00000000..0787dd0d --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ujson.pyi @@ -0,0 +1,4 @@ +# json module +# Allow the use of micro-module notation + +from json import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/uos.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uos.pyi new file mode 100644 index 00000000..53577fd8 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uos.pyi @@ -0,0 +1,4 @@ +# os module +# Allow the use of micro-module notation + +from os import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/uselect.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uselect.pyi new file mode 100644 index 00000000..aca325ac --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uselect.pyi @@ -0,0 +1,4 @@ +# select module +# Allow the use of micro-module notation + +from select import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/usocket.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/usocket.pyi new file mode 100644 index 00000000..2ab1f572 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/usocket.pyi @@ -0,0 +1,4 @@ +# socket module +# Allow the use of micro-module notation + +from socket import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/ussl.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ussl.pyi new file mode 100644 index 00000000..d0531009 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ussl.pyi @@ -0,0 +1,4 @@ +# ssl module +# Allow the use of micro-module notation + +from ssl import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/ustruct.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ustruct.pyi new file mode 100644 index 00000000..0fa28b2a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/ustruct.pyi @@ -0,0 +1,4 @@ +# struct module +# Allow the use of micro-module notation + +from struct import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/utime.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/utime.pyi new file mode 100644 index 00000000..a3289ce4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/utime.pyi @@ -0,0 +1,4 @@ +# time module +# Allow the use of micro-module notation + +from time import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/uzlib.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uzlib.pyi new file mode 100644 index 00000000..6598ed9d --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/uzlib.pyi @@ -0,0 +1,4 @@ +# zlib module +# Allow the use of micro-module notation + +from zlib import * # type: ignore diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/vfs/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/vfs/__init__.pyi new file mode 100644 index 00000000..24bb8fb7 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/vfs/__init__.pyi @@ -0,0 +1,209 @@ +""" +Virtual filesystem control. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/vfs.html + +The ``vfs`` module contains functions for creating filesystem objects and +mounting/unmounting them in the Virtual Filesystem. + +Filesystem mounting +------------------- + +Some ports provide a Virtual Filesystem (VFS) and the ability to mount multiple +"real" filesystems within this VFS. Filesystem objects can be mounted at either +the root of the VFS, or at a subdirectory that lives in the root. This allows +dynamic and flexible configuration of the filesystem that is seen by Python +programs. Ports that have this functionality provide the :func:`mount` and +:func:`umount` functions, and possibly various filesystem implementations +represented by VFS classes. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/vfs.rst +from __future__ import annotations + +from typing import Optional + +from _mpy_shed.blockdevice import AbstractBlockDev as _AbstractBlockDev +from _typeshed import Incomplete + +class VfsFat: + """ + Create a filesystem object that uses the FAT filesystem format. Storage of + the FAT filesystem is provided by *block_dev*. + Objects created by this constructor can be mounted using :func:`mount`. + """ + + def __init__(self, block_dev: AbstractBlockDev) -> None: ... + @staticmethod + def mkfs(block_dev: AbstractBlockDev) -> None: + """ + Build a FAT filesystem on *block_dev*. + """ + ... + +class VfsLfs1: + """ + Create a filesystem object that uses the `littlefs v1 filesystem format`_. + Storage of the littlefs filesystem is provided by *block_dev*, which must + support the :ref:`extended interface `. + Objects created by this constructor can be mounted using :func:`mount`. + + See :ref:`filesystem` for more information. + """ + + def __init__(self, block_dev: AbstractBlockDev, readsize=32, progsize=32, lookahead=32) -> None: ... + @staticmethod + def mkfs(block_dev: AbstractBlockDev, readsize=32, progsize=32, lookahead=32) -> None: + """ + Build a Lfs1 filesystem on *block_dev*. + + ``Note:`` There are reports of littlefs v1 failing in certain situations, + for details see `littlefs issue 347`_. + """ + ... + +class VfsLfs2: + """ + Create a filesystem object that uses the `littlefs v2 filesystem format`_. + Storage of the littlefs filesystem is provided by *block_dev*, which must + support the :ref:`extended interface `. + Objects created by this constructor can be mounted using :func:`mount`. + + The *mtime* argument enables modification timestamps for files, stored using + littlefs attributes. This option can be disabled or enabled differently each + mount time and timestamps will only be added or updated if *mtime* is enabled, + otherwise the timestamps will remain untouched. Littlefs v2 filesystems without + timestamps will work without reformatting and timestamps will be added + transparently to existing files once they are opened for writing. When *mtime* + is enabled `os.stat` on files without timestamps will return 0 for the timestamp. + + See :ref:`filesystem` for more information. + """ + + def __init__(self, block_dev: AbstractBlockDev, readsize=32, progsize=32, lookahead=32, mtime=True) -> None: ... + @staticmethod + def mkfs(block_dev: AbstractBlockDev, readsize=32, progsize=32, lookahead=32) -> None: + """ + Build a Lfs2 filesystem on *block_dev*. + + ``Note:`` There are reports of littlefs v2 failing in certain situations, + for details see `littlefs issue 295`_. + """ + ... + +class VfsPosix: + """ + Create a filesystem object that accesses the host POSIX filesystem. + If *root* is specified then it should be a path in the host filesystem to use + as the root of the ``VfsPosix`` object. Otherwise the current directory of + the host filesystem is used. + """ + + def __init__(self, root: str | None = None) -> None: ... + +class AbstractBlockDev(_AbstractBlockDev): + """ + Construct a block device object. The parameters to the constructor are + dependent on the specific block device. + """ + + def __init__(self, *args, **kwargs) -> None: ... + def readblocks(self, block_num: int, buf, offset: Optional[int] = 0) -> Incomplete: + """ + The first form reads aligned, multiples of blocks. + Starting at the block given by the index *block_num*, read blocks from + the device into *buf* (an array of bytes). + The number of blocks to read is given by the length of *buf*, + which will be a multiple of the block size. + + The second form allows reading at arbitrary locations within a block, + and arbitrary lengths. + Starting at block index *block_num*, and byte offset within that block + of *offset*, read bytes from the device into *buf* (an array of bytes). + The number of bytes to read is given by the length of *buf*. + """ + ... + + def writeblocks(self, block_num: int, buf, offset: Optional[int] = 0) -> Incomplete: + """ + The first form writes aligned, multiples of blocks, and requires that the + blocks that are written to be first erased (if necessary) by this method. + Starting at the block given by the index *block_num*, write blocks from + *buf* (an array of bytes) to the device. + The number of blocks to write is given by the length of *buf*, + which will be a multiple of the block size. + + The second form allows writing at arbitrary locations within a block, + and arbitrary lengths. Only the bytes being written should be changed, + and the caller of this method must ensure that the relevant blocks are + erased via a prior ``ioctl`` call. + Starting at block index *block_num*, and byte offset within that block + of *offset*, write bytes from *buf* (an array of bytes) to the device. + The number of bytes to write is given by the length of *buf*. + + Note that implementations must never implicitly erase blocks if the offset + argument is specified, even if it is zero. + """ + ... + + def ioctl(self, op: int, arg) -> int: + """ + Control the block device and query its parameters. The operation to + perform is given by *op* which is one of the following integers: + + - 1 -- initialise the device (*arg* is unused) + - 2 -- shutdown the device (*arg* is unused) + - 3 -- sync the device (*arg* is unused) + - 4 -- get a count of the number of blocks, should return an integer + (*arg* is unused) + - 5 -- get the number of bytes in a block, should return an integer, + or ``None`` in which case the default value of 512 is used + (*arg* is unused) + - 6 -- erase a block, *arg* is the block number to erase + + As a minimum ``ioctl(4, ...)`` must be intercepted; for littlefs + ``ioctl(6, ...)`` must also be intercepted. The need for others is + hardware dependent. + + Prior to any call to ``writeblocks(block, ...)`` littlefs issues + ``ioctl(6, block)``. This enables a device driver to erase the block + prior to a write if the hardware requires it. Alternatively a driver + might intercept ``ioctl(6, block)`` and return 0 (success). In this case + the driver assumes responsibility for detecting the need for erasure. + + Unless otherwise stated ``ioctl(op, arg)`` can return ``None``. + Consequently an implementation can ignore unused values of ``op``. Where + ``op`` is intercepted, the return value for operations 4 and 5 are as + detailed above. Other operations should return 0 on success and non-zero + for failure, with the value returned being an ``OSError`` errno code. + """ + ... + +def mount(fsobj, mount_point: str, *, readonly=False) -> Incomplete: + """ + Mount the filesystem object *fsobj* at the location in the VFS given by the + *mount_point* string. *fsobj* can be a a VFS object that has a ``mount()`` + method, or a block device. If it's a block device then the filesystem type + is automatically detected (an exception is raised if no filesystem was + recognised). *mount_point* may be ``'/'`` to mount *fsobj* at the root, + or ``'/'`` to mount it at a subdirectory under the root. + + If *readonly* is ``True`` then the filesystem is mounted read-only. + + During the mount process the method ``mount()`` is called on the filesystem + object. + + Will raise ``OSError(EPERM)`` if *mount_point* is already mounted. + """ + ... + +def umount(mount_point: Incomplete) -> Incomplete: + """ + Unmount a filesystem. *mount_point* can be a string naming the mount location, + or a previously-mounted filesystem object. During the unmount process the + method ``umount()`` is called on the filesystem object. + + Will raise ``OSError(EINVAL)`` if *mount_point* is not found. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/wipy/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/wipy/__init__.pyi new file mode 100644 index 00000000..302e3e03 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/wipy/__init__.pyi @@ -0,0 +1,28 @@ +""" +WiPy specific features. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/wipy.html + +The ``wipy`` module contains functions to control specific features of the +WiPy, such as the heartbeat LED. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/wipy.rst +from __future__ import annotations + +from typing import overload + +@overload +def heartbeat(enable: bool, /) -> None: + """ + Get or set the state (enabled or disabled) of the heartbeat LED. Accepts and + returns boolean values (``True`` or ``False``). + """ + +@overload +def heartbeat() -> bool: + """ + Get or set the state (enabled or disabled) of the heartbeat LED. Accepts and + returns boolean values (``True`` or ``False``). + """ diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/wm8960/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/wm8960/__init__.pyi new file mode 100644 index 00000000..62afa6c3 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/wm8960/__init__.pyi @@ -0,0 +1,211 @@ +""" """ + +from __future__ import annotations + +from micropython import const + +class WM8960: + """ + Create a WM8960 driver object, initialize the device with default settings and return the + WM8960 object. + + Only the first two arguments are mandatory. All others are optional. The arguments are: + + - *i2c* is the I2C bus object. + - *sample_rate* is the audio sample rate. Acceptable values are 8000, + 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 96000, 192000 + and 384000. Note that not every I2S hardware will support all values. + - *bits* is the number of bits per audio word. Acceptable value are 16, + 20, 24, and 32. + - *swap* swaps the left & right channel, if set; see below for options. + - *route* Setting the audio path in the codec; see below for options. + - *left_input* sets the audio source for the left input channel; + see below for options. + - *right_input* sets the audio source for the right input channel; + see below for options. + - *play_source* sets the audio target for the output audio; + see below for options. + - *sysclk_source* controls whether the internal master clock called + "sysclk" is directly taken from the MCLK input or derived from it + using an internal PLL. It is usually not required to change this. + - *mclk_freq* sets the mclk frequency applied to the MCLK pin of the + codec. If not set, default values are used. + - *primary* lets the WM8960 act as primary or secondary device. The + default setting is ``False``. When set to ``False``, + *sample_rate* and *bits* are controlled by the MCU. + - *adc_sync* sets which input is used for the ADC sync signal. + The default is using the DACLRC pin. + - *protocol* sets the communication protocol. The default is I2S. + See below for all options. + - *i2c_address* sets the I2C address of the WM8960, with default ``0x1A``. + + If *mclk_freq* is not set the following default values are used: + + - sysclk_source == SYSCLK_PLL: 11.2896 MHz for sample rates of 44100, + 22050 and 11015 Hz, and 12.288 Mhz for sample rates < 48000, otherwise + sample_rate * 256. + - sysclk_source == SYSCLK_MCLK: sample_rate * 256. + + If the MCLK signal is applied using, for example,. a separate oscillator, + it must be specified for proper operation. + """ + + def __init__( + self, + i2c, + sample_rate, + *, + bits=16, + swap=SWAP_NONE, + route=ROUTE_PLAYBACK_RECORD, + left_input=INPUT_MIC3, + right_input=INPUT_MIC2, + sysclk_source=SYSCLK_MCLK, + mclk_freq=None, + primary=False, + adc_sync=SYNC_DAC, + protocol=BUS_I2S, + i2c_address=WM8960_I2C_ADDR, + ) -> None: ... + def set_left_input(self, input_source) -> None: + """ + Specify the source for the left input. The input source names are listed above. + """ + ... + + def set_right_input(self, input_source) -> None: + """ + Specify the source for the right input. The input source names are listed above. + """ + ... + + def volume(self, module, volume_l=None, volume_r=None) -> None: + """ + Sets or gets the volume of a certain module. + + If no volume values are supplied, the actual volume tuple is returned. + + If one or two values are supplied, it sets the volume of a certain module. + If two values are provided, the first one is used for the left channel, + the second for the right channel. If only one value is supplied, it is used + for both channels. The value range is normalized to 0.0-100.0 with a + logarithmic scale. + + For a list of suitable modules and db/step, see the table below. + """ + ... + + def mute(self, module, mute, soft=True, ramp=MUTE_FAST) -> None: + """ + Mute or unmute the output. If *mute* is True, the output is muted, if ``False`` + it is unmuted. + + If *soft* is set as True, muting will happen as a soft transition. The time for + the transition is defined by *ramp*, which is either ``MUTE_FAST`` or ``MUTE_SLOW``. + """ + ... + + def set_data_route(self, route) -> None: + """ + Set the audio data route. For the parameter value/names, see the table above. + """ + ... + + def set_module(self, module, active) -> None: + """ + Enable or disable a module, with *active* being ``False`` or ``True``. For + the list of module names, see the table above. + + Note that enabling ``MODULE_MONO_OUT`` is different from the `WM8960.mono` + method. The first enables output 3, while the `WM8960.mono` method sends a + mono mix to the left and right output. + """ + ... + + def enable_module(self, module) -> None: + """ + Enable a module. For the list of module names, see the table above. + """ + ... + + def disable_module(self, module) -> None: + """ + Disable a module. For the list of module names, see the table above. + """ + ... + + def expand_3d(self, level) -> None: + """ + Enable Stereo 3D expansion. *level* is a number between 0 and 15. + A value of 0 disables the expansion. + """ + ... + + def mono(self, active) -> None: + """ + If *active* is ``True``, a Mono mix is sent to the left and right output + channel. This is different from enabling the ``MODULE_MONO_MIX``, which + enables output 3. + """ + ... + + def alc_mode(self, channel, mode: int = ALC_MODE) -> None: + """ + Enables or disables ALC mode. Parameters are: + + - *channel* enables and sets the channel for ALC. The parameter values are: + + - ALC_OFF: Switch ALC off + - ALS_RIGHT: Use the right input channel + - ALC_LEFT: Use the left input channel + - ALC_STEREO: Use both input channels. + + - *mode* sets the ALC mode. Input values are: + + - ALC_MODE: act as ALC + - ALC_LIMITER: act as limiter. + """ + ... + + def alc_gain(self, target=-12, max_gain=30, min_gain=-17.25, noise_gate=-78) -> None: + """ + Set the target level, highest and lowest gain levels and the noise gate as dB level. + Permitted ranges are: + + - *target*: -22.5 to -1.5 dB + - *max_gain*: -12 to 30 dB + - *min_gain*: -17 to 25 dB + - *noise_gate*: -78 to -30 dB + + Excess values are limited to the permitted ranges. A value of -78 or less + for *noise_gate* disables the noise gate function. + """ + ... + + def alc_time(self, attack=24, decay=192, hold=0) -> None: + """ + Set the dynamic characteristic of ALC. The times are given as millisecond + values. Permitted ranges are: + + - *attack*: 6 to 6140 + - *decay*: 24 to 24580 + - *hold*: 0 to 43000 + + Excess values are limited within the permitted ranges. + """ + ... + + def deemphasis(self, active) -> None: + """ + Enables or disables a deemphasis filter for playback, with *active* being + ``False`` or ``True``. This filter is applied only for sample rates of + 32000, 44100 and 48000. For other sample rates, the filter setting + is silently ignored. + """ + ... + + def deinit(self) -> None: + """ + Disable all modules. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/DiskAccess.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/DiskAccess.pyi new file mode 100644 index 00000000..027046dc --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/DiskAccess.pyi @@ -0,0 +1,25 @@ +""" """ + +from __future__ import annotations + +from _typeshed import Incomplete +from DiskAccess import * +from FlashArea import * + +class DiskAccess: + """ + Gets an object for accessing disk memory of the specific disk. + For accessing an SD card on the mimxrt1050_evk, ``disk_name`` would be ``SDHC``. See board documentation and + devicetree for usable disk names for your board (ex. RT boards use style USDHC#). + """ + + def __init__(self, disk_name) -> None: ... + def readblocks(self, block_num, buf, offset: int | None = 0) -> Incomplete: ... + def writeblocks(self, block_num, buf, offset: int | None = 0) -> Incomplete: ... + def ioctl(self, cmd, arg) -> Incomplete: + """ + These methods implement the simple and extended + :ref:`block protocol ` defined by + :class:`vfs.AbstractBlockDev`. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/FlashArea.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/FlashArea.pyi new file mode 100644 index 00000000..77de85f9 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/FlashArea.pyi @@ -0,0 +1,30 @@ +""" """ + +from __future__ import annotations + +from _typeshed import Incomplete +from DiskAccess import * +from FlashArea import * + +class FlashArea: + """ + Gets an object for accessing flash memory at partition specified by ``id`` and with block size of ``block_size``. + + ``id`` values are integers correlating to fixed flash partitions defined in the devicetree. + A commonly used partition is the designated flash storage area defined as ``FlashArea.STORAGE`` if + ``FLASH_AREA_LABEL_EXISTS(storage)`` returns true at boot. + Zephyr devicetree fixed flash partitions are ``boot_partition``, ``slot0_partition``, ``slot1_partition``, and + ``scratch_partition``. Because MCUBoot is not enabled by default for MicroPython, these fixed partitions can be accessed by + ID integer values 1, 2, 3, and 4, respectively. + """ + + def __init__(self, id, block_size) -> None: ... + def readblocks(self, block_num, buf, offset: int | None = 0) -> Incomplete: ... + def writeblocks(self, block_num, buf, offset: int | None = 0) -> Incomplete: ... + def ioctl(self, cmd, arg) -> Incomplete: + """ + These methods implement the simple and extended + :ref:`block protocol ` defined by + :class:`vfs.AbstractBlockDev`. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/__init__.pyi new file mode 100644 index 00000000..d1b51845 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/__init__.pyi @@ -0,0 +1,56 @@ +""" +Functionality specific to Zephyr. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/zephyr.html + +The ``zephyr`` module contains functions and classes specific to the Zephyr port. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/zephyr.rst +from __future__ import annotations + +from _typeshed import Incomplete +from DiskAccess import * +from FlashArea import * +from zephyr.DiskAccess import DiskAccess +from zephyr.FlashArea import FlashArea + +def is_preempt_thread() -> Incomplete: + """ + Returns true if the current thread is a preemptible thread. + + Zephyr preemptible threads are those with non-negative priority values (low priority levels), which therefore, + can be supplanted as soon as a higher or equal priority thread becomes ready. + """ + ... + +def current_tid() -> Incomplete: + """ + Returns the thread id of the current thread, which is used to reference the thread. + """ + ... + +def thread_analyze() -> Incomplete: + """ + Runs the Zephyr debug thread analyzer on the current thread and prints stack size statistics in the format: + + "``thread_name``-20s: STACK: unused ``available_stack_space`` usage ``stack_space_used`` + / ``stack_size`` (``percent_stack_space_used`` %); CPU: ``cpu_utilization`` %" + + * *CPU utilization is only printed if runtime statistics are configured via the ``CONFIG_THREAD_RUNTIME_STATS`` kconfig* + + This function can only be accessed if ``CONFIG_THREAD_ANALYZER`` is configured for the port in ``zephyr/prj.conf``. + For more information, see documentation for Zephyr `thread analyzer + `_. + """ + ... + +def shell_exec(cmd_in) -> Incomplete: + """ + Executes the given command on an UART backend. This function can only be accessed if ``CONFIG_SHELL_BACKEND_SERIAL`` + is configured for the port in ``zephyr/prj.conf``. + + A list of possible commands can be found in the documentation for Zephyr `shell commands `_. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/zsensor.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/zsensor.pyi new file mode 100644 index 00000000..ae4ca741 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zephyr/zsensor.pyi @@ -0,0 +1,89 @@ +""" +Zephyr sensor bindings. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/zsensor.html + +The ``zsensor`` module contains a class for using sensors with Zephyr. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/zephyr.zsensor.rst +from __future__ import annotations + +from _typeshed import Incomplete +from DiskAccess import * +from FlashArea import * + +ACCEL_X: Incomplete +"""Acceleration on the X axis, in m/s^2.""" +ACCEL_Y: Incomplete +"""Acceleration on the Y axis, in m/s^2.""" +ACCEL_Z: Incomplete +"""Acceleration on the Z axis, in m/s^2.""" +GYRO_X: Incomplete +"""Angular velocity around the X axis, in radians/s.""" +GYRO_Y: Incomplete +"""Angular velocity around the Y axis, in radians/s.""" +GYRO_Z: Incomplete +"""Angular velocity around the Z axis, in radians/s.""" +MAGN_X: Incomplete +"""Magnetic field on the X axis, in Gauss.""" +MAGN_Y: Incomplete +"""Magnetic field on the Y axis, in Gauss.""" +MAGN_Z: Incomplete +"""Magnetic field on the Z axis, in Gauss.""" +DIE_TEMP: Incomplete +"""Device die temperature in degrees Celsius.""" +PRESS: Incomplete +"""Pressure in kilopascal.""" +PROX: Incomplete +"""Proximity. Dimensionless. A value of 1 indicates that an object is close.""" +HUMIDITY: Incomplete +"""Humidity, in percent.""" +LIGHT: Incomplete +"""Illuminance in visible spectrum, in lux.""" +ALTITUDE: Incomplete +"""Altitude, in meters.""" + +class Sensor: + """ + Device names are defined in the devicetree for your board. + For example, the device name for the accelerometer in the FRDM-k64f board is "FXOS8700". + """ + + def __init__(self, device_name) -> None: ... + def measure(self) -> Incomplete: + """ + Obtains a measurement sample from the sensor device using Zephyr sensor_sample_fetch and + stores it in an internal driver buffer as a useful value, a pair of (integer part of value, + fractional part of value in 1-millionths). + Returns none if successful or OSError value if failure. + """ + ... + + def get_float(self, sensor_channel) -> float: + """ + Returns the value of the sensor measurement sample as a float. + """ + ... + + def get_micros(self, sensor_channel) -> Incomplete: + """ + Returns the value of the sensor measurement sample in millionths. + (Ex. value of ``(1, 500000)`` returns as ``1500000``) + """ + ... + + def get_millis(self, sensor_channel) -> Incomplete: + """ + Returns the value of sensor measurement sample in thousandths. + (Ex. value of ``(1, 500000)`` returns as ``1500``) + """ + ... + + def get_int(self, sensor_channel) -> int: + """ + Returns only the integer value of the measurement sample. + (Ex. value of ``(1, 500000)`` returns as ``1``) + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-docstubs/zlib/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zlib/__init__.pyi new file mode 100644 index 00000000..1a74bcd4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-docstubs/zlib/__init__.pyi @@ -0,0 +1,89 @@ +""" +Zlib compression & decompression. + +MicroPython module: https://docs.micropython.org/en/v1.24.0/library/zlib.html + +CPython module: :mod:`python:zlib` https://docs.python.org/3/library/zlib.html . + +This module allows compression and decompression of binary data with the +`DEFLATE algorithm `_ +(commonly used in the zlib library and gzip archiver). + +``Note:`` Prefer to use :class:`deflate.DeflateIO` instead of the functions in this + module as it provides a streaming interface to compression and decompression + which is convenient and more memory efficient when working with reading or + writing compressed data to a file, socket, or stream. + +**Availability:** + +* From MicroPython v1.21 onwards, this module may not be present by default on + all MicroPython firmware as it duplicates functionality available in + the :mod:`deflate ` module. + +* A copy of this module can be installed (or frozen) + from :term:`micropython-lib` (`source `_). + See :ref:`packages` for more information. This documentation describes that module. + +* Requires the built-in :mod:`deflate ` module (available since MicroPython v1.21) + +* Compression support will only be available if compression support is enabled + in the built-in :mod:`deflate ` module. +""" + +# source version: v1.24.1 +# origin module:: repos/micropython/docs/library/zlib.rst +from __future__ import annotations + +from _typeshed import Incomplete + +def decompress(data: bytes, wbits: int = 0, bufsize: int = 0, /) -> bytes: + """ + Decompresses *data* into a bytes object. + + The *wbits* parameter works the same way as for :meth:`zlib.compress` + with the following additional valid values: + + * ``0``: Automatically determine the window size from the zlib header + (*data* must be in zlib format). + * ``35`` to ``47``: Auto-detect either the zlib or gzip format. + + As for :meth:`zlib.compress`, see the :mod:`CPython documentation for zlib ` + for more information about the *wbits* parameter. As for :meth:`zlib.compress`, + MicroPython also supports smaller window sizes than CPython. See more + :ref:`MicroPython-specific details ` in the + :mod:`deflate ` module documentation. + + If the data to be decompressed requires a larger window size, it will + fail during decompression. + """ + ... + +def compress(data, wbits=15, /) -> Incomplete: + """ + Compresses *data* into a bytes object. + + *wbits* allows you to configure the DEFLATE dictionary window size and the + output format. The window size allows you to trade-off memory usage for + compression level. A larger window size will allow the compressor to + reference fragments further back in the input. The output formats are "raw" + DEFLATE (no header/footer), zlib, and gzip, where the latter two + include a header and checksum. + + The low four bits of the absolute value of *wbits* set the base-2 logarithm of + the DEFLATE dictionary window size. So for example, ``wbits=10``, + ``wbits=-10``, and ``wbits=26`` all set the window size to 1024 bytes. Valid + window sizes are ``5`` to ``15`` inclusive (corresponding to 32 to 32k bytes). + + Negative values of *wbits* between ``-5`` and ``-15`` correspond to "raw" + output mode, positive values between ``5`` and ``15`` correspond to zlib + output mode, and positive values between ``21`` and ``31`` correspond to + gzip output mode. + + See the :mod:`CPython documentation for zlib ` for more + information about the *wbits* parameter. Note that MicroPython allows + for smaller window sizes, which is useful when memory is constrained while + still achieving a reasonable level of compression. It also speeds up + the compressor. See more :ref:`MicroPython-specific details ` + in the :mod:`deflate ` module documentation. + """ + ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_asyncio.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_asyncio.pyi new file mode 100644 index 00000000..cf1835b2 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_asyncio.pyi @@ -0,0 +1,18 @@ +""" +Module: '_asyncio' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class TaskQueue: + def push(self, *args, **kwargs) -> Incomplete: ... + def peek(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Task: + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_boot_fat.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_boot_fat.pyi new file mode 100644 index 00000000..2f49876e --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_boot_fat.pyi @@ -0,0 +1,8 @@ +""" +Module: '_boot_fat' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_onewire.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_onewire.pyi new file mode 100644 index 00000000..af946694 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_onewire.pyi @@ -0,0 +1,15 @@ +""" +Module: '_onewire' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def reset(*args, **kwargs) -> Incomplete: ... +def writebyte(*args, **kwargs) -> Incomplete: ... +def writebit(*args, **kwargs) -> Incomplete: ... +def crc8(*args, **kwargs) -> Incomplete: ... +def readbyte(*args, **kwargs) -> Incomplete: ... +def readbit(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_rp2.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_rp2.pyi new file mode 100644 index 00000000..ab43a208 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_rp2.pyi @@ -0,0 +1,57 @@ +""" +Module: '_rp2' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def bootsel_button(*args, **kwargs) -> Incomplete: ... + +class DMA: + def irq(self, *args, **kwargs) -> Incomplete: ... + def unpack_ctrl(self, *args, **kwargs) -> Incomplete: ... + def pack_ctrl(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def config(self, *args, **kwargs) -> Incomplete: ... + def active(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class StateMachine: + def irq(self, *args, **kwargs) -> Incomplete: ... + def put(self, *args, **kwargs) -> Incomplete: ... + def restart(self, *args, **kwargs) -> Incomplete: ... + def rx_fifo(self, *args, **kwargs) -> Incomplete: ... + def tx_fifo(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def exec(self, *args, **kwargs) -> Incomplete: ... + def get(self, *args, **kwargs) -> Incomplete: ... + def active(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class PIO: + JOIN_TX: int = 1 + JOIN_NONE: int = 0 + JOIN_RX: int = 2 + SHIFT_LEFT: int = 0 + OUT_HIGH: int = 3 + OUT_LOW: int = 2 + SHIFT_RIGHT: int = 1 + IN_LOW: int = 0 + IRQ_SM3: int = 2048 + IN_HIGH: int = 1 + IRQ_SM2: int = 1024 + IRQ_SM0: int = 256 + IRQ_SM1: int = 512 + def state_machine(self, *args, **kwargs) -> Incomplete: ... + def remove_program(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def add_program(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Flash: + def readblocks(self, *args, **kwargs) -> Incomplete: ... + def writeblocks(self, *args, **kwargs) -> Incomplete: ... + def ioctl(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_thread.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_thread.pyi new file mode 100644 index 00000000..a8bb1a0b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/_thread.pyi @@ -0,0 +1,20 @@ +""" +Module: '_thread' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def get_ident(*args, **kwargs) -> Incomplete: ... +def start_new_thread(*args, **kwargs) -> Incomplete: ... +def stack_size(*args, **kwargs) -> Incomplete: ... +def exit(*args, **kwargs) -> Incomplete: ... +def allocate_lock(*args, **kwargs) -> Incomplete: ... + +class LockType: + def locked(self, *args, **kwargs) -> Incomplete: ... + def release(self, *args, **kwargs) -> Incomplete: ... + def acquire(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/array.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/array.pyi new file mode 100644 index 00000000..775cb01a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/array.pyi @@ -0,0 +1,13 @@ +""" +Module: 'array' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class array: + def extend(self, *args, **kwargs) -> Incomplete: ... + def append(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/__init__.pyi new file mode 100644 index 00000000..61f764ab --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/__init__.pyi @@ -0,0 +1,127 @@ +""" +Module: 'asyncio.__init__' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +_attrs: dict = {} + +def current_task(*args, **kwargs) -> Incomplete: ... +def get_event_loop(*args, **kwargs) -> Incomplete: ... +def create_task(*args, **kwargs) -> Incomplete: ... +def ticks_diff(*args, **kwargs) -> Incomplete: ... +def new_event_loop(*args, **kwargs) -> Incomplete: ... +def ticks(*args, **kwargs) -> Incomplete: ... +def run_until_complete(*args, **kwargs) -> Incomplete: ... +def run(*args, **kwargs) -> Incomplete: ... +def wait_for_ms(*args, **kwargs) -> Incomplete: ... +def sleep_ms(*args, **kwargs) -> Incomplete: ... +def ticks_add(*args, **kwargs) -> Incomplete: ... +def sleep(*args, **kwargs) -> Incomplete: ... + +class TaskQueue: + def push(self, *args, **kwargs) -> Incomplete: ... + def peek(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +open_connection: Generator ## = +cur_task: Incomplete ## = None +gather: Generator ## = + +class Task: + def __init__(self, *argv, **kwargs) -> None: ... + +wait_for: Generator ## = + +class CancelledError(Exception): ... + +start_server: Generator ## = + +class Lock: + def locked(self, *args, **kwargs) -> Incomplete: ... + def release(self, *args, **kwargs) -> Incomplete: ... + + acquire: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class StreamWriter: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class StreamReader: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class SingletonGenerator: + def __init__(self, *argv, **kwargs) -> None: ... + +class Loop: + def get_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def default_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def set_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def run_forever(self, *args, **kwargs) -> Incomplete: ... + def run_until_complete(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def create_task(self, *args, **kwargs) -> Incomplete: ... + def call_exception_handler(self, *args, **kwargs) -> Incomplete: ... + + _exc_handler: Incomplete ## = None + def __init__(self, *argv, **kwargs) -> None: ... + +class Event: + def set(self, *args, **kwargs) -> Incomplete: ... + def is_set(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class ThreadSafeFlag: + def set(self, *args, **kwargs) -> Incomplete: ... + def ioctl(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class IOQueue: + def queue_read(self, *args, **kwargs) -> Incomplete: ... + def wait_io_event(self, *args, **kwargs) -> Incomplete: ... + def queue_write(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def _enqueue(self, *args, **kwargs) -> Incomplete: ... + def _dequeue(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class TimeoutError(Exception): ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/core.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/core.pyi new file mode 100644 index 00000000..94160e39 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/core.pyi @@ -0,0 +1,71 @@ +""" +Module: 'asyncio.core' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +_exc_context: dict = {} + +def ticks(*args, **kwargs) -> Incomplete: ... +def create_task(*args, **kwargs) -> Incomplete: ... +def _promote_to_task(*args, **kwargs) -> Incomplete: ... +def ticks_diff(*args, **kwargs) -> Incomplete: ... +def run(*args, **kwargs) -> Incomplete: ... +def run_until_complete(*args, **kwargs) -> Incomplete: ... +def current_task(*args, **kwargs) -> Incomplete: ... +def new_event_loop(*args, **kwargs) -> Incomplete: ... +def get_event_loop(*args, **kwargs) -> Incomplete: ... +def sleep_ms(*args, **kwargs) -> Incomplete: ... +def ticks_add(*args, **kwargs) -> Incomplete: ... +def sleep(*args, **kwargs) -> Incomplete: ... + +cur_task: Incomplete ## = None +_task_queue: Incomplete ## = + +class Loop: + def get_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def default_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def set_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def run_forever(self, *args, **kwargs) -> Incomplete: ... + def run_until_complete(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def create_task(self, *args, **kwargs) -> Incomplete: ... + def call_exception_handler(self, *args, **kwargs) -> Incomplete: ... + + _exc_handler: Incomplete ## = None + def __init__(self, *argv, **kwargs) -> None: ... + +class CancelledError(Exception): ... + +class TaskQueue: + def push(self, *args, **kwargs) -> Incomplete: ... + def peek(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Task: + def __init__(self, *argv, **kwargs) -> None: ... + +class TimeoutError(Exception): ... + +class IOQueue: + def queue_read(self, *args, **kwargs) -> Incomplete: ... + def wait_io_event(self, *args, **kwargs) -> Incomplete: ... + def queue_write(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def _enqueue(self, *args, **kwargs) -> Incomplete: ... + def _dequeue(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class SingletonGenerator: + def __init__(self, *argv, **kwargs) -> None: ... + +_stopper: Generator ## = +_stop_task: Incomplete ## = None +_io_queue: Incomplete ## = diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/event.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/event.pyi new file mode 100644 index 00000000..3891afb2 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/event.pyi @@ -0,0 +1,25 @@ +""" +Module: 'asyncio.event' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +class ThreadSafeFlag: + def set(self, *args, **kwargs) -> Incomplete: ... + def ioctl(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class Event: + def set(self, *args, **kwargs) -> Incomplete: ... + def is_set(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/funcs.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/funcs.pyi new file mode 100644 index 00000000..3b1d1cdf --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/funcs.pyi @@ -0,0 +1,20 @@ +""" +Module: 'asyncio.funcs' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +def wait_for_ms(*args, **kwargs) -> Incomplete: ... + +gather: Generator ## = +wait_for: Generator ## = + +class _Remove: + def remove(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +_run: Generator ## = diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/lock.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/lock.pyi new file mode 100644 index 00000000..6c0ad243 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/lock.pyi @@ -0,0 +1,16 @@ +""" +Module: 'asyncio.lock' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +class Lock: + def locked(self, *args, **kwargs) -> Incomplete: ... + def release(self, *args, **kwargs) -> Incomplete: ... + + acquire: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/stream.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/stream.pyi new file mode 100644 index 00000000..18f02678 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/asyncio/stream.pyi @@ -0,0 +1,68 @@ +""" +Module: 'asyncio.stream' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +stream_awrite: Generator ## = +open_connection: Generator ## = +start_server: Generator ## = + +class StreamWriter: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class Server: + def close(self, *args, **kwargs) -> Incomplete: ... + + wait_closed: Generator ## = + _serve: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class Stream: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class StreamReader: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/binascii.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/binascii.pyi new file mode 100644 index 00000000..b1b5d694 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/binascii.pyi @@ -0,0 +1,14 @@ +""" +Module: 'binascii' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def crc32(*args, **kwargs) -> Incomplete: ... +def hexlify(*args, **kwargs) -> Incomplete: ... +def unhexlify(*args, **kwargs) -> Incomplete: ... +def b2a_base64(*args, **kwargs) -> Incomplete: ... +def a2b_base64(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cmath.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cmath.pyi new file mode 100644 index 00000000..24c94844 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cmath.pyi @@ -0,0 +1,21 @@ +""" +Module: 'cmath' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +e: float = 2.718282 +pi: float = 3.141593 + +def polar(*args, **kwargs) -> Incomplete: ... +def sqrt(*args, **kwargs) -> Incomplete: ... +def rect(*args, **kwargs) -> Incomplete: ... +def sin(*args, **kwargs) -> Incomplete: ... +def exp(*args, **kwargs) -> Incomplete: ... +def cos(*args, **kwargs) -> Incomplete: ... +def phase(*args, **kwargs) -> Incomplete: ... +def log(*args, **kwargs) -> Incomplete: ... +def log10(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/collections.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/collections.pyi new file mode 100644 index 00000000..9ff86957 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/collections.pyi @@ -0,0 +1,8 @@ +""" +Module: 'collections' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cryptolib.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cryptolib.pyi new file mode 100644 index 00000000..d96f628e --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/cryptolib.pyi @@ -0,0 +1,13 @@ +""" +Module: 'cryptolib' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class aes: + def encrypt(self, *args, **kwargs) -> Incomplete: ... + def decrypt(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/deflate.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/deflate.pyi new file mode 100644 index 00000000..11864561 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/deflate.pyi @@ -0,0 +1,20 @@ +""" +Module: 'deflate' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +GZIP: int = 3 +RAW: int = 1 +ZLIB: int = 2 +AUTO: int = 0 + +class DeflateIO: + def readline(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/dht.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/dht.pyi new file mode 100644 index 00000000..8fdb638f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/dht.pyi @@ -0,0 +1,26 @@ +""" +Module: 'dht' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def dht_readinto(*args, **kwargs) -> Incomplete: ... + +class DHTBase: + def measure(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class DHT22: + def measure(self, *args, **kwargs) -> Incomplete: ... + def temperature(self, *args, **kwargs) -> Incomplete: ... + def humidity(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class DHT11: + def measure(self, *args, **kwargs) -> Incomplete: ... + def temperature(self, *args, **kwargs) -> Incomplete: ... + def humidity(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ds18x20.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ds18x20.pyi new file mode 100644 index 00000000..64e4bf9b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ds18x20.pyi @@ -0,0 +1,18 @@ +""" +Module: 'ds18x20' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def const(*args, **kwargs) -> Incomplete: ... + +class DS18X20: + def read_scratch(self, *args, **kwargs) -> Incomplete: ... + def read_temp(self, *args, **kwargs) -> Incomplete: ... + def write_scratch(self, *args, **kwargs) -> Incomplete: ... + def convert_temp(self, *args, **kwargs) -> Incomplete: ... + def scan(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/errno.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/errno.pyi new file mode 100644 index 00000000..d850c40e --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/errno.pyi @@ -0,0 +1,32 @@ +""" +Module: 'errno' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +ENOBUFS: int = 105 +ENODEV: int = 19 +ENOENT: int = 2 +EISDIR: int = 21 +EIO: int = 5 +EINVAL: int = 22 +EPERM: int = 1 +ETIMEDOUT: int = 110 +ENOMEM: int = 12 +EOPNOTSUPP: int = 95 +ENOTCONN: int = 107 +errorcode: dict = {} +EAGAIN: int = 11 +EALREADY: int = 114 +EBADF: int = 9 +EADDRINUSE: int = 98 +EACCES: int = 13 +EINPROGRESS: int = 115 +EEXIST: int = 17 +EHOSTUNREACH: int = 113 +ECONNABORTED: int = 103 +ECONNRESET: int = 104 +ECONNREFUSED: int = 111 diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/framebuf.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/framebuf.pyi new file mode 100644 index 00000000..1b2a4f47 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/framebuf.pyi @@ -0,0 +1,34 @@ +""" +Module: 'framebuf' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +MONO_HMSB: int = 4 +MONO_HLSB: int = 3 +RGB565: int = 1 +MONO_VLSB: int = 0 +MVLSB: int = 0 +GS2_HMSB: int = 5 +GS8: int = 6 +GS4_HMSB: int = 2 + +def FrameBuffer1(*args, **kwargs) -> Incomplete: ... + +class FrameBuffer: + def poly(self, *args, **kwargs) -> Incomplete: ... + def vline(self, *args, **kwargs) -> Incomplete: ... + def pixel(self, *args, **kwargs) -> Incomplete: ... + def text(self, *args, **kwargs) -> Incomplete: ... + def rect(self, *args, **kwargs) -> Incomplete: ... + def scroll(self, *args, **kwargs) -> Incomplete: ... + def ellipse(self, *args, **kwargs) -> Incomplete: ... + def line(self, *args, **kwargs) -> Incomplete: ... + def blit(self, *args, **kwargs) -> Incomplete: ... + def hline(self, *args, **kwargs) -> Incomplete: ... + def fill(self, *args, **kwargs) -> Incomplete: ... + def fill_rect(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/gc.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/gc.pyi new file mode 100644 index 00000000..5d980825 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/gc.pyi @@ -0,0 +1,16 @@ +""" +Module: 'gc' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def mem_alloc(*args, **kwargs) -> Incomplete: ... +def isenabled(*args, **kwargs) -> Incomplete: ... +def mem_free(*args, **kwargs) -> Incomplete: ... +def threshold(*args, **kwargs) -> Incomplete: ... +def collect(*args, **kwargs) -> Incomplete: ... +def enable(*args, **kwargs) -> Incomplete: ... +def disable(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/hashlib.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/hashlib.pyi new file mode 100644 index 00000000..5e9f7ddc --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/hashlib.pyi @@ -0,0 +1,18 @@ +""" +Module: 'hashlib' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class sha256: + def digest(self, *args, **kwargs) -> Incomplete: ... + def update(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class sha1: + def digest(self, *args, **kwargs) -> Incomplete: ... + def update(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/heapq.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/heapq.pyi new file mode 100644 index 00000000..837cb5c0 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/heapq.pyi @@ -0,0 +1,12 @@ +""" +Module: 'heapq' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def heappop(*args, **kwargs) -> Incomplete: ... +def heappush(*args, **kwargs) -> Incomplete: ... +def heapify(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/io.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/io.pyi new file mode 100644 index 00000000..79b74417 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/io.pyi @@ -0,0 +1,37 @@ +""" +Module: 'io' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def open(*args, **kwargs) -> Incomplete: ... + +class IOBase: + def __init__(self, *argv, **kwargs) -> None: ... + +class StringIO: + def write(self, *args, **kwargs) -> Incomplete: ... + def flush(self, *args, **kwargs) -> Incomplete: ... + def getvalue(self, *args, **kwargs) -> Incomplete: ... + def seek(self, *args, **kwargs) -> Incomplete: ... + def tell(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class BytesIO: + def write(self, *args, **kwargs) -> Incomplete: ... + def flush(self, *args, **kwargs) -> Incomplete: ... + def getvalue(self, *args, **kwargs) -> Incomplete: ... + def seek(self, *args, **kwargs) -> Incomplete: ... + def tell(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/json.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/json.pyi new file mode 100644 index 00000000..89446b6f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/json.pyi @@ -0,0 +1,13 @@ +""" +Module: 'json' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def loads(*args, **kwargs) -> Incomplete: ... +def load(*args, **kwargs) -> Incomplete: ... +def dumps(*args, **kwargs) -> Incomplete: ... +def dump(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi new file mode 100644 index 00000000..b3dee236 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi @@ -0,0 +1,282 @@ +""" +Module: 'machine' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +WDT_RESET: int = 3 +PWRON_RESET: int = 1 + +def dht_readinto(*args, **kwargs) -> Incomplete: ... +def enable_irq(*args, **kwargs) -> Incomplete: ... +def disable_irq(*args, **kwargs) -> Incomplete: ... +def bitstream(*args, **kwargs) -> Incomplete: ... +def deepsleep(*args, **kwargs) -> Incomplete: ... +def bootloader(*args, **kwargs) -> Incomplete: ... +def soft_reset(*args, **kwargs) -> Incomplete: ... +def reset(*args, **kwargs) -> Incomplete: ... +def freq(*args, **kwargs) -> Incomplete: ... +def reset_cause(*args, **kwargs) -> Incomplete: ... +def idle(*args, **kwargs) -> Incomplete: ... +def time_pulse_us(*args, **kwargs) -> Incomplete: ... +def lightsleep(*args, **kwargs) -> Incomplete: ... +def unique_id(*args, **kwargs) -> Incomplete: ... + +class Pin: + ALT_SPI: int = 1 + IN: int = 0 + ALT_USB: int = 9 + ALT_UART: int = 2 + IRQ_FALLING: int = 4 + OUT: int = 1 + OPEN_DRAIN: int = 2 + IRQ_RISING: int = 8 + PULL_DOWN: int = 2 + ALT_SIO: int = 5 + ALT_GPCK: int = 8 + ALT: int = 3 + PULL_UP: int = 1 + ALT_I2C: int = 3 + ALT_PWM: int = 4 + ALT_PIO1: int = 7 + ALT_PIO0: int = 6 + def low(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def toggle(self, *args, **kwargs) -> Incomplete: ... + def off(self, *args, **kwargs) -> Incomplete: ... + def on(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def value(self, *args, **kwargs) -> Incomplete: ... + def high(self, *args, **kwargs) -> Incomplete: ... + + class cpu: + GPIO26: Pin ## = Pin(GPIO26, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO25: Pin ## = Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO27: Pin ## = Pin(GPIO27, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO28: Pin ## = Pin(GPIO28, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO22: Pin ## = Pin(GPIO22, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO24: Pin ## = Pin(GPIO24, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO23: Pin ## = Pin(GPIO23, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO9: Pin ## = Pin(GPIO9, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO7: Pin ## = Pin(GPIO7, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO6: Pin ## = Pin(GPIO6, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO8: Pin ## = Pin(GPIO8, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO29: Pin ## = Pin(GPIO29, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO3: Pin ## = Pin(GPIO3, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO5: Pin ## = Pin(GPIO5, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO4: Pin ## = Pin(GPIO4, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO12: Pin ## = Pin(GPIO12, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO11: Pin ## = Pin(GPIO11, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO13: Pin ## = Pin(GPIO13, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO14: Pin ## = Pin(GPIO14, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO0: Pin ## = Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO10: Pin ## = Pin(GPIO10, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO1: Pin ## = Pin(GPIO1, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO21: Pin ## = Pin(GPIO21, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO2: Pin ## = Pin(GPIO2, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO19: Pin ## = Pin(GPIO19, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO20: Pin ## = Pin(GPIO20, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO15: Pin ## = Pin(GPIO15, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO16: Pin ## = Pin(GPIO16, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO18: Pin ## = Pin(GPIO18, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO17: Pin ## = Pin(GPIO17, mode=ALT, pull=PULL_DOWN, alt=31) + def __init__(self, *argv, **kwargs) -> None: ... + + class board: + GP27: Pin ## = Pin(GPIO27, mode=ALT, pull=PULL_DOWN, alt=31) + GP26: Pin ## = Pin(GPIO26, mode=ALT, pull=PULL_DOWN, alt=31) + GP28: Pin ## = Pin(GPIO28, mode=ALT, pull=PULL_DOWN, alt=31) + LED: Pin ## = Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31) + GP21: Pin ## = Pin(GPIO21, mode=ALT, pull=PULL_DOWN, alt=31) + GP25: Pin ## = Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31) + GP22: Pin ## = Pin(GPIO22, mode=ALT, pull=PULL_DOWN, alt=31) + GP8: Pin ## = Pin(GPIO8, mode=ALT, pull=PULL_DOWN, alt=31) + GP7: Pin ## = Pin(GPIO7, mode=ALT, pull=PULL_DOWN, alt=31) + GP9: Pin ## = Pin(GPIO9, mode=ALT, pull=PULL_DOWN, alt=31) + GP3: Pin ## = Pin(GPIO3, mode=ALT, pull=PULL_DOWN, alt=31) + GP4: Pin ## = Pin(GPIO4, mode=ALT, pull=PULL_DOWN, alt=31) + GP6: Pin ## = Pin(GPIO6, mode=ALT, pull=PULL_DOWN, alt=31) + GP5: Pin ## = Pin(GPIO5, mode=ALT, pull=PULL_DOWN, alt=31) + GP12: Pin ## = Pin(GPIO12, mode=ALT, pull=PULL_DOWN, alt=31) + GP11: Pin ## = Pin(GPIO11, mode=ALT, pull=PULL_DOWN, alt=31) + GP13: Pin ## = Pin(GPIO13, mode=ALT, pull=PULL_DOWN, alt=31) + GP20: Pin ## = Pin(GPIO20, mode=ALT, pull=PULL_DOWN, alt=31) + GP0: Pin ## = Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31) + GP10: Pin ## = Pin(GPIO10, mode=ALT, pull=PULL_DOWN, alt=31) + GP1: Pin ## = Pin(GPIO1, mode=ALT, pull=PULL_DOWN, alt=31) + GP19: Pin ## = Pin(GPIO19, mode=ALT, pull=PULL_DOWN, alt=31) + GP18: Pin ## = Pin(GPIO18, mode=ALT, pull=PULL_DOWN, alt=31) + GP2: Pin ## = Pin(GPIO2, mode=ALT, pull=PULL_DOWN, alt=31) + GP14: Pin ## = Pin(GPIO14, mode=ALT, pull=PULL_DOWN, alt=31) + GP15: Pin ## = Pin(GPIO15, mode=ALT, pull=PULL_DOWN, alt=31) + GP17: Pin ## = Pin(GPIO17, mode=ALT, pull=PULL_DOWN, alt=31) + GP16: Pin ## = Pin(GPIO16, mode=ALT, pull=PULL_DOWN, alt=31) + def __init__(self, *argv, **kwargs) -> None: ... + + def __init__(self, *argv, **kwargs) -> None: ... + +mem8: Incomplete ## = <8-bit memory> +mem32: Incomplete ## = <32-bit memory> +mem16: Incomplete ## = <16-bit memory> + +class PWM: + def duty_u16(self, *args, **kwargs) -> Incomplete: ... + def freq(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def duty_ns(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class ADC: + CORE_TEMP: int = 4 + def read_u16(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class I2C: + def readfrom_mem_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_mem(self, *args, **kwargs) -> Incomplete: ... + def writeto_mem(self, *args, **kwargs) -> Incomplete: ... + def scan(self, *args, **kwargs) -> Incomplete: ... + def writeto(self, *args, **kwargs) -> Incomplete: ... + def writevto(self, *args, **kwargs) -> Incomplete: ... + def start(self, *args, **kwargs) -> Incomplete: ... + def readfrom(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class I2S: + RX: int = 0 + MONO: int = 0 + STEREO: int = 1 + TX: int = 1 + def shift(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class WDT: + def feed(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class RTC: + def datetime(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Timer: + PERIODIC: int = 1 + ONE_SHOT: int = 0 + def init(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class UART: + INV_TX: int = 1 + RTS: int = 2 + INV_RX: int = 2 + IRQ_TXIDLE: int = 32 + IRQ_BREAK: int = 512 + IRQ_RXIDLE: int = 64 + CTS: int = 1 + def irq(self, *args, **kwargs) -> Incomplete: ... + def sendbreak(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def flush(self, *args, **kwargs) -> Incomplete: ... + def txdone(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def any(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class USBDevice: + def submit_xfer(self, *args, **kwargs) -> Incomplete: ... + def config(self, *args, **kwargs) -> Incomplete: ... + def remote_wakeup(self, *args, **kwargs) -> Incomplete: ... + def stall(self, *args, **kwargs) -> Incomplete: ... + def active(self, *args, **kwargs) -> Incomplete: ... + + class BUILTIN_CDC: + ep_max: int = 3 + itf_max: int = 2 + str_max: int = 5 + desc_dev: bytes = b"\x12\x01\x00\x02\xef\x02\x01@\x8a.\x05\x00\x00\x01\x01\x02\x03\x01" + desc_cfg: bytes = ( + b"\t\x02K\x00\x02\x01\x00\x80}\x08\x0b\x00\x02\x02\x02\x00\x00\t\x04\x00\x00\x01\x02\x02\x00\x04\x05$\x00 \x01\x05$\x01\x00\x01\x04$\x02\x06\x05$\x06\x00\x01\x07\x05\x81\x03\x08\x00\x10\t\x04\x01\x00\x02\n\x00\x00\x00\x07\x05\x02\x02@\x00\x00\x07\x05\x82\x02@\x00\x00" + ) + def __init__(self, *argv, **kwargs) -> None: ... + + class BUILTIN_NONE: + ep_max: int = 0 + itf_max: int = 0 + str_max: int = 1 + desc_dev: bytes = b"\x12\x01\x00\x02\xef\x02\x01@\x8a.\x05\x00\x00\x01\x01\x02\x03\x01" + desc_cfg: bytes = b"" + def __init__(self, *argv, **kwargs) -> None: ... + + class BUILTIN_DEFAULT: + ep_max: int = 3 + itf_max: int = 2 + str_max: int = 5 + desc_dev: bytes = b"\x12\x01\x00\x02\xef\x02\x01@\x8a.\x05\x00\x00\x01\x01\x02\x03\x01" + desc_cfg: bytes = ( + b"\t\x02K\x00\x02\x01\x00\x80}\x08\x0b\x00\x02\x02\x02\x00\x00\t\x04\x00\x00\x01\x02\x02\x00\x04\x05$\x00 \x01\x05$\x01\x00\x01\x04$\x02\x06\x05$\x06\x00\x01\x07\x05\x81\x03\x08\x00\x10\t\x04\x01\x00\x02\n\x00\x00\x00\x07\x05\x02\x02@\x00\x00\x07\x05\x82\x02@\x00\x00" + ) + def __init__(self, *argv, **kwargs) -> None: ... + + def __init__(self, *argv, **kwargs) -> None: ... + +class SoftSPI: + LSB: int = 0 + MSB: int = 1 + def deinit(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def write_readinto(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class SPI: + LSB: int = 0 + MSB: int = 1 + def deinit(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def write_readinto(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Signal: + def off(self, *args, **kwargs) -> Incomplete: ... + def on(self, *args, **kwargs) -> Incomplete: ... + def value(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class SoftI2C: + def readfrom_mem_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_mem(self, *args, **kwargs) -> Incomplete: ... + def writeto_mem(self, *args, **kwargs) -> Incomplete: ... + def scan(self, *args, **kwargs) -> Incomplete: ... + def writeto(self, *args, **kwargs) -> Incomplete: ... + def writevto(self, *args, **kwargs) -> Incomplete: ... + def start(self, *args, **kwargs) -> Incomplete: ... + def readfrom(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/math.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/math.pyi new file mode 100644 index 00000000..793edf6c --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/math.pyi @@ -0,0 +1,55 @@ +""" +Module: 'math' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +inf: float = inf +nan: float = nan +pi: float = 3.141593 +e: float = 2.718282 +tau: float = 6.283185 + +def ldexp(*args, **kwargs) -> Incomplete: ... +def lgamma(*args, **kwargs) -> Incomplete: ... +def trunc(*args, **kwargs) -> Incomplete: ... +def isclose(*args, **kwargs) -> Incomplete: ... +def gamma(*args, **kwargs) -> Incomplete: ... +def isnan(*args, **kwargs) -> Incomplete: ... +def isfinite(*args, **kwargs) -> Incomplete: ... +def isinf(*args, **kwargs) -> Incomplete: ... +def sqrt(*args, **kwargs) -> Incomplete: ... +def sinh(*args, **kwargs) -> Incomplete: ... +def log(*args, **kwargs) -> Incomplete: ... +def tan(*args, **kwargs) -> Incomplete: ... +def tanh(*args, **kwargs) -> Incomplete: ... +def log2(*args, **kwargs) -> Incomplete: ... +def log10(*args, **kwargs) -> Incomplete: ... +def sin(*args, **kwargs) -> Incomplete: ... +def modf(*args, **kwargs) -> Incomplete: ... +def radians(*args, **kwargs) -> Incomplete: ... +def atanh(*args, **kwargs) -> Incomplete: ... +def atan2(*args, **kwargs) -> Incomplete: ... +def atan(*args, **kwargs) -> Incomplete: ... +def ceil(*args, **kwargs) -> Incomplete: ... +def copysign(*args, **kwargs) -> Incomplete: ... +def frexp(*args, **kwargs) -> Incomplete: ... +def acos(*args, **kwargs) -> Incomplete: ... +def pow(*args, **kwargs) -> Incomplete: ... +def asinh(*args, **kwargs) -> Incomplete: ... +def acosh(*args, **kwargs) -> Incomplete: ... +def asin(*args, **kwargs) -> Incomplete: ... +def factorial(*args, **kwargs) -> Incomplete: ... +def fabs(*args, **kwargs) -> Incomplete: ... +def expm1(*args, **kwargs) -> Incomplete: ... +def floor(*args, **kwargs) -> Incomplete: ... +def fmod(*args, **kwargs) -> Incomplete: ... +def cos(*args, **kwargs) -> Incomplete: ... +def degrees(*args, **kwargs) -> Incomplete: ... +def cosh(*args, **kwargs) -> Incomplete: ... +def exp(*args, **kwargs) -> Incomplete: ... +def erf(*args, **kwargs) -> Incomplete: ... +def erfc(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/micropython.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/micropython.pyi new file mode 100644 index 00000000..71f41d5f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/micropython.pyi @@ -0,0 +1,28 @@ +""" +Module: 'micropython' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def opt_level(*args, **kwargs) -> Incomplete: ... +def mem_info(*args, **kwargs) -> Incomplete: ... +def kbd_intr(*args, **kwargs) -> Incomplete: ... +def qstr_info(*args, **kwargs) -> Incomplete: ... +def schedule(*args, **kwargs) -> Incomplete: ... +def stack_use(*args, **kwargs) -> Incomplete: ... +def heap_unlock(*args, **kwargs) -> Incomplete: ... +def const(*args, **kwargs) -> Incomplete: ... +def heap_lock(*args, **kwargs) -> Incomplete: ... +def alloc_emergency_exception_buf(*args, **kwargs) -> Incomplete: ... + +class RingIO: + def readinto(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def any(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/modules.json b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/modules.json new file mode 100644 index 00000000..19324e1b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/modules.json @@ -0,0 +1,69 @@ +{"firmware": {"family": "micropython", "version": "1.24.1", "build": "", "ver": "1.24.1", "port": "rp2", "board": "RPI_PICO", "cpu": "RP2040", "mpy": "v6.3", "arch": "armv6m"}, +"stubber": {"version": "v1.24.0"}, "stubtype": "firmware", +"modules" :[ +{"module": "_asyncio", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/_asyncio.pyi"}, +{"module": "_boot_fat", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/_boot_fat.pyi"}, +{"module": "_onewire", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/_onewire.pyi"}, +{"module": "_rp2", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/_rp2.pyi"}, +{"module": "_thread", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/_thread.pyi"}, +{"module": "array", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/array.pyi"}, +{"module": "asyncio.__init__", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/asyncio/__init__.pyi"}, +{"module": "asyncio.core", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/asyncio/core.pyi"}, +{"module": "asyncio.event", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/asyncio/event.pyi"}, +{"module": "asyncio.funcs", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/asyncio/funcs.pyi"}, +{"module": "asyncio.lock", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/asyncio/lock.pyi"}, +{"module": "asyncio.stream", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/asyncio/stream.pyi"}, +{"module": "binascii", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/binascii.pyi"}, +{"module": "cmath", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/cmath.pyi"}, +{"module": "collections", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/collections.pyi"}, +{"module": "cryptolib", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/cryptolib.pyi"}, +{"module": "deflate", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/deflate.pyi"}, +{"module": "dht", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/dht.pyi"}, +{"module": "ds18x20", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ds18x20.pyi"}, +{"module": "errno", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/errno.pyi"}, +{"module": "framebuf", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/framebuf.pyi"}, +{"module": "gc", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/gc.pyi"}, +{"module": "hashlib", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/hashlib.pyi"}, +{"module": "heapq", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/heapq.pyi"}, +{"module": "io", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/io.pyi"}, +{"module": "json", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/json.pyi"}, +{"module": "machine", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi"}, +{"module": "math", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/math.pyi"}, +{"module": "micropython", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/micropython.pyi"}, +{"module": "neopixel", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/neopixel.pyi"}, +{"module": "onewire", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/onewire.pyi"}, +{"module": "os", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/os.pyi"}, +{"module": "platform", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/platform.pyi"}, +{"module": "random", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/random.pyi"}, +{"module": "rp2", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/rp2.pyi"}, +{"module": "select", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/select.pyi"}, +{"module": "struct", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/struct.pyi"}, +{"module": "sys", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/sys.pyi"}, +{"module": "time", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/time.pyi"}, +{"module": "uarray", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uarray.pyi"}, +{"module": "uasyncio.__init__", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/__init__.pyi"}, +{"module": "uasyncio.core", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/core.pyi"}, +{"module": "uasyncio.event", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/event.pyi"}, +{"module": "uasyncio.funcs", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/funcs.pyi"}, +{"module": "uasyncio.lock", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/lock.pyi"}, +{"module": "uasyncio.stream", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/stream.pyi"}, +{"module": "ubinascii", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ubinascii.pyi"}, +{"module": "ucollections", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ucollections.pyi"}, +{"module": "ucryptolib", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ucryptolib.pyi"}, +{"module": "uctypes", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uctypes.pyi"}, +{"module": "uerrno", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uerrno.pyi"}, +{"module": "uhashlib", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uhashlib.pyi"}, +{"module": "uheapq", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uheapq.pyi"}, +{"module": "uio", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uio.pyi"}, +{"module": "ujson", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ujson.pyi"}, +{"module": "umachine", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/umachine.pyi"}, +{"module": "uos", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uos.pyi"}, +{"module": "uplatform", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uplatform.pyi"}, +{"module": "urandom", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/urandom.pyi"}, +{"module": "ure", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ure.pyi"}, +{"module": "uselect", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/uselect.pyi"}, +{"module": "ustruct", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/ustruct.pyi"}, +{"module": "usys", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/usys.pyi"}, +{"module": "utime", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/utime.pyi"}, +{"module": "vfs", "file": "/remote/stubs/micropython-v1_24_1-rp2-RPI_PICO/vfs.pyi"} +]} \ No newline at end of file diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/neopixel.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/neopixel.pyi new file mode 100644 index 00000000..e067a62a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/neopixel.pyi @@ -0,0 +1,16 @@ +""" +Module: 'neopixel' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def bitstream(*args, **kwargs) -> Incomplete: ... + +class NeoPixel: + ORDER: tuple = () + def write(self, *args, **kwargs) -> Incomplete: ... + def fill(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/onewire.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/onewire.pyi new file mode 100644 index 00000000..194bbbe9 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/onewire.pyi @@ -0,0 +1,27 @@ +""" +Module: 'onewire' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class OneWireError(Exception): ... + +class OneWire: + SKIP_ROM: int = 204 + SEARCH_ROM: int = 240 + MATCH_ROM: int = 85 + def select_rom(self, *args, **kwargs) -> Incomplete: ... + def writebit(self, *args, **kwargs) -> Incomplete: ... + def writebyte(self, *args, **kwargs) -> Incomplete: ... + def _search_rom(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def crc8(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def scan(self, *args, **kwargs) -> Incomplete: ... + def reset(self, *args, **kwargs) -> Incomplete: ... + def readbit(self, *args, **kwargs) -> Incomplete: ... + def readbyte(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/os.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/os.pyi new file mode 100644 index 00000000..26a95566 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/os.pyi @@ -0,0 +1,61 @@ +""" +Module: 'os' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +sep: str = "/" + +def rmdir(*args, **kwargs) -> Incomplete: ... +def stat(*args, **kwargs) -> Incomplete: ... +def urandom(*args, **kwargs) -> Incomplete: ... +def rename(*args, **kwargs) -> Incomplete: ... +def mount(*args, **kwargs) -> Incomplete: ... +def uname(*args, **kwargs) -> Incomplete: ... +def unlink(*args, **kwargs) -> Incomplete: ... +def statvfs(*args, **kwargs) -> Incomplete: ... +def umount(*args, **kwargs) -> Incomplete: ... +def sync(*args, **kwargs) -> Incomplete: ... +def mkdir(*args, **kwargs) -> Incomplete: ... +def dupterm(*args, **kwargs) -> Incomplete: ... +def chdir(*args, **kwargs) -> Incomplete: ... +def remove(*args, **kwargs) -> Incomplete: ... +def dupterm_notify(*args, **kwargs) -> Incomplete: ... +def listdir(*args, **kwargs) -> Incomplete: ... +def ilistdir(*args, **kwargs) -> Incomplete: ... +def getcwd(*args, **kwargs) -> Incomplete: ... + +class VfsFat: + def rename(self, *args, **kwargs) -> Incomplete: ... + def mkfs(self, *args, **kwargs) -> Incomplete: ... + def mount(self, *args, **kwargs) -> Incomplete: ... + def statvfs(self, *args, **kwargs) -> Incomplete: ... + def rmdir(self, *args, **kwargs) -> Incomplete: ... + def stat(self, *args, **kwargs) -> Incomplete: ... + def umount(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def mkdir(self, *args, **kwargs) -> Incomplete: ... + def open(self, *args, **kwargs) -> Incomplete: ... + def ilistdir(self, *args, **kwargs) -> Incomplete: ... + def chdir(self, *args, **kwargs) -> Incomplete: ... + def getcwd(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class VfsLfs2: + def rename(self, *args, **kwargs) -> Incomplete: ... + def mkfs(self, *args, **kwargs) -> Incomplete: ... + def mount(self, *args, **kwargs) -> Incomplete: ... + def statvfs(self, *args, **kwargs) -> Incomplete: ... + def rmdir(self, *args, **kwargs) -> Incomplete: ... + def stat(self, *args, **kwargs) -> Incomplete: ... + def umount(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def mkdir(self, *args, **kwargs) -> Incomplete: ... + def open(self, *args, **kwargs) -> Incomplete: ... + def ilistdir(self, *args, **kwargs) -> Incomplete: ... + def chdir(self, *args, **kwargs) -> Incomplete: ... + def getcwd(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/platform.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/platform.pyi new file mode 100644 index 00000000..95b562c4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/platform.pyi @@ -0,0 +1,12 @@ +""" +Module: 'platform' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def platform(*args, **kwargs) -> Incomplete: ... +def python_compiler(*args, **kwargs) -> Incomplete: ... +def libc_ver(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/random.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/random.pyi new file mode 100644 index 00000000..76b7155f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/random.pyi @@ -0,0 +1,16 @@ +""" +Module: 'random' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def randrange(*args, **kwargs) -> Incomplete: ... +def random(*args, **kwargs) -> Incomplete: ... +def seed(*args, **kwargs) -> Incomplete: ... +def uniform(*args, **kwargs) -> Incomplete: ... +def choice(*args, **kwargs) -> Incomplete: ... +def randint(*args, **kwargs) -> Incomplete: ... +def getrandbits(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/rp2.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/rp2.pyi new file mode 100644 index 00000000..dd608f12 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/rp2.pyi @@ -0,0 +1,84 @@ +""" +Module: 'rp2' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +_pio_funcs: dict = {} + +def asm_pio_encode(*args, **kwargs) -> Incomplete: ... +def asm_pio(*args, **kwargs) -> Incomplete: ... +def bootsel_button(*args, **kwargs) -> Incomplete: ... +def const(*args, **kwargs) -> Incomplete: ... + +class PIOASMEmit: + def in_(self, *args, **kwargs) -> Incomplete: ... + def side(self, *args, **kwargs) -> Incomplete: ... + def out(self, *args, **kwargs) -> Incomplete: ... + def jmp(self, *args, **kwargs) -> Incomplete: ... + def start_pass(self, *args, **kwargs) -> Incomplete: ... + def wrap(self, *args, **kwargs) -> Incomplete: ... + def word(self, *args, **kwargs) -> Incomplete: ... + def wait(self, *args, **kwargs) -> Incomplete: ... + def wrap_target(self, *args, **kwargs) -> Incomplete: ... + def delay(self, *args, **kwargs) -> Incomplete: ... + def label(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def set(self, *args, **kwargs) -> Incomplete: ... + def mov(self, *args, **kwargs) -> Incomplete: ... + def push(self, *args, **kwargs) -> Incomplete: ... + def pull(self, *args, **kwargs) -> Incomplete: ... + def nop(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class PIOASMError(Exception): ... + +class PIO: + JOIN_TX: int = 1 + JOIN_NONE: int = 0 + JOIN_RX: int = 2 + SHIFT_LEFT: int = 0 + OUT_HIGH: int = 3 + OUT_LOW: int = 2 + SHIFT_RIGHT: int = 1 + IN_LOW: int = 0 + IRQ_SM3: int = 2048 + IN_HIGH: int = 1 + IRQ_SM2: int = 1024 + IRQ_SM0: int = 256 + IRQ_SM1: int = 512 + def state_machine(self, *args, **kwargs) -> Incomplete: ... + def remove_program(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def add_program(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class StateMachine: + def irq(self, *args, **kwargs) -> Incomplete: ... + def put(self, *args, **kwargs) -> Incomplete: ... + def restart(self, *args, **kwargs) -> Incomplete: ... + def rx_fifo(self, *args, **kwargs) -> Incomplete: ... + def tx_fifo(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def exec(self, *args, **kwargs) -> Incomplete: ... + def get(self, *args, **kwargs) -> Incomplete: ... + def active(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class DMA: + def irq(self, *args, **kwargs) -> Incomplete: ... + def unpack_ctrl(self, *args, **kwargs) -> Incomplete: ... + def pack_ctrl(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def config(self, *args, **kwargs) -> Incomplete: ... + def active(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Flash: + def readblocks(self, *args, **kwargs) -> Incomplete: ... + def writeblocks(self, *args, **kwargs) -> Incomplete: ... + def ioctl(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/select.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/select.pyi new file mode 100644 index 00000000..4d4359c4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/select.pyi @@ -0,0 +1,16 @@ +""" +Module: 'select' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +POLLOUT: int = 4 +POLLIN: int = 1 +POLLHUP: int = 16 +POLLERR: int = 8 + +def select(*args, **kwargs) -> Incomplete: ... +def poll(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/struct.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/struct.pyi new file mode 100644 index 00000000..ef041390 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/struct.pyi @@ -0,0 +1,14 @@ +""" +Module: 'struct' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def pack_into(*args, **kwargs) -> Incomplete: ... +def unpack(*args, **kwargs) -> Incomplete: ... +def unpack_from(*args, **kwargs) -> Incomplete: ... +def pack(*args, **kwargs) -> Incomplete: ... +def calcsize(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/sys.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/sys.pyi new file mode 100644 index 00000000..0b23a5cd --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/sys.pyi @@ -0,0 +1,27 @@ +""" +Module: 'sys' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +platform: str = "rp2" +version_info: tuple = () +path: list = [] +version: str = "3.4.0; MicroPython v1.24.1 on 2024-11-29" +ps1: str = ">>> " +ps2: str = "... " +byteorder: str = "little" +modules: dict = {} +argv: list = [] +implementation: tuple = () +maxsize: int = 2147483647 + +def print_exception(*args, **kwargs) -> Incomplete: ... +def exit(*args, **kwargs) -> Incomplete: ... + +stderr: Incomplete ## = +stdout: Incomplete ## = +stdin: Incomplete ## = diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/time.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/time.pyi new file mode 100644 index 00000000..b9a052b4 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/time.pyi @@ -0,0 +1,22 @@ +""" +Module: 'time' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def ticks_diff(*args, **kwargs) -> Incomplete: ... +def ticks_add(*args, **kwargs) -> Incomplete: ... +def ticks_cpu(*args, **kwargs) -> Incomplete: ... +def time(*args, **kwargs) -> Incomplete: ... +def ticks_ms(*args, **kwargs) -> Incomplete: ... +def ticks_us(*args, **kwargs) -> Incomplete: ... +def time_ns(*args, **kwargs) -> Incomplete: ... +def localtime(*args, **kwargs) -> Incomplete: ... +def sleep_us(*args, **kwargs) -> Incomplete: ... +def gmtime(*args, **kwargs) -> Incomplete: ... +def sleep_ms(*args, **kwargs) -> Incomplete: ... +def mktime(*args, **kwargs) -> Incomplete: ... +def sleep(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uarray.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uarray.pyi new file mode 100644 index 00000000..ad81c961 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uarray.pyi @@ -0,0 +1,13 @@ +""" +Module: 'uarray' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class array: + def extend(self, *args, **kwargs) -> Incomplete: ... + def append(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/__init__.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/__init__.pyi new file mode 100644 index 00000000..e9616063 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/__init__.pyi @@ -0,0 +1,127 @@ +""" +Module: 'uasyncio.__init__' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +_attrs: dict = {} + +def current_task(*args, **kwargs) -> Incomplete: ... +def get_event_loop(*args, **kwargs) -> Incomplete: ... +def create_task(*args, **kwargs) -> Incomplete: ... +def ticks_diff(*args, **kwargs) -> Incomplete: ... +def new_event_loop(*args, **kwargs) -> Incomplete: ... +def ticks(*args, **kwargs) -> Incomplete: ... +def run_until_complete(*args, **kwargs) -> Incomplete: ... +def run(*args, **kwargs) -> Incomplete: ... +def wait_for_ms(*args, **kwargs) -> Incomplete: ... +def sleep_ms(*args, **kwargs) -> Incomplete: ... +def ticks_add(*args, **kwargs) -> Incomplete: ... +def sleep(*args, **kwargs) -> Incomplete: ... + +class TaskQueue: + def push(self, *args, **kwargs) -> Incomplete: ... + def peek(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +open_connection: Generator ## = +cur_task: Incomplete ## = None +gather: Generator ## = + +class Task: + def __init__(self, *argv, **kwargs) -> None: ... + +wait_for: Generator ## = + +class CancelledError(Exception): ... + +start_server: Generator ## = + +class Lock: + def locked(self, *args, **kwargs) -> Incomplete: ... + def release(self, *args, **kwargs) -> Incomplete: ... + + acquire: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class StreamWriter: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class StreamReader: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class SingletonGenerator: + def __init__(self, *argv, **kwargs) -> None: ... + +class Loop: + def get_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def default_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def set_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def run_forever(self, *args, **kwargs) -> Incomplete: ... + def run_until_complete(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def create_task(self, *args, **kwargs) -> Incomplete: ... + def call_exception_handler(self, *args, **kwargs) -> Incomplete: ... + + _exc_handler: Incomplete ## = None + def __init__(self, *argv, **kwargs) -> None: ... + +class Event: + def set(self, *args, **kwargs) -> Incomplete: ... + def is_set(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class ThreadSafeFlag: + def set(self, *args, **kwargs) -> Incomplete: ... + def ioctl(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class IOQueue: + def queue_read(self, *args, **kwargs) -> Incomplete: ... + def wait_io_event(self, *args, **kwargs) -> Incomplete: ... + def queue_write(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def _enqueue(self, *args, **kwargs) -> Incomplete: ... + def _dequeue(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class TimeoutError(Exception): ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/core.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/core.pyi new file mode 100644 index 00000000..105bf66b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/core.pyi @@ -0,0 +1,71 @@ +""" +Module: 'uasyncio.core' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +_exc_context: dict = {} + +def ticks(*args, **kwargs) -> Incomplete: ... +def create_task(*args, **kwargs) -> Incomplete: ... +def _promote_to_task(*args, **kwargs) -> Incomplete: ... +def ticks_diff(*args, **kwargs) -> Incomplete: ... +def run(*args, **kwargs) -> Incomplete: ... +def run_until_complete(*args, **kwargs) -> Incomplete: ... +def current_task(*args, **kwargs) -> Incomplete: ... +def new_event_loop(*args, **kwargs) -> Incomplete: ... +def get_event_loop(*args, **kwargs) -> Incomplete: ... +def sleep_ms(*args, **kwargs) -> Incomplete: ... +def ticks_add(*args, **kwargs) -> Incomplete: ... +def sleep(*args, **kwargs) -> Incomplete: ... + +cur_task: Incomplete ## = None +_task_queue: Incomplete ## = + +class Loop: + def get_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def default_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def set_exception_handler(self, *args, **kwargs) -> Incomplete: ... + def run_forever(self, *args, **kwargs) -> Incomplete: ... + def run_until_complete(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def create_task(self, *args, **kwargs) -> Incomplete: ... + def call_exception_handler(self, *args, **kwargs) -> Incomplete: ... + + _exc_handler: Incomplete ## = None + def __init__(self, *argv, **kwargs) -> None: ... + +class CancelledError(Exception): ... + +class TaskQueue: + def push(self, *args, **kwargs) -> Incomplete: ... + def peek(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Task: + def __init__(self, *argv, **kwargs) -> None: ... + +class TimeoutError(Exception): ... + +class IOQueue: + def queue_read(self, *args, **kwargs) -> Incomplete: ... + def wait_io_event(self, *args, **kwargs) -> Incomplete: ... + def queue_write(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def _enqueue(self, *args, **kwargs) -> Incomplete: ... + def _dequeue(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class SingletonGenerator: + def __init__(self, *argv, **kwargs) -> None: ... + +_stopper: Generator ## = +_stop_task: Incomplete ## = None +_io_queue: Incomplete ## = diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/event.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/event.pyi new file mode 100644 index 00000000..be842a12 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/event.pyi @@ -0,0 +1,25 @@ +""" +Module: 'uasyncio.event' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +class ThreadSafeFlag: + def set(self, *args, **kwargs) -> Incomplete: ... + def ioctl(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class Event: + def set(self, *args, **kwargs) -> Incomplete: ... + def is_set(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + + wait: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/funcs.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/funcs.pyi new file mode 100644 index 00000000..80a1e766 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/funcs.pyi @@ -0,0 +1,20 @@ +""" +Module: 'uasyncio.funcs' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +def wait_for_ms(*args, **kwargs) -> Incomplete: ... + +gather: Generator ## = +wait_for: Generator ## = + +class _Remove: + def remove(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +_run: Generator ## = diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/lock.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/lock.pyi new file mode 100644 index 00000000..b4a2873d --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/lock.pyi @@ -0,0 +1,16 @@ +""" +Module: 'uasyncio.lock' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +class Lock: + def locked(self, *args, **kwargs) -> Incomplete: ... + def release(self, *args, **kwargs) -> Incomplete: ... + + acquire: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/stream.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/stream.pyi new file mode 100644 index 00000000..6148f1f6 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uasyncio/stream.pyi @@ -0,0 +1,68 @@ +""" +Module: 'uasyncio.stream' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from typing import Generator +from _typeshed import Incomplete + +stream_awrite: Generator ## = +open_connection: Generator ## = +start_server: Generator ## = + +class StreamWriter: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class Server: + def close(self, *args, **kwargs) -> Incomplete: ... + + wait_closed: Generator ## = + _serve: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class Stream: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... + +class StreamReader: + def write(self, *args, **kwargs) -> Incomplete: ... + def get_extra_info(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + + awritestr: Generator ## = + wait_closed: Generator ## = + drain: Generator ## = + readexactly: Generator ## = + readinto: Generator ## = + read: Generator ## = + awrite: Generator ## = + readline: Generator ## = + aclose: Generator ## = + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ubinascii.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ubinascii.pyi new file mode 100644 index 00000000..032f0085 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ubinascii.pyi @@ -0,0 +1,14 @@ +""" +Module: 'ubinascii' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def crc32(*args, **kwargs) -> Incomplete: ... +def hexlify(*args, **kwargs) -> Incomplete: ... +def unhexlify(*args, **kwargs) -> Incomplete: ... +def b2a_base64(*args, **kwargs) -> Incomplete: ... +def a2b_base64(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucollections.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucollections.pyi new file mode 100644 index 00000000..eb7fbf89 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucollections.pyi @@ -0,0 +1,33 @@ +""" +Module: 'ucollections' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def namedtuple(*args, **kwargs) -> Incomplete: ... + +class OrderedDict: + def popitem(self, *args, **kwargs) -> Incomplete: ... + def pop(self, *args, **kwargs) -> Incomplete: ... + def values(self, *args, **kwargs) -> Incomplete: ... + def setdefault(self, *args, **kwargs) -> Incomplete: ... + def update(self, *args, **kwargs) -> Incomplete: ... + def copy(self, *args, **kwargs) -> Incomplete: ... + def clear(self, *args, **kwargs) -> Incomplete: ... + def keys(self, *args, **kwargs) -> Incomplete: ... + def get(self, *args, **kwargs) -> Incomplete: ... + def items(self, *args, **kwargs) -> Incomplete: ... + @classmethod + def fromkeys(cls, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class deque: + def pop(self, *args, **kwargs) -> Incomplete: ... + def appendleft(self, *args, **kwargs) -> Incomplete: ... + def popleft(self, *args, **kwargs) -> Incomplete: ... + def extend(self, *args, **kwargs) -> Incomplete: ... + def append(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucryptolib.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucryptolib.pyi new file mode 100644 index 00000000..c176676b --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ucryptolib.pyi @@ -0,0 +1,13 @@ +""" +Module: 'ucryptolib' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class aes: + def encrypt(self, *args, **kwargs) -> Incomplete: ... + def decrypt(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uctypes.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uctypes.pyi new file mode 100644 index 00000000..ee147d66 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uctypes.pyi @@ -0,0 +1,49 @@ +""" +Module: 'uctypes' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +VOID: int = 0 +NATIVE: int = 2 +PTR: int = 536870912 +SHORT: int = 402653184 +LONGLONG: int = 939524096 +INT8: int = 134217728 +LITTLE_ENDIAN: int = 0 +LONG: int = 671088640 +UINT: int = 536870912 +ULONG: int = 536870912 +ULONGLONG: int = 805306368 +USHORT: int = 268435456 +UINT8: int = 0 +UINT16: int = 268435456 +UINT32: int = 536870912 +UINT64: int = 805306368 +INT64: int = 939524096 +BFUINT16: int = -805306368 +BFUINT32: int = -536870912 +BFUINT8: int = -1073741824 +BFINT8: int = -939524096 +ARRAY: int = -1073741824 +BFINT16: int = -671088640 +BFINT32: int = -402653184 +BF_LEN: int = 22 +INT: int = 671088640 +INT16: int = 402653184 +INT32: int = 671088640 +FLOAT64: int = -134217728 +BF_POS: int = 17 +BIG_ENDIAN: int = 1 +FLOAT32: int = -268435456 + +def sizeof(*args, **kwargs) -> Incomplete: ... +def bytes_at(*args, **kwargs) -> Incomplete: ... +def bytearray_at(*args, **kwargs) -> Incomplete: ... +def addressof(*args, **kwargs) -> Incomplete: ... + +class struct: + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uerrno.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uerrno.pyi new file mode 100644 index 00000000..a797ec2f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uerrno.pyi @@ -0,0 +1,32 @@ +""" +Module: 'uerrno' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +ENOBUFS: int = 105 +ENODEV: int = 19 +ENOENT: int = 2 +EISDIR: int = 21 +EIO: int = 5 +EINVAL: int = 22 +EPERM: int = 1 +ETIMEDOUT: int = 110 +ENOMEM: int = 12 +EOPNOTSUPP: int = 95 +ENOTCONN: int = 107 +errorcode: dict = {} +EAGAIN: int = 11 +EALREADY: int = 114 +EBADF: int = 9 +EADDRINUSE: int = 98 +EACCES: int = 13 +EINPROGRESS: int = 115 +EEXIST: int = 17 +EHOSTUNREACH: int = 113 +ECONNABORTED: int = 103 +ECONNRESET: int = 104 +ECONNREFUSED: int = 111 diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uhashlib.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uhashlib.pyi new file mode 100644 index 00000000..2702b131 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uhashlib.pyi @@ -0,0 +1,18 @@ +""" +Module: 'uhashlib' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +class sha256: + def digest(self, *args, **kwargs) -> Incomplete: ... + def update(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class sha1: + def digest(self, *args, **kwargs) -> Incomplete: ... + def update(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uheapq.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uheapq.pyi new file mode 100644 index 00000000..8f870b04 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uheapq.pyi @@ -0,0 +1,12 @@ +""" +Module: 'uheapq' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def heappop(*args, **kwargs) -> Incomplete: ... +def heappush(*args, **kwargs) -> Incomplete: ... +def heapify(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uio.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uio.pyi new file mode 100644 index 00000000..523137f3 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uio.pyi @@ -0,0 +1,37 @@ +""" +Module: 'uio' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def open(*args, **kwargs) -> Incomplete: ... + +class IOBase: + def __init__(self, *argv, **kwargs) -> None: ... + +class StringIO: + def write(self, *args, **kwargs) -> Incomplete: ... + def flush(self, *args, **kwargs) -> Incomplete: ... + def getvalue(self, *args, **kwargs) -> Incomplete: ... + def seek(self, *args, **kwargs) -> Incomplete: ... + def tell(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class BytesIO: + def write(self, *args, **kwargs) -> Incomplete: ... + def flush(self, *args, **kwargs) -> Incomplete: ... + def getvalue(self, *args, **kwargs) -> Incomplete: ... + def seek(self, *args, **kwargs) -> Incomplete: ... + def tell(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def close(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ujson.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ujson.pyi new file mode 100644 index 00000000..ab6191bc --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ujson.pyi @@ -0,0 +1,13 @@ +""" +Module: 'ujson' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def loads(*args, **kwargs) -> Incomplete: ... +def load(*args, **kwargs) -> Incomplete: ... +def dumps(*args, **kwargs) -> Incomplete: ... +def dump(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/umachine.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/umachine.pyi new file mode 100644 index 00000000..4ce142a1 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/umachine.pyi @@ -0,0 +1,282 @@ +""" +Module: 'umachine' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +WDT_RESET: int = 3 +PWRON_RESET: int = 1 + +def dht_readinto(*args, **kwargs) -> Incomplete: ... +def enable_irq(*args, **kwargs) -> Incomplete: ... +def disable_irq(*args, **kwargs) -> Incomplete: ... +def bitstream(*args, **kwargs) -> Incomplete: ... +def deepsleep(*args, **kwargs) -> Incomplete: ... +def bootloader(*args, **kwargs) -> Incomplete: ... +def soft_reset(*args, **kwargs) -> Incomplete: ... +def reset(*args, **kwargs) -> Incomplete: ... +def freq(*args, **kwargs) -> Incomplete: ... +def reset_cause(*args, **kwargs) -> Incomplete: ... +def idle(*args, **kwargs) -> Incomplete: ... +def time_pulse_us(*args, **kwargs) -> Incomplete: ... +def lightsleep(*args, **kwargs) -> Incomplete: ... +def unique_id(*args, **kwargs) -> Incomplete: ... + +class Pin: + ALT_SPI: int = 1 + IN: int = 0 + ALT_USB: int = 9 + ALT_UART: int = 2 + IRQ_FALLING: int = 4 + OUT: int = 1 + OPEN_DRAIN: int = 2 + IRQ_RISING: int = 8 + PULL_DOWN: int = 2 + ALT_SIO: int = 5 + ALT_GPCK: int = 8 + ALT: int = 3 + PULL_UP: int = 1 + ALT_I2C: int = 3 + ALT_PWM: int = 4 + ALT_PIO1: int = 7 + ALT_PIO0: int = 6 + def low(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def toggle(self, *args, **kwargs) -> Incomplete: ... + def off(self, *args, **kwargs) -> Incomplete: ... + def on(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def value(self, *args, **kwargs) -> Incomplete: ... + def high(self, *args, **kwargs) -> Incomplete: ... + + class cpu: + GPIO26: Pin ## = Pin(GPIO26, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO25: Pin ## = Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO27: Pin ## = Pin(GPIO27, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO28: Pin ## = Pin(GPIO28, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO22: Pin ## = Pin(GPIO22, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO24: Pin ## = Pin(GPIO24, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO23: Pin ## = Pin(GPIO23, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO9: Pin ## = Pin(GPIO9, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO7: Pin ## = Pin(GPIO7, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO6: Pin ## = Pin(GPIO6, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO8: Pin ## = Pin(GPIO8, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO29: Pin ## = Pin(GPIO29, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO3: Pin ## = Pin(GPIO3, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO5: Pin ## = Pin(GPIO5, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO4: Pin ## = Pin(GPIO4, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO12: Pin ## = Pin(GPIO12, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO11: Pin ## = Pin(GPIO11, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO13: Pin ## = Pin(GPIO13, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO14: Pin ## = Pin(GPIO14, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO0: Pin ## = Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO10: Pin ## = Pin(GPIO10, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO1: Pin ## = Pin(GPIO1, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO21: Pin ## = Pin(GPIO21, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO2: Pin ## = Pin(GPIO2, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO19: Pin ## = Pin(GPIO19, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO20: Pin ## = Pin(GPIO20, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO15: Pin ## = Pin(GPIO15, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO16: Pin ## = Pin(GPIO16, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO18: Pin ## = Pin(GPIO18, mode=ALT, pull=PULL_DOWN, alt=31) + GPIO17: Pin ## = Pin(GPIO17, mode=ALT, pull=PULL_DOWN, alt=31) + def __init__(self, *argv, **kwargs) -> None: ... + + class board: + GP27: Pin ## = Pin(GPIO27, mode=ALT, pull=PULL_DOWN, alt=31) + GP26: Pin ## = Pin(GPIO26, mode=ALT, pull=PULL_DOWN, alt=31) + GP28: Pin ## = Pin(GPIO28, mode=ALT, pull=PULL_DOWN, alt=31) + LED: Pin ## = Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31) + GP21: Pin ## = Pin(GPIO21, mode=ALT, pull=PULL_DOWN, alt=31) + GP25: Pin ## = Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31) + GP22: Pin ## = Pin(GPIO22, mode=ALT, pull=PULL_DOWN, alt=31) + GP8: Pin ## = Pin(GPIO8, mode=ALT, pull=PULL_DOWN, alt=31) + GP7: Pin ## = Pin(GPIO7, mode=ALT, pull=PULL_DOWN, alt=31) + GP9: Pin ## = Pin(GPIO9, mode=ALT, pull=PULL_DOWN, alt=31) + GP3: Pin ## = Pin(GPIO3, mode=ALT, pull=PULL_DOWN, alt=31) + GP4: Pin ## = Pin(GPIO4, mode=ALT, pull=PULL_DOWN, alt=31) + GP6: Pin ## = Pin(GPIO6, mode=ALT, pull=PULL_DOWN, alt=31) + GP5: Pin ## = Pin(GPIO5, mode=ALT, pull=PULL_DOWN, alt=31) + GP12: Pin ## = Pin(GPIO12, mode=ALT, pull=PULL_DOWN, alt=31) + GP11: Pin ## = Pin(GPIO11, mode=ALT, pull=PULL_DOWN, alt=31) + GP13: Pin ## = Pin(GPIO13, mode=ALT, pull=PULL_DOWN, alt=31) + GP20: Pin ## = Pin(GPIO20, mode=ALT, pull=PULL_DOWN, alt=31) + GP0: Pin ## = Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31) + GP10: Pin ## = Pin(GPIO10, mode=ALT, pull=PULL_DOWN, alt=31) + GP1: Pin ## = Pin(GPIO1, mode=ALT, pull=PULL_DOWN, alt=31) + GP19: Pin ## = Pin(GPIO19, mode=ALT, pull=PULL_DOWN, alt=31) + GP18: Pin ## = Pin(GPIO18, mode=ALT, pull=PULL_DOWN, alt=31) + GP2: Pin ## = Pin(GPIO2, mode=ALT, pull=PULL_DOWN, alt=31) + GP14: Pin ## = Pin(GPIO14, mode=ALT, pull=PULL_DOWN, alt=31) + GP15: Pin ## = Pin(GPIO15, mode=ALT, pull=PULL_DOWN, alt=31) + GP17: Pin ## = Pin(GPIO17, mode=ALT, pull=PULL_DOWN, alt=31) + GP16: Pin ## = Pin(GPIO16, mode=ALT, pull=PULL_DOWN, alt=31) + def __init__(self, *argv, **kwargs) -> None: ... + + def __init__(self, *argv, **kwargs) -> None: ... + +mem8: Incomplete ## = <8-bit memory> +mem32: Incomplete ## = <32-bit memory> +mem16: Incomplete ## = <16-bit memory> + +class PWM: + def duty_u16(self, *args, **kwargs) -> Incomplete: ... + def freq(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def duty_ns(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class ADC: + CORE_TEMP: int = 4 + def read_u16(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class I2C: + def readfrom_mem_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_mem(self, *args, **kwargs) -> Incomplete: ... + def writeto_mem(self, *args, **kwargs) -> Incomplete: ... + def scan(self, *args, **kwargs) -> Incomplete: ... + def writeto(self, *args, **kwargs) -> Incomplete: ... + def writevto(self, *args, **kwargs) -> Incomplete: ... + def start(self, *args, **kwargs) -> Incomplete: ... + def readfrom(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class I2S: + RX: int = 0 + MONO: int = 0 + STEREO: int = 1 + TX: int = 1 + def shift(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class WDT: + def feed(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class RTC: + def datetime(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Timer: + PERIODIC: int = 1 + ONE_SHOT: int = 0 + def init(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class UART: + INV_TX: int = 1 + RTS: int = 2 + INV_RX: int = 2 + IRQ_TXIDLE: int = 32 + IRQ_BREAK: int = 512 + IRQ_RXIDLE: int = 64 + CTS: int = 1 + def irq(self, *args, **kwargs) -> Incomplete: ... + def sendbreak(self, *args, **kwargs) -> Incomplete: ... + def deinit(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def flush(self, *args, **kwargs) -> Incomplete: ... + def txdone(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def any(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def readline(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class USBDevice: + def submit_xfer(self, *args, **kwargs) -> Incomplete: ... + def config(self, *args, **kwargs) -> Incomplete: ... + def remote_wakeup(self, *args, **kwargs) -> Incomplete: ... + def stall(self, *args, **kwargs) -> Incomplete: ... + def active(self, *args, **kwargs) -> Incomplete: ... + + class BUILTIN_CDC: + ep_max: int = 3 + itf_max: int = 2 + str_max: int = 5 + desc_dev: bytes = b"\x12\x01\x00\x02\xef\x02\x01@\x8a.\x05\x00\x00\x01\x01\x02\x03\x01" + desc_cfg: bytes = ( + b"\t\x02K\x00\x02\x01\x00\x80}\x08\x0b\x00\x02\x02\x02\x00\x00\t\x04\x00\x00\x01\x02\x02\x00\x04\x05$\x00 \x01\x05$\x01\x00\x01\x04$\x02\x06\x05$\x06\x00\x01\x07\x05\x81\x03\x08\x00\x10\t\x04\x01\x00\x02\n\x00\x00\x00\x07\x05\x02\x02@\x00\x00\x07\x05\x82\x02@\x00\x00" + ) + def __init__(self, *argv, **kwargs) -> None: ... + + class BUILTIN_NONE: + ep_max: int = 0 + itf_max: int = 0 + str_max: int = 1 + desc_dev: bytes = b"\x12\x01\x00\x02\xef\x02\x01@\x8a.\x05\x00\x00\x01\x01\x02\x03\x01" + desc_cfg: bytes = b"" + def __init__(self, *argv, **kwargs) -> None: ... + + class BUILTIN_DEFAULT: + ep_max: int = 3 + itf_max: int = 2 + str_max: int = 5 + desc_dev: bytes = b"\x12\x01\x00\x02\xef\x02\x01@\x8a.\x05\x00\x00\x01\x01\x02\x03\x01" + desc_cfg: bytes = ( + b"\t\x02K\x00\x02\x01\x00\x80}\x08\x0b\x00\x02\x02\x02\x00\x00\t\x04\x00\x00\x01\x02\x02\x00\x04\x05$\x00 \x01\x05$\x01\x00\x01\x04$\x02\x06\x05$\x06\x00\x01\x07\x05\x81\x03\x08\x00\x10\t\x04\x01\x00\x02\n\x00\x00\x00\x07\x05\x02\x02@\x00\x00\x07\x05\x82\x02@\x00\x00" + ) + def __init__(self, *argv, **kwargs) -> None: ... + + def __init__(self, *argv, **kwargs) -> None: ... + +class SoftSPI: + LSB: int = 0 + MSB: int = 1 + def deinit(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def write_readinto(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class SPI: + LSB: int = 0 + MSB: int = 1 + def deinit(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def write_readinto(self, *args, **kwargs) -> Incomplete: ... + def read(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class Signal: + def off(self, *args, **kwargs) -> Incomplete: ... + def on(self, *args, **kwargs) -> Incomplete: ... + def value(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class SoftI2C: + def readfrom_mem_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_into(self, *args, **kwargs) -> Incomplete: ... + def readfrom_mem(self, *args, **kwargs) -> Incomplete: ... + def writeto_mem(self, *args, **kwargs) -> Incomplete: ... + def scan(self, *args, **kwargs) -> Incomplete: ... + def writeto(self, *args, **kwargs) -> Incomplete: ... + def writevto(self, *args, **kwargs) -> Incomplete: ... + def start(self, *args, **kwargs) -> Incomplete: ... + def readfrom(self, *args, **kwargs) -> Incomplete: ... + def readinto(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def stop(self, *args, **kwargs) -> Incomplete: ... + def write(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uos.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uos.pyi new file mode 100644 index 00000000..980ee4bd --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uos.pyi @@ -0,0 +1,61 @@ +""" +Module: 'uos' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +sep: str = "/" + +def rmdir(*args, **kwargs) -> Incomplete: ... +def stat(*args, **kwargs) -> Incomplete: ... +def urandom(*args, **kwargs) -> Incomplete: ... +def rename(*args, **kwargs) -> Incomplete: ... +def mount(*args, **kwargs) -> Incomplete: ... +def uname(*args, **kwargs) -> Incomplete: ... +def unlink(*args, **kwargs) -> Incomplete: ... +def statvfs(*args, **kwargs) -> Incomplete: ... +def umount(*args, **kwargs) -> Incomplete: ... +def sync(*args, **kwargs) -> Incomplete: ... +def mkdir(*args, **kwargs) -> Incomplete: ... +def dupterm(*args, **kwargs) -> Incomplete: ... +def chdir(*args, **kwargs) -> Incomplete: ... +def remove(*args, **kwargs) -> Incomplete: ... +def dupterm_notify(*args, **kwargs) -> Incomplete: ... +def listdir(*args, **kwargs) -> Incomplete: ... +def ilistdir(*args, **kwargs) -> Incomplete: ... +def getcwd(*args, **kwargs) -> Incomplete: ... + +class VfsFat: + def rename(self, *args, **kwargs) -> Incomplete: ... + def mkfs(self, *args, **kwargs) -> Incomplete: ... + def mount(self, *args, **kwargs) -> Incomplete: ... + def statvfs(self, *args, **kwargs) -> Incomplete: ... + def rmdir(self, *args, **kwargs) -> Incomplete: ... + def stat(self, *args, **kwargs) -> Incomplete: ... + def umount(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def mkdir(self, *args, **kwargs) -> Incomplete: ... + def open(self, *args, **kwargs) -> Incomplete: ... + def ilistdir(self, *args, **kwargs) -> Incomplete: ... + def chdir(self, *args, **kwargs) -> Incomplete: ... + def getcwd(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class VfsLfs2: + def rename(self, *args, **kwargs) -> Incomplete: ... + def mkfs(self, *args, **kwargs) -> Incomplete: ... + def mount(self, *args, **kwargs) -> Incomplete: ... + def statvfs(self, *args, **kwargs) -> Incomplete: ... + def rmdir(self, *args, **kwargs) -> Incomplete: ... + def stat(self, *args, **kwargs) -> Incomplete: ... + def umount(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def mkdir(self, *args, **kwargs) -> Incomplete: ... + def open(self, *args, **kwargs) -> Incomplete: ... + def ilistdir(self, *args, **kwargs) -> Incomplete: ... + def chdir(self, *args, **kwargs) -> Incomplete: ... + def getcwd(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uplatform.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uplatform.pyi new file mode 100644 index 00000000..8d8c1da9 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uplatform.pyi @@ -0,0 +1,12 @@ +""" +Module: 'uplatform' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def platform(*args, **kwargs) -> Incomplete: ... +def python_compiler(*args, **kwargs) -> Incomplete: ... +def libc_ver(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/urandom.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/urandom.pyi new file mode 100644 index 00000000..5b433df5 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/urandom.pyi @@ -0,0 +1,16 @@ +""" +Module: 'urandom' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def randrange(*args, **kwargs) -> Incomplete: ... +def random(*args, **kwargs) -> Incomplete: ... +def seed(*args, **kwargs) -> Incomplete: ... +def uniform(*args, **kwargs) -> Incomplete: ... +def choice(*args, **kwargs) -> Incomplete: ... +def randint(*args, **kwargs) -> Incomplete: ... +def getrandbits(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ure.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ure.pyi new file mode 100644 index 00000000..c824d07a --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ure.pyi @@ -0,0 +1,13 @@ +""" +Module: 'ure' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def sub(*args, **kwargs) -> Incomplete: ... +def search(*args, **kwargs) -> Incomplete: ... +def match(*args, **kwargs) -> Incomplete: ... +def compile(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uselect.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uselect.pyi new file mode 100644 index 00000000..03db7e2e --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/uselect.pyi @@ -0,0 +1,16 @@ +""" +Module: 'uselect' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +POLLOUT: int = 4 +POLLIN: int = 1 +POLLHUP: int = 16 +POLLERR: int = 8 + +def select(*args, **kwargs) -> Incomplete: ... +def poll(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ustruct.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ustruct.pyi new file mode 100644 index 00000000..2888292f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/ustruct.pyi @@ -0,0 +1,14 @@ +""" +Module: 'ustruct' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def pack_into(*args, **kwargs) -> Incomplete: ... +def unpack(*args, **kwargs) -> Incomplete: ... +def unpack_from(*args, **kwargs) -> Incomplete: ... +def pack(*args, **kwargs) -> Incomplete: ... +def calcsize(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/usys.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/usys.pyi new file mode 100644 index 00000000..2695dbb0 --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/usys.pyi @@ -0,0 +1,27 @@ +""" +Module: 'usys' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +platform: str = "rp2" +version_info: tuple = () +path: list = [] +version: str = "3.4.0; MicroPython v1.24.1 on 2024-11-29" +ps1: str = ">>> " +ps2: str = "... " +byteorder: str = "little" +modules: dict = {} +argv: list = [] +implementation: tuple = () +maxsize: int = 2147483647 + +def print_exception(*args, **kwargs) -> Incomplete: ... +def exit(*args, **kwargs) -> Incomplete: ... + +stderr: Incomplete ## = +stdout: Incomplete ## = +stdin: Incomplete ## = diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/utime.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/utime.pyi new file mode 100644 index 00000000..bb4a995d --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/utime.pyi @@ -0,0 +1,22 @@ +""" +Module: 'utime' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def ticks_diff(*args, **kwargs) -> Incomplete: ... +def ticks_add(*args, **kwargs) -> Incomplete: ... +def ticks_cpu(*args, **kwargs) -> Incomplete: ... +def time(*args, **kwargs) -> Incomplete: ... +def ticks_ms(*args, **kwargs) -> Incomplete: ... +def ticks_us(*args, **kwargs) -> Incomplete: ... +def time_ns(*args, **kwargs) -> Incomplete: ... +def localtime(*args, **kwargs) -> Incomplete: ... +def sleep_us(*args, **kwargs) -> Incomplete: ... +def gmtime(*args, **kwargs) -> Incomplete: ... +def sleep_ms(*args, **kwargs) -> Incomplete: ... +def mktime(*args, **kwargs) -> Incomplete: ... +def sleep(*args, **kwargs) -> Incomplete: ... diff --git a/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/vfs.pyi b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/vfs.pyi new file mode 100644 index 00000000..9390b51f --- /dev/null +++ b/tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/vfs.pyi @@ -0,0 +1,43 @@ +""" +Module: 'vfs' on micropython-v1.24.1-rp2-RPI_PICO +""" + +# MCU: {'family': 'micropython', 'version': '1.24.1', 'build': '', 'ver': '1.24.1', 'port': 'rp2', 'board': 'RPI_PICO', 'cpu': 'RP2040', 'mpy': 'v6.3', 'arch': 'armv6m'} +# Stubber: v1.24.0 +from __future__ import annotations +from _typeshed import Incomplete + +def umount(*args, **kwargs) -> Incomplete: ... +def mount(*args, **kwargs) -> Incomplete: ... + +class VfsLfs2: + def rename(self, *args, **kwargs) -> Incomplete: ... + def mkfs(self, *args, **kwargs) -> Incomplete: ... + def mount(self, *args, **kwargs) -> Incomplete: ... + def statvfs(self, *args, **kwargs) -> Incomplete: ... + def rmdir(self, *args, **kwargs) -> Incomplete: ... + def stat(self, *args, **kwargs) -> Incomplete: ... + def umount(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def mkdir(self, *args, **kwargs) -> Incomplete: ... + def open(self, *args, **kwargs) -> Incomplete: ... + def ilistdir(self, *args, **kwargs) -> Incomplete: ... + def chdir(self, *args, **kwargs) -> Incomplete: ... + def getcwd(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... + +class VfsFat: + def rename(self, *args, **kwargs) -> Incomplete: ... + def mkfs(self, *args, **kwargs) -> Incomplete: ... + def mount(self, *args, **kwargs) -> Incomplete: ... + def statvfs(self, *args, **kwargs) -> Incomplete: ... + def rmdir(self, *args, **kwargs) -> Incomplete: ... + def stat(self, *args, **kwargs) -> Incomplete: ... + def umount(self, *args, **kwargs) -> Incomplete: ... + def remove(self, *args, **kwargs) -> Incomplete: ... + def mkdir(self, *args, **kwargs) -> Incomplete: ... + def open(self, *args, **kwargs) -> Incomplete: ... + def ilistdir(self, *args, **kwargs) -> Incomplete: ... + def chdir(self, *args, **kwargs) -> Incomplete: ... + def getcwd(self, *args, **kwargs) -> Incomplete: ... + def __init__(self, *argv, **kwargs) -> None: ... diff --git a/tests/merge/test_enrich.py b/tests/merge/test_enrich.py new file mode 100644 index 00000000..4c5aeffa --- /dev/null +++ b/tests/merge/test_enrich.py @@ -0,0 +1,130 @@ +from pathlib import Path + +import pytest +from stubber.codemod.enrich import ( + enrich_file, + enrich_folder, + package_from_path, + source_target_candidates, + upackage_equal, +) + + +def test_package_from_path(tmp_path): + # Create temporary files and directories for testing + target = tmp_path / "target.pyi" + target.touch() + source = tmp_path / "source.pyi" + source.touch() + package_name = package_from_path(target, source) + assert package_name == "target" + + +@pytest.mark.parametrize( + "id, src_pkg, dst_pkg, exp_match, exp_len", + [ + (10, "module", "umodule", True, 6), + (11, "umodule", "module", False, 0), + (12, "umodule", "umodule", True, 7), + # + (20, "module1", "module2", False, 0), + # + (30, "_module", "module", True, 6), + (31, "_module", "_module", True, 6), + (32, "module", "_module", True, 6), + # + (40, "module.__init__", "module", True, 6), + (40, "module.__init__", "module.__init__", True, 6), + (40, "module.", "module.__init__", True, 6), + # + (50, "module.FOO", "module", True, 6), + (51, "module", "module.FOO", True, 6), + (52, "module.FOO", "module.__init__", True, 6), + (53, "module.FOO", "module.FOO", True, 10), + (54, "module.FOO", "module.BAR", False, 0), + ], +) +def test_upackage_equal(id, src_pkg, dst_pkg, exp_match, exp_len): + match, length = upackage_equal(src_pkg, dst_pkg) + assert match == exp_match + assert length == exp_len + + +# Source --> target +@pytest.mark.parametrize( + "test_id, source_files, target_files, expected_matches", + [ + (10, ["module.pyi"], ["module.pyi"], 1), + (11, ["module/__init__.pyi"], ["module.pyi"], 1), + (12, ["module/__init__.pyi", "module/FOO.pyi"], ["module.pyi"], 2), + (13, ["module/__init__.pyi", "umodule/FOO.pyi"], ["module.pyi"], 1), # umodule is no match + (14, ["module/__init__.pyi", "_module/FOO.pyi"], ["module.pyi"], 1), # _module is no match + (15, ["module/__init__.pyi", "module/bar/FOO.pyi"], ["module.pyi"], 2), + (16, ["module/__init__.pyi", "module/FOO.pyi"], ["module/__init__.pyi"], 2), + ( + 17.1, + ["module/__init__.pyi", "module/FOO.pyi", "module/BAR.pyi"], + ["module/__init__.pyi"], + 3, # Should be 3 , but there is only 1 + ), + ( + 17.2, + ["module/__init__.pyi", "module/FOO.pyi", "module/BAZ/BAR.pyi"], + ["module/__init__.pyi"], + 3, # Should be 3 , but there is only 1 + ), + ( + 17.3, + ["module/__init__.pyi", "module/FOO.pyi", "module/BAZ/BAR.pyi"], + ["module.pyi"], + 3, # Should be 3 , but there is only 1 + ), + ( + 18, + ["module/__init__.pyi", "module/FOO.pyi"], + ["module/__init__.pyi", "module/FOO.pyi"], + 2, + ), + ( + 19, + ["module/__init__.pyi", "module/FOO.pyi"], + ["module/__init__.pyi", "module/FOO.pyi"], + 2, + ), + # + (20, ["module1.pyi"], ["module2.pyi"], 0), + (30, ["_module.pyi"], ["module.pyi"], 1), + (40, ["umodule.pyi"], ["module.pyi"], 0), ## do not merge from u_module to module + (41, ["module.pyi"], ["umodule.pyi"], 1), ## do merge from module to umodule + (50, ["module1.pyi", "module2.pyi"], ["module1.pyi", "module2.pyi"], 2), + (60, ["module1.pyi", "module2.pyi"], ["module2.pyi", "module3.pyi"], 1), + ], +) +def test_target_source_candidates( + tmp_path, test_id, target_files, source_files, expected_matches: int +): + source_dir = tmp_path / "source" + source_dir.mkdir() + for source_name in source_files: + source_file = source_dir / source_name + source_file.parent.mkdir(parents=True, exist_ok=True) + source_file.touch() + target_dir = tmp_path / "target" + target_dir.mkdir() + for target_name in target_files: + target_file = target_dir / target_name + target_file.parent.mkdir(parents=True, exist_ok=True) + target_file.touch() + candidates = list(source_target_candidates(source_dir, target_dir)) + assert ( + len(candidates) == expected_matches + ), f"Expected {expected_matches} matches, got {len(candidates)}" + + +def test_enrich_file(tmp_path): + target_file = tmp_path / "target.pyi" + target_file.touch() + source_file = tmp_path / "source.pyi" + source_file.touch() + with pytest.raises(FileNotFoundError): + list(enrich_file(source_file, target_file)) From 25fb0730212cff9317377d2f4e2a77a12b473322 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Fri, 17 Jan 2025 00:35:04 +0100 Subject: [PATCH 52/57] stubber: Merge - avoid import for target_module and add test for overloaded method handling Signed-off-by: Jos Verlinde --- WIP.md | 154 +++++++++++------- pyproject.toml | 4 +- src/stubber/codemod/enrich.py | 37 +++-- src/stubber/codemod/merge_docstub.py | 38 +++-- src/stubber/commands/enrich_folder_cmd.py | 20 +-- src/stubber/rst/lookup.py | 20 +-- .../func_overload_add_call/before.pyi | 42 +++++ .../func_overload_add_call/doc_stub.pyi | 23 +++ .../func_overload_add_call/expected.pyi | 49 ++++++ .../import_from_self_add/before.py | 8 + .../import_from_self_add/doc_stub.py | 5 + .../import_from_self_add/expected.py | 8 + tests/codemods/codemodcollector.py | 2 +- tests/codemods/test_merge.py | 4 + 14 files changed, 296 insertions(+), 118 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_call/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi create mode 100644 tests/codemods/codemod_test_cases/import_from_self_add/before.py create mode 100644 tests/codemods/codemod_test_cases/import_from_self_add/doc_stub.py create mode 100644 tests/codemods/codemod_test_cases/import_from_self_add/expected.py diff --git a/WIP.md b/WIP.md index 3126bbe7..4ec14519 100644 --- a/WIP.md +++ b/WIP.md @@ -1,11 +1,105 @@ +## stubber docstubs + +- [ ] docstubs : should automagically enrich the docstubs +- [ ] docstubs : add _rp2 module currently not documented (_rp2 - or keep all in rp2?) +- [ ] network : should proably not add + - from .WLANWiPy import * + - from .WIZNET5K import * + +## stubber enrich + + -[x] enrich cmdline : change to source and destination + + - [x] enrich : File comments are dupllicated within the same file + - likely cause : merge same commont from multiple source + + -[x] enrich : TypeAlias are copied in multiple times ` + - likely cause : merge same typealias from multiple source files + + -[x] enrich : `_rp2.submodules` recieve too many imports that cannot be resolved + +- [x] during import - do not enhance the "u-module" stubs as this creates a tangle of incorrect imports + - there is already a list of u-modules in the stubber, so they should be simple to skip + + +- [x] improve copy imports during enrich + - [x] do not copy imports from umodules to non-umodules + - [x] do not copy `from foo import *` to module foo +- [ ] imports : copy trailing comments "# type: ignore " +- [ ] copy `FOO_BAR = const(0)` from source to dest +- [ ] copy `FOO_BAR:Final = something` from source to dest + + +## stubber merge +- [ ] Docstring is added multiple times s from multiple source files. + - likely cause : merge same docstring from multiple source files +- [ ] some decorators are added multiple times - need to check for existing decorator @final @final @final +- [ ] machine.Pin.__call__ @overload decorator ends up only a single time in merged Stub ? +- [ ] vfs.class AbstractBlockDev(ABC, _BlockDeviceProtocol): + AbstractBlockDev does not exist in the firmware-stubs , so is not merged into the merged stubs. +## micropython-Reference + +- [x] _rp2.* + [x] fix `from foo import bas as bar` + [x] remove duplicate comments in `_rp2` files. + [x] remove duplicated docstrings + [x] remove rp2.irq module ( not needed, _IRQ provided from _mpy_shed ) + + [x] for now revert to exposing just the 'rp2' module and hide the implementation details of `_rp2` + +## _mpy_shed +- [x] deque : `deque` is not a generic class. +- [ ] publish _mpy_shed to pypi ( or add to micropython-stdlib-stubs ) + > d:\mypython\micropython-stubber\repos\micropython-stubs\stubs\micropython-v1_24_1-docstubs\_mpy_shed\collections\__init__.pyi:327:35 - error: Expected no type arguments for class "deque" (reportInvalidTypeArguments) + + fix: class deque(MutableSequence[_T]): + +## rp2 / _rp2 documentation +- [x] duplicate imports in `_rp2` files. + WORAROUND - remove _rp2 from stubs +- [x] remove `rp2.irq` module ( not needed, _IRQ provided from _mpy_shed ) + +## neopixel - [ ] class NeoPixel: - indexing https://github.com/Josverl/micropython-stubs/issues/764 ERROR root:typecheck.py:171 "tests/quality_tests/check_rp2/check_neopixel.py"(10,0): "__setitem__" method not defined on type "NeoPixel" ERROR root:typecheck.py:171 "tests/quality_tests/check_rp2/check_neopixel.py"(12,10): "__getitem__" method not defined on type "NeoPixel" + +## vfs + +## stdlib + +- [x] remove the `from from stdlib.xx import *` from lookup.py +- [x] remove the `from from stdlib.xx import *` reference-stubs +- [ ] regenerate the docstubs + +- [x] fix type stubs asyncio.StreamReader + + +### io + +- [x] stdib - io +- [x] IOBase +- [x] class StringIO(IOBase): --> 143:15 - error: Argument to class must be a base class + +### time + - [ ] _TimeTuple has different formats/lengths on different platforms ( esp32 ) + - allow both 8 and 9-tuples + - add docstring to timetuple , refer to existing docpage + ``` + d:\mypython\micropython-stubber\repos\micropython-stubs\stubs\micropython-v1_24_1-esp32-ESP32_GENERIC-merged\time.pyi:43:18 - warning: Import symbol "mktime" has type "(time_tuple: _TimeTuple | struct_time, /) -> float", which is not assignable to declared type "(local_time: _TimeTuple, /) -> int" + Type "(time_tuple: _TimeTuple | struct_time, /) -> float" is not assignable to type "(local_time: _TimeTuple, /) -> int" + Parameter 1: type "_TimeTuple" is incompatible with type "_TimeTuple | struct_time" + Type "_TimeTuple" is not assignable to type "_TimeTuple | struct_time" + "Tuple[int, int, int, int, int, int, int, int]" is not assignable to "tuple[int, int, int, int, int, int, int, int, int]" + Tuple size mismatch; expected 9 but received 8 + "Tuple[int, int, int, int, int, int, int, int]" is not assignable to "struct_time" + ``` +### uasyncio - [ ] mod:socket - missing module constants ERROR root:typecheck.py:171 "tests/quality_tests/feat_micropython/check_functions.py"(5,7): "AF_INET" is not defined ERROR root:typecheck.py:171 "tests/quality_tests/feat_micropython/check_functions.py"(5,16): "SOCK_STREAM" is not defined @@ -27,63 +121,7 @@ "Task" is incompatible with protocol "Awaitable[_T_co@Awaitable]" "__await__" is not present -- [ ] # TODO: fix type stubs asyncio.StreamReader - ```python - - awritestr: Generator ## = - wait_closed: Generator ## = - drain: Generator ## = - readexactly: Generator ## = - readinto: Generator ## = - awrite: Generator ## = - readline: Generator ## = - aclose: Generator ## = - - # read: Generator ## = - async def read(self, n=-1): - """Read up to `n` bytes from the stream. - - If `n` is not provided or set to -1, - read until EOF, then return all read bytes. - If EOF was received and the internal buffer is empty, - return an empty bytes object. - - If `n` is 0, return an empty bytes object immediately. - - If `n` is positive, return at most `n` available bytes - as soon as at least 1 byte is available in the internal buffer. - If EOF is received before any byte is read, return an empty - bytes object. - - Returned value is not limited with limit, configured at stream - creation. - - If stream was paused, this function will automatically resume it if - needed. - """ - - ``` - - - [ ] stdib - io - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_io.py"(11,9): "BufferedWriter" is not a known attribute of module "io" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_json/check_json.py"(38,26): No parameter named "separators" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_files.py"(40,29): Type "str | list[dict[Unknown, Unknown]]" is not assignable to declared type "List[str]" - Type "str | list[dict[Unknown, Unknown]]" is not assignable to type "List[str]" - "str" is not assignable to "List[str]" - INFO root:typecheck.py:175 "tests/quality_tests/feat_stdlib/check_os/check_files.py"(56,24): Type of "subdir" is "List[str]" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_files.py"(57,17): Type "list[str | dict[Unknown, Unknown]]" is not assignable to declared type "List[dict[Unknown, Unknown]]" - "list[str | dict[Unknown, Unknown]]" is not assignable to "List[dict[Unknown, Unknown]]" - Type parameter "_T@list" is invariant, but "str | dict[Unknown, Unknown]" is not the same as "dict[Unknown, Unknown]" - Consider switching from "list" to "Sequence" which is covariant - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(19,12): "assert_type" mismatch: expected "str" but received "str | Unknown" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(20,12): "assert_type" mismatch: expected "str" but received "str | Unknown" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(21,12): "assert_type" mismatch: expected "str" but received "str | Unknown" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(22,12): "assert_type" mismatch: expected "str" but received "str | Unknown" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_os/check_uname.py"(23,12): "assert_type" mismatch: expected "str" but received "str | Unknown" - ERROR root:typecheck.py:171 "tests/quality_tests/feat_stdlib/check_sys/check_sys.py"(24,20): Argument of type "exc" cannot be assigned to parameter "exc" of type "BaseException" in function "print_exception" - - - - - [ ] Disable ruff warnings + + - [x] Disable ruff warnings - UP015, UP031, UP032 diff --git a/pyproject.toml b/pyproject.toml index 3946e75f..019724bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -170,6 +170,7 @@ reportUnboundVariable = "information" ReportSelfClsParameterName = "information" reportOptionalSubscript = "information" reportCallInDefaultInitializer = "error" +# reportAssignmentType = "warning" # Section 3 - reduce noise reportMissingTypeStubs = "none" reportOptionalMemberAccess = "none" # "read" is not a known member of "None" - occurs often in frozen code @@ -185,6 +186,7 @@ reportUnknownVariableType = "none" reportUntypedNamedTuple = "none" + # "executionEnvironments" = [ # { "root" = "src/stubber/boards", "extraPaths" = [ # "typings_mpy", @@ -395,7 +397,7 @@ target-version = "py39" # Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or # McCabe complexity (`C901`) by default. select = ["E4", "E7", "E9", "F", "U"] -ignore = ["E402", "F821", "F403"] +ignore = ["E402", "F821", "F403", "UP015", "U031", "U032", "U035"] # Allow fix for all enabled rules (when `--fix`) is provided. fixable = ["ALL"] unfixable = [] diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 9785fd57..8b3c6226 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -142,7 +142,7 @@ def enrich_file( target_path: Path, diff: bool = False, write_back: bool = False, - package_name="", + # package_name="", # not used params_only: bool = False, ) -> Generator[str, None, None]: """ @@ -160,14 +160,18 @@ def enrich_file( Returns: - None or a string containing the diff between the original and the enriched source file """ - config: Dict[str, Any] = _default_config() - context = CodemodContext() - package_name = package_name or package_from_path(target_path, source_path) if not source_path.exists() or not target_path.exists(): raise FileNotFoundError("Source or target file not found") if not source_path.is_file() or not target_path.is_file(): raise FileNotFoundError("Source or target is not a file") + log.info(f"Enriching file: {target_path}") + config: Dict[str, Any] = _default_config() + # fass the filename and module name to the codemod + context = CodemodContext( + filename=target_path.as_posix(), + full_module_name=package_from_path(target_path), + ) # apply a single codemod to the target file success = False # read target file @@ -196,8 +200,6 @@ def enrich_file( if diff: yield diff_code(old_code, current_code, 5, filename=target_path.name) - log.info(f"Enriched {target_path}") - def enrich_folder( source_folder: Path, @@ -206,7 +208,7 @@ def enrich_folder( write_back: bool = False, require_docstub: bool = False, params_only: bool = False, - package_name: str = "", + # package_name: str = "", ) -> int: """\ Enrich a folder with containing MCU stubs using the doc-stubs in another folder. @@ -235,17 +237,20 @@ def enrich_folder( continue try: - if diff := enrich_file( - mm.source, - mm.target, - diff=True, - write_back=write_back, - package_name=mm.target_pkg, - params_only=params_only, + if diff := list( + enrich_file( + mm.source, + mm.target, + diff=True, + write_back=write_back, + # package_name=mm.target_pkg, + params_only=params_only, + ) ): - count += 1 + count += len(diff) if show_diff: - print(diff) + for d in diff: + print(d) except FileNotFoundError as e: # no docstub to enrich with if require_docstub: diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index ee430bd9..0d50fe72 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -108,11 +108,11 @@ def __init__( typing_collector = StubTypingCollector() import_collector = GatherImportsVisitor(context) typevar_collector = GatherTypeVarsVisitor(context) - # visit the doc-stub file with all collectors + # visit the source / doc-stub file with all collectors stub_tree.visit(typing_collector) self.annotations = typing_collector.annotations self.comments = typing_collector.comments - # Store the imports that were added to the stub file + # Store the imports that were added to the source / doc-stub file stub_tree.visit(import_collector) self.stub_imports = import_collector.symbol_mapping self.all_imports = import_collector.all_imports @@ -136,30 +136,40 @@ def leave_Module(self, original_node: cst.Module, updated_node: cst.Module) -> c :return: The updated module node. """ # -------------------------------------------------------------------- - # add any needed imports from the doc-stub + # add any needed imports from the source doc-stub for k in self.stub_imports.keys(): - imp = self.stub_imports[k] - log.trace(f"add: import {k} = {imp}") + import_item = self.stub_imports[k] + if import_item.module_name == self.context.full_module_name: + # this is an import from the same module we should NOT add it + continue + if import_item.module_name.split(".")[ + 0 + ] == self.context.full_module_name and not self.context.filename.endswith( + "__init__.pyi" + ): + # this is an import from a module child module we should NOT add it + continue + log.trace(f"add: import {k} = {import_item}") AddImportsVisitor.add_needed_import( self.context, - module=imp.module_name, - obj=imp.obj_name, - asname=imp.alias, - relative=imp.relative, + module=import_item.module_name, + obj=import_item.obj_name, + asname=import_item.alias, + relative=import_item.relative, ) # add `from module import *` from the doc-stub # FIXME: this cases a problem if there is also a 'from module import foobar' in the firmware stub # also all comments get removed from the import if self.all_imports: - for imp in self.all_imports: - if isinstance(imp, cst.ImportFrom): + for import_item in self.all_imports: + if isinstance(import_item, cst.ImportFrom): # perhaps this is an import from * - if isinstance(imp.names, cst.ImportStar): + if isinstance(import_item.names, cst.ImportStar): # bit of a hack to get the full module name empty_mod = cst.parse_module("") - full_module_name = empty_mod.code_for_node(imp.module) # type: ignore - log.debug(f"add: from {full_module_name} import *") + full_module_name = empty_mod.code_for_node(import_item.module) # type: ignore + log.trace(f"add: from {full_module_name} import *") AddImportsVisitor.add_needed_import( self.context, module=full_module_name, diff --git a/src/stubber/commands/enrich_folder_cmd.py b/src/stubber/commands/enrich_folder_cmd.py index 30923f81..95cba3c5 100644 --- a/src/stubber/commands/enrich_folder_cmd.py +++ b/src/stubber/commands/enrich_folder_cmd.py @@ -52,21 +52,21 @@ show_default=True, is_flag=True, ) -@click.option( - "--package-name", - "-p", - "package_name", - default="", - help="Package name to be enriched (Optional)", - show_default=True, -) +# @click.option( +# "--package-name", +# "-p", +# "package_name", +# default="", +# help="Package name to be enriched (Optional)", +# show_default=True, +# ) def cli_enrich_folder( dest_folder: Union[str, Path], source_folder: Union[str, Path], diff: bool = False, dry_run: bool = False, params_only: bool = True, - package_name: str = "", + # package_name: str = "", ): """ Enrich the stubs in stub_folder with the docstubs in docstubs_folder. @@ -79,6 +79,6 @@ def cli_enrich_folder( show_diff=diff, write_back=write_back, require_docstub=False, - package_name=package_name, + # package_name=package_name, params_only=params_only, ) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index fc0314df..016b0cf1 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -327,19 +327,14 @@ class Fix: "network": ["from typing import Protocol"], # for AbstractNIC "neopixel": [ "from _mpy_shed import _NeoPixelBase", - # "from typing_extensions import TypeAlias", - # "_Color: TypeAlias = tuple[int, int, int] | tuple[int, int, int, int]", ], # for AbstractNIC "os": [ - "from stdlib.os import * # type: ignore", # integrate STDLIB "from _mpy_shed import uname_result", ], "pyb": ANY_BUF + [ "from .UART import UART", "from _mpy_shed import _OldAbstractBlockDev, _OldAbstractReadOnlyBlockDev, HID_Tuple", - # "_OldAbstractBlockDev: TypeAlias = Any", - # "_OldAbstractReadOnlyBlockDev: TypeAlias = Any", ], "pyb.ADC": ANY_BUF + ["from .Pin import Pin", "from .Timer import Timer"], "pyb.CAN": ANY_BUF, @@ -359,30 +354,19 @@ class Fix: "from abc import ABC, abstractmethod", "from .Pin import Pin", ], # uses Pin - "rp2": [ - # Simplified import classess from rp2 (rather than from _rp2) - # "from rp2.DMA import DMA", - # "from rp2.DMA import DMA", - # "from rp2.Flash import Flash", - # "from rp2.StateMachine import StateMachine", - # "from rp2.PIO import PIO", - # "from rp2.PIOASMEmit import PIOASMEmit", - ], # "_rp2.DMA": ["from _mpy_shed import _IRQ"], "_rp2.PIO": ["from _mpy_shed import _IRQ"], "rp2.PIO": ["from _mpy_shed import _IRQ"], "rp2.DMA": ["from _mpy_shed import _IRQ"], "socket": [ - "from stdlib.socket import * # type: ignore", "from typing_extensions import TypeAlias", "from _mpy_shed import AnyReadableBuf, AnyWritableBuf", - ], # integrate STDLIB + ], "ssl": [ "from typing_extensions import TypeAlias", "from _mpy_shed import StrOrBytesPath", - "from stdlib.ssl import * # type: ignore", "SSLSocket : TypeAlias = Incomplete", - ], # integrate STDLIB + ], "struct": ANY_BUF, "time": [ "from typing_extensions import TypeAlias, TypeVar", diff --git a/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi b/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi new file mode 100644 index 00000000..3d2b1b15 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi @@ -0,0 +1,42 @@ +# fmt: off +""" +Overloaded method +""" +from typing import Any, Optional + +from _typeshed import Incomplete + +class Pin: + ALT_SPI: int = 1 + IN: int = 0 + ALT_USB: int = 9 + ALT_UART: int = 2 + IRQ_FALLING: int = 4 + OUT: int = 1 + OPEN_DRAIN: int = 2 + IRQ_RISING: int = 8 + PULL_DOWN: int = 2 + ALT_SIO: int = 5 + ALT_GPCK: int = 8 + ALT: int = 3 + PULL_UP: int = 1 + ALT_I2C: int = 3 + ALT_PWM: int = 4 + ALT_PIO1: int = 7 + ALT_PIO0: int = 6 + def low(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def toggle(self, *args, **kwargs) -> Incomplete: ... + def off(self, *args, **kwargs) -> Incomplete: ... + def on(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def value(self, *args, **kwargs) -> Incomplete: ... + def high(self, *args, **kwargs) -> Incomplete: ... + + def __call__(self, x: Optional[Any] = None) -> Incomplete: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_call/doc_stub.pyi b/tests/codemods/codemod_test_cases/func_overload_add_call/doc_stub.pyi new file mode 100644 index 00000000..6428f7d2 --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_call/doc_stub.pyi @@ -0,0 +1,23 @@ +# fmt: off +""" +Overloaded method +""" + +from typing import Any, overload + +class Pin: + @overload + def __call__(self) -> int: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + + @overload + def __call__(self, x: Any, /) -> None: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi new file mode 100644 index 00000000..a44af3fb --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi @@ -0,0 +1,49 @@ +# fmt: off +""" +Overloaded method +""" +from typing import overload, Any, Optional + +from _typeshed import Incomplete + +class Pin: + ALT_SPI: int = 1 + IN: int = 0 + ALT_USB: int = 9 + ALT_UART: int = 2 + IRQ_FALLING: int = 4 + OUT: int = 1 + OPEN_DRAIN: int = 2 + IRQ_RISING: int = 8 + PULL_DOWN: int = 2 + ALT_SIO: int = 5 + ALT_GPCK: int = 8 + ALT: int = 3 + PULL_UP: int = 1 + ALT_I2C: int = 3 + ALT_PWM: int = 4 + ALT_PIO1: int = 7 + ALT_PIO0: int = 6 + def low(self, *args, **kwargs) -> Incomplete: ... + def irq(self, *args, **kwargs) -> Incomplete: ... + def toggle(self, *args, **kwargs) -> Incomplete: ... + def off(self, *args, **kwargs) -> Incomplete: ... + def on(self, *args, **kwargs) -> Incomplete: ... + def init(self, *args, **kwargs) -> Incomplete: ... + def value(self, *args, **kwargs) -> Incomplete: ... + def high(self, *args, **kwargs) -> Incomplete: ... + @overload + def __call__(self) -> int: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + + @overload + def __call__(self, x: Any, /) -> None: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ diff --git a/tests/codemods/codemod_test_cases/import_from_self_add/before.py b/tests/codemods/codemod_test_cases/import_from_self_add/before.py new file mode 100644 index 00000000..a95e8ab7 --- /dev/null +++ b/tests/codemods/codemod_test_cases/import_from_self_add/before.py @@ -0,0 +1,8 @@ +# fmt: off +""" +add from self import y +""" + + +def foo(): + ... diff --git a/tests/codemods/codemod_test_cases/import_from_self_add/doc_stub.py b/tests/codemods/codemod_test_cases/import_from_self_add/doc_stub.py new file mode 100644 index 00000000..9b91dde6 --- /dev/null +++ b/tests/codemods/codemod_test_cases/import_from_self_add/doc_stub.py @@ -0,0 +1,5 @@ +""" +add from self import y +""" + +from target_module import foo diff --git a/tests/codemods/codemod_test_cases/import_from_self_add/expected.py b/tests/codemods/codemod_test_cases/import_from_self_add/expected.py new file mode 100644 index 00000000..a95e8ab7 --- /dev/null +++ b/tests/codemods/codemod_test_cases/import_from_self_add/expected.py @@ -0,0 +1,8 @@ +# fmt: off +""" +add from self import y +""" + + +def foo(): + ... diff --git a/tests/codemods/codemodcollector.py b/tests/codemods/codemodcollector.py index 3679cd6f..8bc89575 100644 --- a/tests/codemods/codemodcollector.py +++ b/tests/codemods/codemodcollector.py @@ -10,7 +10,7 @@ class TestCase(NamedTuple): before: str # The source code before the transformation. expected: str # The source code after the transformation. doc_stub: str # The stub to apply - stub_file: Path # The path to stub file to apply + stub_file: Path # The path to source docstub file to apply output: Path | None = None # where to save the output for testing the tests path: Path | None = None # where are the tests diff --git a/tests/codemods/test_merge.py b/tests/codemods/test_merge.py index bddbb087..efbe90c4 100644 --- a/tests/codemods/test_merge.py +++ b/tests/codemods/test_merge.py @@ -124,11 +124,15 @@ def test_merge_from_docstub(self, test_case: MyTestCase) -> None: if "_xfail" in str(test_case.path): pytest.xfail("xfail") + # Create a test CodemodContext + context = CodemodContext(filename=str(test_case.path), full_module_name="target_module") + self.assertCodemod( test_case.before, test_case.expected, docstub_file=test_case.stub_file, save_output=test_case.output, + context_override=context, # params_only =False, ) From 84d64331a0e64ecd2537bb2576d223ae5fe66ed6 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 20 Jan 2025 21:20:08 +0100 Subject: [PATCH 53/57] stubber: Enhance merge candidate logic and add tests for candidate selection Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 66 +++++++++++++++- src/stubber/codemod/merge_docstub.py | 4 + src/stubber/rst/lookup.py | 5 +- .../func_overload_add_call/before.pyi | 9 +-- .../func_overload_add_call/expected.pyi | 3 + tests/codemods/enrich_test.py | 7 +- tests/merge/candidates_test.py | 20 ----- tests/merge/test_candidates.py | 76 +++++++++++++++++++ 8 files changed, 151 insertions(+), 39 deletions(-) delete mode 100644 tests/merge/candidates_test.py create mode 100644 tests/merge/test_candidates.py diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 8b3c6226..99616273 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -25,6 +25,8 @@ ######################################################################################### @dataclass class MergeMatch: + """A match between a target and source file to merge docstrings and typehints""" + target: Path source: Path target_pkg: str @@ -125,9 +127,16 @@ def source_target_candidates(source: Path, target: Path) -> Generator[MergeMatch mm = None for t in targets: # find the best match + if t.stem.startswith("u") and t.stem[1:] in U_MODULES: + # skip enriching umodule.pyi files + log.debug(f"Skip enriching {t.name}, as it is an u-module") + continue t_pkg = package_from_path(t) s_pkg = package_from_path(s) is_match, match_len = upackage_equal(s_pkg, t_pkg) + if "_mpy_shed" in str(s) or "_mpy_shed" in str(t): + log.debug(f"Skip _mpy_shed file {s}") + continue if is_match and match_len > best_match_len: best_match_len = match_len mm = MergeMatch(t, s, t_pkg, s_pkg, is_match) @@ -201,6 +210,59 @@ def enrich_file( yield diff_code(old_code, current_code, 5, filename=target_path.name) +def merge_candidates( + source_folder: Path, + target_folder: Path, +) -> List[MergeMatch]: + """ + Generate a list of merge candidates for the source and target folders. + Each target is matched with exactly one source file. + """ + candidates = source_target_candidates(source_folder, target_folder) + + # Create a list of candidate matches for the same target + target_dict = {} + for candidate in candidates: + if candidate.target not in target_dict: + target_dict[candidate.target] = [] + target_dict[candidate.target].append(candidate) + + # first get targets with only one candidate + candidates = [v[0] for k, v in target_dict.items() if len(v) == 1] + + # then get the best matching from the d + multiple_candidates = {k: v for k, v in target_dict.items() if len(v) > 1} + for target in multiple_candidates.keys(): + + # if simple module --> complex module : select the best matching or first source + perfect = next( + ( + match + for match in multiple_candidates[target] + if match.target_pkg == match.source_pkg + ), + None, + ) + + if perfect: + candidates.append(perfect) + else: + close_enough = [ + match + for match in multiple_candidates[target] + if match.source_pkg.startswith(f"{match.target_pkg}.") + ] + if close_enough: + candidates.extend(close_enough) + # else: + # # take the first one + # candidates.append(multiple_candidates[target][0]) + + # sort by target_path , to show diffs + candidates = sorted(candidates, key=lambda m: m.target) + return candidates + + def enrich_folder( source_folder: Path, target_folder: Path, @@ -231,10 +293,6 @@ def enrich_folder( # for target in target_files: for mm in candidates: - if mm.target.stem.startswith("u") and mm.target.stem[1:] in U_MODULES: - # skip enriching umodule.pyi files - log.debug(f"Skip enriching {mm.target.name}, as it is an u-module") - continue try: if diff := list( diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 0d50fe72..08f4287c 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -253,6 +253,10 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo # Use the new overload - but with the existing docstring overload = update_def_docstr(overload, docstring_node) updated_body.insert(i + 1, overload) + else: + # add to the end of the class + log.trace(f"Add @overload for {overload.name.value} at the end of the class") + updated_body.append(overload) if isinstance(updated_node, cst.Module): updated_node = updated_node.with_changes(body=tuple(updated_body)) diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 016b0cf1..970f0e89 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -293,7 +293,7 @@ class Fix: ], "io": ANY_BUF + [ - "from _mpy_shed import IOBase", + "from _mpy_shed import IOBase_mp", ], "lcd160cr": ANY_BUF + ["from pyb import SPI"], # uses SPI # "machine": ["from network import AbstractNIC"], # NIC is an abstract class, although not defined or used as such @@ -652,8 +652,9 @@ class Fix: "TextIOWrapper": "IO", # "TextIOBase, TextIO", # based on Stdlib "FileIO": "IO", # "RawIOBase, BinaryIO", # based on Stdlib "StringIO": "IO", # "BufferedIOBase, BinaryIO", # based on Stdlib + "IOBase": "IOBase_mp", # "BufferedIOBase, BinaryIO", # based on Stdlib "BytesIO": "IO", # "BufferedIOBase, BinaryIO", # based on Stdlib - "BufferedWriter": "IOBase", # DOC_ME: not in documentation # "BufferedWriter": "BufferedIOBase", # based on Stdlib + "BufferedWriter": "IOBase_mp", # DOC_ME: not in documentation # "BufferedWriter": "BufferedIOBase", # based on Stdlib # uzlib # "DecompIO": "IO", # https://docs.python.org/3/library/typing.html#other-concrete-types # ------------------------------------------------------------------------------------- diff --git a/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi b/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi index 3d2b1b15..c7b94341 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_call/before.pyi @@ -33,10 +33,5 @@ class Pin: def value(self, *args, **kwargs) -> Incomplete: ... def high(self, *args, **kwargs) -> Incomplete: ... - def __call__(self, x: Optional[Any] = None) -> Incomplete: - """ - Pin objects are callable. The call method provides a (fast) shortcut to set - and get the value of the pin. It is equivalent to Pin.value([x]). - See :meth:`Pin.value` for more details. - """ - ... + def foo() -> None: ... + # no def __call__ has been defined in the original file diff --git a/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi index a44af3fb..e18a7bf6 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_call/expected.pyi @@ -32,6 +32,8 @@ class Pin: def init(self, *args, **kwargs) -> Incomplete: ... def value(self, *args, **kwargs) -> Incomplete: ... def high(self, *args, **kwargs) -> Incomplete: ... + + def foo() -> None: ... @overload def __call__(self) -> int: """ @@ -47,3 +49,4 @@ class Pin: and get the value of the pin. It is equivalent to Pin.value([x]). See :meth:`Pin.value` for more details. """ + # no def __call__ has been defined in the original file diff --git a/tests/codemods/enrich_test.py b/tests/codemods/enrich_test.py index c6dd4c17..eefcd9e1 100644 --- a/tests/codemods/enrich_test.py +++ b/tests/codemods/enrich_test.py @@ -16,12 +16,7 @@ Path("./tests/data/stub_merge/micropython-v1_18-docstubs/esp32.pyi"), Path("./tests/data/stub_merge/micropython-v1_18-esp32/esp32.pyi"), True, - ), - ( - Path("./tests/data/stub_merge/micropython-v1_18-esp32/builtins.pyi"), - Path("./tests/data/stub_merge/micropython-v1_18-esp32/builtins.pyi"), - False, - ), + ) ], ) def test_enrich_file_with_stub(source_file: Path, target_file: Path, expected: bool): diff --git a/tests/merge/candidates_test.py b/tests/merge/candidates_test.py deleted file mode 100644 index 9aff61f4..00000000 --- a/tests/merge/candidates_test.py +++ /dev/null @@ -1,20 +0,0 @@ -import pytest -from typing import List, Union -from stubber.publish.candidates import board_candidates - - -pytestmark = [pytest.mark.stubber] - - -@pytest.mark.parametrize( - "family, versions", - [ - ("micropython", "v1.22.0"), - ("micropython", "preview"), - # Add more test cases here - ], -) -def test_board_candidates(family: str, versions: Union[str, List[str]]): - - candidates = list(board_candidates(family=family, versions=versions)) - assert len(candidates) > 0 diff --git a/tests/merge/test_candidates.py b/tests/merge/test_candidates.py new file mode 100644 index 00000000..04226f19 --- /dev/null +++ b/tests/merge/test_candidates.py @@ -0,0 +1,76 @@ +from pathlib import Path +from typing import List, Union + +import pytest +from stubber.codemod.enrich import merge_candidates +from stubber.publish.candidates import board_candidates + +pytestmark = [pytest.mark.stubber] + + +@pytest.mark.parametrize( + "family, versions", + [ + ("micropython", "v1.22.0"), + ("micropython", "preview"), + # Add more test cases here + ], +) +def test_board_candidates(family: str, versions: Union[str, List[str]]): + + candidates = list(board_candidates(family=family, versions=versions)) + assert len(candidates) > 0 + + +@pytest.mark.parametrize( + "id, source, target, count", + [ + ( + 10, + "tests/data/stub_merge/micropython-v1_24_1-docstubs", + "tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO", + 55, + ), + ( + 11, + "tests/data/stub_merge/micropython-v1_24_1-docstubs", + "tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/machine.pyi", + 18, + ), + ( + 12, + "tests/data/stub_merge/micropython-v1_24_1-docstubs", + "tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/umachine.pyi", + 0, + ), + ( + 13, + "tests/data/stub_merge/micropython-v1_24_1-docstubs", + "tests/data/stub_merge/micropython-v1_24_1-rp2-RPI_PICO/micropython.pyi", + 1, + ), + ( + 23, + "repos/micropython-stubs/micropython-reference", + "tests/data/stub_merge/micropython-v1_24_1-docstubs", + 94, + ), + ( + 24, + "repos/micropython-stubs/micropython-reference", + "tests/data/stub_merge/micropython-v1_24_1-docstubs/machine", + 17, + ), + ( + 25, + "repos/micropython-stubs/micropython-reference", + "tests/data/stub_merge/micropython-v1_24_1-docstubs/machine/__init__.pyi", + 1, + ), + # Add more test cases here + ], +) +def test_merge_candidates(id, source, target, count): + + result = merge_candidates(Path(source), Path(target)) + assert len(result) == count From a1ca3bd379f609b71ee725d5d008ff7792fe7e97 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Mon, 20 Jan 2025 22:04:00 +0100 Subject: [PATCH 54/57] stubber: Add @overload merging to undefined targets. Signed-off-by: Jos Verlinde --- WIP.md | 22 +++++++++---- src/stubber/codemod/merge_docstub.py | 33 +++++++++++++++++-- .../func_overload_add_no_class/before.pyi | 10 ++++++ .../func_overload_add_no_class/doc_stub.pyi | 23 +++++++++++++ .../func_overload_add_no_class/expected.pyi | 27 +++++++++++++++ .../func_overload_add_no_match/expected.pyi | 18 ++++++++++ .../func_overload_add_no_match/output.pyi | 18 ++++++++++ .../meth_overload_add_no_match/expected.pyi | 16 +++++++++ .../meth_overload_add_no_match/output.pyi | 16 +++++++++ 9 files changed, 174 insertions(+), 9 deletions(-) create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_class/before.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_class/doc_stub.pyi create mode 100644 tests/codemods/codemod_test_cases/func_overload_add_no_class/expected.pyi diff --git a/WIP.md b/WIP.md index 4ec14519..27c62858 100644 --- a/WIP.md +++ b/WIP.md @@ -31,14 +31,19 @@ - [ ] copy `FOO_BAR = const(0)` from source to dest - [ ] copy `FOO_BAR:Final = something` from source to dest - +## merge targets +- [x] rewrite logic for determining source --> target selection + - [x] reduce the number of candidates + - [x] avoid mergng fro umodule to module + - [x] avoid merging from __mpy_shed + - [x] avoid merging from pyb.__init to pyb.Accell ## stubber merge - [ ] Docstring is added multiple times s from multiple source files. - likely cause : merge same docstring from multiple source files - [ ] some decorators are added multiple times - need to check for existing decorator @final @final @final -- [ ] machine.Pin.__call__ @overload decorator ends up only a single time in merged Stub ? -- [ ] vfs.class AbstractBlockDev(ABC, _BlockDeviceProtocol): - AbstractBlockDev does not exist in the firmware-stubs , so is not merged into the merged stubs. +- [x] machine.Pin.__call__ @overload decorator ends up only a single time in merged Stub ? + + ## micropython-Reference - [x] _rp2.* @@ -56,13 +61,16 @@ fix: class deque(MutableSequence[_T]): + - [ ] `__call__` needs addational overloads in machine and pyb modules + ![Inconsistent __call__ definitions](image.png) + ## rp2 / _rp2 documentation - [x] duplicate imports in `_rp2` files. WORAROUND - remove _rp2 from stubs - [x] remove `rp2.irq` module ( not needed, _IRQ provided from _mpy_shed ) ## neopixel - - [ ] class NeoPixel: - indexing + - [x] class NeoPixel: - indexing https://github.com/Josverl/micropython-stubs/issues/764 ERROR root:typecheck.py:171 "tests/quality_tests/check_rp2/check_neopixel.py"(10,0): "__setitem__" method not defined on type "NeoPixel" @@ -70,6 +78,8 @@ ## vfs +- [ ] vfs.class AbstractBlockDev(ABC, _BlockDeviceProtocol): + AbstractBlockDev does not exist in the firmware-stubs , so is not merged into the merged stubs. ## stdlib @@ -83,7 +93,7 @@ ### io - [x] stdib - io -- [x] IOBase +- [x] IOBase changed to IOBase_mp - [x] class StringIO(IOBase): --> 143:15 - error: Argument to class must be a base class ### time diff --git a/src/stubber/codemod/merge_docstub.py b/src/stubber/codemod/merge_docstub.py index 08f4287c..b93e426b 100644 --- a/src/stubber/codemod/merge_docstub.py +++ b/src/stubber/codemod/merge_docstub.py @@ -236,13 +236,16 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo if missing_overloads: if isinstance(updated_node, cst.Module): + module_level = True updated_body = list(updated_node.body) # type: ignore elif isinstance(updated_node, cst.ClassDef): + module_level = False updated_body = list(updated_node.body.body) # type: ignore else: raise ValueError(f"Unsupported node type: {updated_node}") # insert each overload just after a function with the same name + new_classes = [] for overload, key in missing_overloads: matched = False matched, i = self.locate_function_by_name(overload, updated_body) @@ -254,9 +257,33 @@ def add_missed_overloads(self, updated_node: Mod_Class_T, stack_id: tuple) -> Mo overload = update_def_docstr(overload, docstring_node) updated_body.insert(i + 1, overload) else: - # add to the end of the class - log.trace(f"Add @overload for {overload.name.value} at the end of the class") - updated_body.append(overload) + # add to the end of the module or class + if module_level and len(key) > 1: + # this is a class level overload, for which no class was found + class_name = key[0] + if class_name not in new_classes: + new_classes.append(class_name) + # create a class for it, and then add all the overload methods to that class + log.trace( + f"Add New class @overload for {overload.name.value} at the end of the module" + ) + # create a list of all overloads for this class + class_overloads = [ + overload for overload, k in missing_overloads if k[0] == class_name + ] + class_def = cst.ClassDef( + name=cst.Name(value=class_name), + body=cst.IndentedBlock(body=class_overloads), + ) + updated_body.append(class_def) + else: + # already processed this class method + pass + else: + log.trace( + f"Add @overload for {overload.name.value} at the end of the class" + ) + updated_body.append(overload) if isinstance(updated_node, cst.Module): updated_node = updated_node.with_changes(body=tuple(updated_body)) diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_class/before.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_class/before.pyi new file mode 100644 index 00000000..083d015a --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_class/before.pyi @@ -0,0 +1,10 @@ +# fmt: off +""" +Overloaded method +""" + +class Foo: + + def foo() -> None: ... + +# no calss Bar is defined in the original file diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_class/doc_stub.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_class/doc_stub.pyi new file mode 100644 index 00000000..ac163c5b --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_class/doc_stub.pyi @@ -0,0 +1,23 @@ +# fmt: off +""" +Overloaded method +""" + +from typing import Any, overload + +class Bar: + @overload + def __call__(self) -> int: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + + @overload + def __call__(self, x: Any, /) -> None: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_class/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_class/expected.pyi new file mode 100644 index 00000000..99e46d3b --- /dev/null +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_class/expected.pyi @@ -0,0 +1,27 @@ +# fmt: off +""" +Overloaded method +""" +from typing import Any, overload + +class Foo: + + def foo() -> None: ... +class Bar: + @overload + def __call__(self) -> int: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + + @overload + def __call__(self, x: Any, /) -> None: + """ + Pin objects are callable. The call method provides a (fast) shortcut to set + and get the value of the pin. It is equivalent to Pin.value([x]). + See :meth:`Pin.value` for more details. + """ + +# no calss Bar is defined in the original file diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi index a6c03676..5c1c6679 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_match/expected.pyi @@ -5,3 +5,21 @@ Overloaded functions from typing import overload def bar(): ... + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi b/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi index a6c03676..5c1c6679 100644 --- a/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi +++ b/tests/codemods/codemod_test_cases/func_overload_add_no_match/output.pyi @@ -5,3 +5,21 @@ Overloaded functions from typing import overload def bar(): ... + + +@overload +def foo(value: int) -> None: + """ + Set foo value + First overload + """ + ... + + +@overload +def foo(value: None) -> str: + """ + Get foo value + Second overload + """ + ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi index 1b54dec7..cd1d37fb 100644 --- a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi +++ b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/expected.pyi @@ -7,6 +7,22 @@ from typing import overload class Parrot: def talk(): ... + @overload + def speak(number: int): + """ + Speak a number + First overload + """ + ... + + @overload + def speak(words: str): + """ + Speak a word + Second overload + """ + ... + class Dog: def speak(): ... diff --git a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi index 1b54dec7..cd1d37fb 100644 --- a/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi +++ b/tests/codemods/codemod_test_cases/meth_overload_add_no_match/output.pyi @@ -7,6 +7,22 @@ from typing import overload class Parrot: def talk(): ... + @overload + def speak(number: int): + """ + Speak a number + First overload + """ + ... + + @overload + def speak(words: str): + """ + Speak a word + Second overload + """ + ... + class Dog: def speak(): ... From b0719cf6f613e441e897a525c87dcb6270401664 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Tue, 21 Jan 2025 00:00:28 +0100 Subject: [PATCH 55/57] stubber: Add 'machine' module to U_MODULES and enhance docstub enrichment logic Signed-off-by: Jos Verlinde --- WIP.md | 2 +- src/stubber/codemod/enrich.py | 16 ++ src/stubber/rst/lookup.py | 1 + verify stub build chain.ipynb | 450 ++++++++++++++++++++++++++++++++++ 4 files changed, 468 insertions(+), 1 deletion(-) create mode 100644 verify stub build chain.ipynb diff --git a/WIP.md b/WIP.md index 27c62858..305dc2e4 100644 --- a/WIP.md +++ b/WIP.md @@ -2,7 +2,7 @@ ## stubber docstubs - [ ] docstubs : should automagically enrich the docstubs -- [ ] docstubs : add _rp2 module currently not documented (_rp2 - or keep all in rp2?) + - [ ] network : should proably not add - from .WLANWiPy import * diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index 99616273..ef3a45cf 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -3,6 +3,7 @@ Both (.py or .pyi) files are supported. """ +import shutil from collections.abc import Generator from dataclasses import dataclass from functools import lru_cache @@ -323,4 +324,19 @@ def enrich_folder( run_black(target_folder) # DO NOT run Autoflake as this removes some relevant (but unused) imports too early + CP_REFERENCE_MODULES = ["rp2/PIOASMEmit.pyi", "asyncio"] + if params_only: + log.info("Adding additional type modules to the docstubs") + for addition in CP_REFERENCE_MODULES: + src = source_folder / addition + if src.exists(): + if src.is_dir(): + target = target_folder / addition + log.info(f" - add {target}") + shutil.copytree(src, target, dirs_exist_ok=True) + else: + target = target_folder / addition + log.info(f" - add {target}") + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(src, target) return count diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 970f0e89..4a8a1fca 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -57,6 +57,7 @@ class Fix: "binascii", "io", "json", + "machine", "os", "select", "ssl", diff --git a/verify stub build chain.ipynb b/verify stub build chain.ipynb new file mode 100644 index 00000000..05cb5447 --- /dev/null +++ b/verify stub build chain.ipynb @@ -0,0 +1,450 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# !stubber switch stable" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22:31:50 | ℹ️ micropython-stubber 1.24.0\n", + "22:31:51 | ℹ️ Get docstubs for MicroPython v1.24.1\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\array\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\asyncio\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\binascii\\__init__.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\bluetooth\\__init__.p\n", + "yi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\btree\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\cmath\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\collections\\__init__\n", + ".pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\cryptolib\\__init__.p\n", + "yi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\deflate\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\errno\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\esp\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\esp32\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\espnow\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\framebuf\\__init__.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\gc\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\gzip\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\hashlib\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\heapq\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\io\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\json\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\lcd160cr\\__init__.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\ADC.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\ADCBlock.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\ADCWiPy.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\I2C.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\I2S.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\Pin.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\PWM.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\RTC.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\SD.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\SDCard.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\Signal.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\SPI.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\Timer.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\TimerWiPy.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\UART.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\USBDevice.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\machine\\WDT.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\math\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\micropython\\__init__\n", + ".pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\neopixel\\__init__.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\network\\LAN.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\network\\PPP.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\network\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\network\\WIZNET5K.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\network\\WLAN.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\network\\WLANWiPy.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\openamp\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\os\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\platform\\__init__.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\Accel.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\ADC.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\CAN.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\DAC.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\ExtInt.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\Flash.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\I2C.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\LCD.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\LED.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\Pin.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\RTC.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\Servo.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\SPI.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\Switch.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\Timer.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\UART.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\USB_HID.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\pyb\\USB_VCP.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\random\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\rp2\\DMA.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\rp2\\Flash.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\rp2\\PIO.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\rp2\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\rp2\\StateMachine.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\select\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\socket\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\ssl\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\stm\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\struct\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\sys\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\time\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\uctypes\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\vfs\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\wipy\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\wm8960\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\zephyr\\DiskAccess.py\n", + "i\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\zephyr\\FlashArea.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\zephyr\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\zephyr\\zsensor.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\zlib\\__init__.pyi\n", + "22:31:51 | ℹ️ - Writing to: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\\_thread\\__init__.pyi\n", + "22:31:51 | ℹ️ ::group:: start post processing of retrieved stubs\n", + "22:31:53 | ℹ️ Running autoflake on: \n", + "repos\\micropython-stubs\\stubs\\micropython-v1_24_1-docstubs\n", + "22:31:54 | ℹ️ ::group:: Done\n" + ] + } + ], + "source": [ + "! cd d:\\mypython\\micropython-stubber\n", + "!stubber docstubs \n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "from pathlib import Path\n", + "\n", + "docstubs = Path(\"repos/micropython-stubs/stubs/micropython-v1_24_1-docstubs\")\n", + "reference = Path(\"repos/micropython-stubs/micropython-reference\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Enrich docstubs\n", + "\n", + "!stubber -VV enrich --params-only --source {reference} --dest {docstubs} " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def cp_stubmod(module: str, target: Path | None = None) -> None:\n", + " target = target or docstubs\n", + " src = reference / module\n", + " dst = target / module\n", + " return shutil.copytree(src, dst, dirs_exist_ok=True)\n", + "\n", + "\n", + "def cp_stubfile(module: str, target: Path | None = None) -> None:\n", + " target = target or docstubs\n", + " if target.is_dir():\n", + " target.mkdir(parents=True, exist_ok=True)\n", + " src = reference / module\n", + " dst = target / module\n", + " return shutil.copy2(src, dst)\n", + "\n", + "\n", + "# TODO: Fix rp2 / _rp2\n", + "# print(cp_stubmod(\"rp2\"))\n", + "print(cp_stubfile(\"rp2/PIOASMEmit.pyi\", docstubs))\n", + "print(cp_stubmod(\"_mpy_shed\"))\n", + "print(cp_stubmod(\"asyncio\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "# run autoflake on all files - one by one to get the __init__.pyi files\n", + "for f in docstubs.rglob(\"*.pyi\"):\n", + " ! autoflake {f} --in --imports typing_extensions,_mpy_shed,_typeshed\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "! isort {docstubs}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pyright {docstubs}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 13 errors, 18 warnings, 2 informations \n", + "- 9 errors, 18 warnings, 2 informations \n", + "- 11 errors, 18 warnings, 2 informations \n", + "- 8 errors, 18 warnings, 2 informations \n", + "- 8 errors, 17 warnings, 2 informations \n", + "- 18 errors, 15 warnings, 2 informations :-( \n", + "- 12 errors, 14 warnings, 2 informations \n", + "- 8 errors, 14 warnings, 2 informations \n", + "- 0 errors, 17 warnings, 2 informations \n", + "- 0 errors, 10 warnings, 2 informations \n", + "- 0 errors, 0 warnings, 2 informations Needs manual copy of FOO = const(0)\n", + "- 0 errors, 12 warnings, 2 informations ( better merging of overloads --> more unresolved references)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "shutil.rmtree(docstubs / \"_mpy_shed\" , ignore_errors=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "# !stubber frozen --version stable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Werkt goed zonder 'enrich-ed' docstubs\n", + "!stubber merge --port rp2 --version stable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "merged_p = Path(\"repos/micropython-stubs/stubs/micropython-v1_24_1-rp2-RPI_PICO-merged\")\n", + "# add mpshed to test the quality of the merge\n", + "print(cp_stubmod(\"_mpy_shed\", merged_p))\n", + "\n", + "# remove the empty non functional collections.pyi\n", + "print(( merged_p / \"collections.pyi\").unlink())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from stubber.rst.lookup import U_MODULES\n", + "\n", + "for mod in U_MODULES:\n", + " try:\n", + " shutil.copy2(merged_p / f\"{mod}.pyi\", merged_p / f\"u{mod}.pyi\")\n", + " except FileNotFoundError:\n", + " print(f\"replacing umodule with module: {mod}.pyi not found\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pyright {merged_p}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 86 errors, 35 warnings, 0 informations \n", + "rp2\n", + "- 88 errors, 33 warnings, 0 informations \n", + "- 1 error, 4 warnings, 0 informations \n", + "- 3 errors, 8 warnings, 0 informations \n", + "- 2 errors, 8 warnings, 0 informations " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [], + "source": [ + "# !stubber build --port esp32" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 4451aa48aca7e04fc51c028d44bd01848990ddf6 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Tue, 21 Jan 2025 00:00:50 +0100 Subject: [PATCH 56/57] stubber: Remove add_machine_pin_call function and related logic from merge_docstubs Signed-off-by: Jos Verlinde --- src/stubber/publish/merge_docstubs.py | 4 -- src/stubber/publish/missing_class_methods.py | 67 -------------------- tests/publish/test_merge.py | 9 +-- 3 files changed, 3 insertions(+), 77 deletions(-) delete mode 100644 src/stubber/publish/missing_class_methods.py diff --git a/src/stubber/publish/merge_docstubs.py b/src/stubber/publish/merge_docstubs.py index 9af02f60..c906a4df 100644 --- a/src/stubber/publish/merge_docstubs.py +++ b/src/stubber/publish/merge_docstubs.py @@ -11,7 +11,6 @@ from stubber.codemod.enrich import enrich_folder from stubber.publish.candidates import board_candidates, filter_list from stubber.publish.defaults import GENERIC, GENERIC_L, default_board -from stubber.publish.missing_class_methods import add_machine_pin_call from stubber.publish.pathnames import get_base, get_board_path, get_merged_path from stubber.utils.config import CONFIG @@ -68,9 +67,6 @@ def merge_all_docstubs( log.info(f"Merge {candidate['version']} docstubs with boardstubs to {merged_path.name}") try: result = copy_and_merge_docstubs(board_path, merged_path, doc_path) - # Add methods from docstubs to the MCU stubs that do not exist in the MCU stubs - # Add the __call__ method to the machine.Pin and pyb.Pin class - add_machine_pin_call(merged_path, candidate["version"]) except Exception as e: log.error(f"Error parsing {candidate['version']} docstubs: {e}") continue diff --git a/src/stubber/publish/missing_class_methods.py b/src/stubber/publish/missing_class_methods.py deleted file mode 100644 index d11c0c92..00000000 --- a/src/stubber/publish/missing_class_methods.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -Add missing methods to classes in the stubs that are documented in the docstubs - -""" - -from pathlib import Path - -import libcst as cst -from mpflash.logger import log - -from mpflash.versions import clean_version -from stubber.codemod.add_method import CallAdder, CallFinder -from stubber.utils.config import CONFIG -from stubber.utils.post import run_black - - -def add_machine_pin_call(merged_path: Path, version: str): - """ - Add the __call__ method to the machine.Pin and pyb.Pin class - in all pyb and machine/umachine stubs - """ - # TODO: this should be done in the merge_docstubs.py to avoid needing to run black twice - # and to avoid having to parse the file twice - - # first find the __call__ method in the default stubs - for suffix in ["machine/Pin.pyi", "machine.pyi", "machine/__init__.pyi"]: - mod_path = ( - CONFIG.stub_path / f"micropython-{clean_version(version, flat=True)}-docstubs" / suffix - ) - if mod_path.exists(): - break - else: - log.debug(f"{mod_path} not found") - if not mod_path.exists(): - log.error(f"No machine.Pin.pyi or machine.pyi docstub found for {version}") - return False - - log.trace(f"Parsing {mod_path} for __call__ method") - source = mod_path.read_text(encoding="utf-8") - try: - module = cst.parse_module(source) - except Exception as e: - log.error(f"Error parsing {mod_path}: {e}") - raise e - - call_finder = CallFinder() - module.visit(call_finder) - - if call_finder.call_meth is None: - log.error("no __call__ method found") - return False - - # then use the CallAdder to add the __call__ method to all machine and pyb stubs - mod_paths = [ - f for f in merged_path.rglob("*.*") if f.stem in ("machine", "umachine", "pyb", "Pin") - ] - if not mod_paths: - log.warning(f"no machine.Pin stubs found for {version}") - return False - for mod_path in mod_paths: - log.debug(f"Adding __call__ method to {mod_path}") - source = mod_path.read_text(encoding="utf-8") - machine_module = cst.parse_module(source) - new_module = machine_module.visit(CallAdder(call_finder.call_meth)) - mod_path.write_text(new_module.code, encoding="utf-8") - run_black(mod_path) - return True diff --git a/tests/publish/test_merge.py b/tests/publish/test_merge.py index 61d9899c..a55d974a 100644 --- a/tests/publish/test_merge.py +++ b/tests/publish/test_merge.py @@ -2,7 +2,6 @@ import pytest from mock import MagicMock - from stubber.publish.merge_docstubs import copy_and_merge_docstubs, merge_all_docstubs from .fakeconfig import FakeConfig @@ -32,9 +31,6 @@ def test_merge_all_docstubs_mocked(mocker, tmp_path, pytestconfig): m_copy_and_merge_docstubs: MagicMock = mocker.patch( "stubber.publish.merge_docstubs.copy_and_merge_docstubs", autospec=True ) - m_add_machine_pin_call: MagicMock = mocker.patch( - "stubber.publish.merge_docstubs.add_machine_pin_call", autospec=True - ) # mock pathlib.Path.exists to return True so there is no dependency of folders existing on the test system mocker.patch("stubber.publish.merge_docstubs.Path.exists", autospec=True, return_value=True) @@ -43,7 +39,6 @@ def test_merge_all_docstubs_mocked(mocker, tmp_path, pytestconfig): assert result == 2 assert m_board_candidates.call_count == 1 assert m_copy_and_merge_docstubs.call_count == 2 - assert m_add_machine_pin_call @pytest.mark.mocked @@ -56,7 +51,9 @@ def test_copydocstubs_mocked(mocker, tmp_path, pytestconfig): m_enrich_folder: MagicMock = mocker.patch( "stubber.publish.merge_docstubs.enrich_folder", autospec=True, return_value=42 ) - m_copytree: MagicMock = mocker.patch("stubber.publish.merge_docstubs.shutil.copytree", autospec=True) + m_copytree: MagicMock = mocker.patch( + "stubber.publish.merge_docstubs.shutil.copytree", autospec=True + ) mocker.patch("stubber.publish.merge_docstubs.shutil.copy", autospec=True) # use files already in test set From 3631c7e7f1521c390b928258d62ee8862956ab61 Mon Sep 17 00:00:00 2001 From: Jos Verlinde Date: Tue, 21 Jan 2025 02:58:30 +0100 Subject: [PATCH 57/57] stubber: Refactor enrich_folder to use copy_type_modules and add merge_config for module management Signed-off-by: Jos Verlinde --- src/stubber/codemod/enrich.py | 19 +------ src/stubber/merge_config.py | 72 +++++++++++++++++++++++++++ src/stubber/publish/merge_docstubs.py | 14 +++--- src/stubber/rst/lookup.py | 1 + 4 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 src/stubber/merge_config.py diff --git a/src/stubber/codemod/enrich.py b/src/stubber/codemod/enrich.py index ef3a45cf..78abe7a1 100644 --- a/src/stubber/codemod/enrich.py +++ b/src/stubber/codemod/enrich.py @@ -16,6 +16,7 @@ from mpflash.logger import log import stubber.codemod.merge_docstub as merge_docstub +from stubber.merge_config import CP_REFERENCE_TO_DOCSTUB, copy_type_modules from stubber.rst.lookup import U_MODULES from stubber.utils.post import run_black @@ -289,9 +290,6 @@ def enrich_folder( # sort by target_path , to show diffs candidates = sorted(candidates, key=lambda m: m.target) - # CHECK: is this still needed? - # package_name = package_name or package_from_path(target_folder, source_folder) - # for target in target_files: for mm in candidates: try: @@ -324,19 +322,6 @@ def enrich_folder( run_black(target_folder) # DO NOT run Autoflake as this removes some relevant (but unused) imports too early - CP_REFERENCE_MODULES = ["rp2/PIOASMEmit.pyi", "asyncio"] if params_only: - log.info("Adding additional type modules to the docstubs") - for addition in CP_REFERENCE_MODULES: - src = source_folder / addition - if src.exists(): - if src.is_dir(): - target = target_folder / addition - log.info(f" - add {target}") - shutil.copytree(src, target, dirs_exist_ok=True) - else: - target = target_folder / addition - log.info(f" - add {target}") - target.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(src, target) + copy_type_modules(source_folder, target_folder, CP_REFERENCE_TO_DOCSTUB) return count diff --git a/src/stubber/merge_config.py b/src/stubber/merge_config.py new file mode 100644 index 00000000..0f37c866 --- /dev/null +++ b/src/stubber/merge_config.py @@ -0,0 +1,72 @@ +""" +Merge configuration for the stubber. +defines constants and util functions to copy, update or remove type modules +""" + +import shutil +from pathlib import Path +from typing import List + +from mpflash.logger import log + +from stubber.rst.lookup import U_MODULES + +EXT = [".pyi", ".py", ""] +CP_REFERENCE_TO_DOCSTUB = ["rp2/PIOASMEmit.pyi", "asyncio"] +"Modules that to copy from reference modules to the docstubs" +CP_REFERENCE_TO_MERGED = CP_REFERENCE_TO_DOCSTUB +"Modules that to copy from reference modules to the merged stubs" +RM_MERGED = ["collections", "builtins", "pycopy_imphook"] +"Modules that to remove from merged stubs" + + +def copy_type_modules(source_folder: Path, target_folder: Path, CP_REFERENCE_MODULES: List[str]): + log.info("Adding additional type modules to the docstubs") + for addition in CP_REFERENCE_MODULES: + src = source_folder / addition + if src.exists(): + if src.is_dir(): + target = target_folder / addition + log.info(f" - add {target}") + shutil.copytree(src, target, dirs_exist_ok=True) + else: + target = target_folder / addition + log.info(f" - add {target}") + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(src, target) + + +def copy_to_umodules(target_folder: Path): + log.info("Adding additional type modules to the docstubs") + for name in U_MODULES: + for ext in EXT: + target = target_folder / f"{name}{ext}" + if target.exists(): + try: + if target.is_dir(): + log.info(f" - add {target}") + shutil.copytree(target, target_folder / f"u{name}", dirs_exist_ok=True) + else: + log.info(f" - add {target}") + shutil.copy2(target, target_folder / f"u{name}{ext}") + + except OSError as e: + log.error(f" - not found {target.relative_to(target_folder)}, {e}") + + +def remove_modules(target_folder: Path, RM_MODULES: List[str]): + log.info("Removing modules from the merged stubs") + + for name in RM_MODULES: + for ext in EXT: + target = target_folder / f"{name}{ext}" + if target.exists(): + try: + if target.is_dir(): + log.info(f" - remove {target}") + shutil.rmtree(target) + else: + log.info(f" - remove {target}") + target.unlink() + finally: + log.debug(f" - remove {target}") diff --git a/src/stubber/publish/merge_docstubs.py b/src/stubber/publish/merge_docstubs.py index c906a4df..ba4a664b 100644 --- a/src/stubber/publish/merge_docstubs.py +++ b/src/stubber/publish/merge_docstubs.py @@ -9,6 +9,7 @@ from mpflash.logger import log from stubber.codemod.enrich import enrich_folder +from stubber.merge_config import RM_MERGED, copy_to_umodules, remove_modules from stubber.publish.candidates import board_candidates, filter_list from stubber.publish.defaults import GENERIC, GENERIC_L, default_board from stubber.publish.pathnames import get_base, get_board_path, get_merged_path @@ -115,17 +116,14 @@ def copy_and_merge_docstubs(fw_path: Path, dest_path: Path, docstub_path: Path): (dest_path / f.name).with_suffix(suffix).unlink() # delete builtins.pyi in the package folder - for name in [ - "builtins", # creates conflicts, better removed - "pycopy_imphook", # is not intended to be used directly, and has an unresolved subclass - ]: - for suffix in [".py", ".pyi"]: - if (dest_path / name).with_suffix(suffix).exists(): # type: ignore - (dest_path / name).with_suffix(suffix).unlink() # type: ignore - + # remove unwanted modules + remove_modules(dest_path, RM_MERGED) # 2 - Enrich the MCU stubs with the document stubs result = enrich_folder(source_folder=docstub_path, target_folder=dest_path, write_back=True) + # fixup the umodules + copy_to_umodules(dest_path) + # copy the docstubs manifest.json file to the package folder if (docstub_path / "modules.json").exists(): shutil.copy(docstub_path / "modules.json", dest_path / "doc_stubs.json") diff --git a/src/stubber/rst/lookup.py b/src/stubber/rst/lookup.py index 4a8a1fca..a7edd966 100644 --- a/src/stubber/rst/lookup.py +++ b/src/stubber/rst/lookup.py @@ -54,6 +54,7 @@ class Fix: U_MODULES = [ "array", + "asyncio", "binascii", "io", "json",