Update MicroPython to v1.28.0 - #11334
Conversation
To connect STM32H7 that is in SLEEPD1 state (e.g. during REPL) debuggers like st-flash or openocd must assert SRST. Signed-off-by: Oliver Joos <oliver.joos@hispeed.ch>
STM32CubeMX shows a conflict of UART5 with ETH MII. However UART1 can be used with TX and RX on the pin headers. PLL1Q is reduced from 200 to 100 MHz because it may be used for FDCAN or SDMMC. FDCAN needs <= 150 MHz, and 100 MHz is enough for an SDCard connected to pin headers to work reliably. Signed-off-by: Oliver Joos <oliver.joos@hispeed.ch>
This commit fixes tests that will always fail when using CPython 3.14 to get a known-good output to compare MicroPython's behaviour against. Starting from CPython 3.14, statements inside a `finally` block that will prevent the execution flow to reach the block's last statement will raise a SyntaxWarning. That text would end up in the comparison data and thus make known-good tests fail. Given that those tests explicitly exercise flow control interruptions in finally blocks, there is no real workaround that can be applied to the tests themselves. Therefore those tests will now check MicroPython's behaviour against expected output files recorded from the tests' output with CPython 3.11. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit makes tests exercising certain math functions' limit work when using CPython 3.14 to validate the tests' output. CPython 3.14 introduced more descriptive messages when math domain error conditions are encountered rather than a single generic message. This breaks the tests in question as MicroPython uses a single error message when reporting these conditions (both to closely follow CPython and to save firmware space). The math domain tests now look for an error pattern that is compatible with both CPython 3.14 and previous versions, converting messages in the newer format into the previous one. This makes the tests' behaviour under MicroPython comparable with CPython for the foreseeable future. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit fixes a test exercising complex numbers creation, working around a deprecation introduced in CPython 3.14. Creating complex numbers using a complex number as the real part in the constructor is deprecated in CPython 3.14, but that construction method is still supported by MicroPython and covered by tests. To work around this, the specific constructor is extracted into its own test, providing an expected output file recorded using CPython 3.11. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
As of January 12 the default Python version changed from 3.9 to 3.12, and 3.12 has issues running the settrace tests. 3.13 seems to also have some issues, so setting 3.11 for now. See actions/runner-images#13468 Signed-off-by: Angus Gratton <angus@redyak.com.au>
This test was ignored since 2020, which hid a new bug in the test for the native emitter added in 2024. Hopefully other changes to the test will make it more reliable. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
Locally, this changes the duration of the test from about 2.7s to 0.3s. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This ensures that zero-duration sleeps run scheduled callbacks. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This ensures that zero-duration delays run scheduled callbacks. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This ensures that zero-duration delays run scheduled callbacks. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This allows tests like `asyncio_event_queue.py` to succeed under the native emitter when poll is enabled. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This variant of `schedule.py` explicitly calls a zero sleep. The existing variant is kept to ensure the scheduler is called between bytecodes. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
These tests no longer fail under the native emitter. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This test can now run correctly with the native emitter because the `thread()` function will run the scheduler during the call to `time.sleep_ms(1)`. Signed-off-by: Jeff Epler <jepler@unpythonic.net>
Sockets have a finaliser, so they must be created carefully. Signed-off-by: Damien George <damien@micropython.org>
This should be equivalent logic, and is a bit simpler and clearer now. Signed-off-by: Damien George <damien@micropython.org>
Reduces code size by about 60 bytes. Signed-off-by: Damien George <damien@micropython.org>
This commit fixes a long standing bug/deficiency in the lwIP socket code, whereby it would abandon all incoming TCP data if the remote sent a TCP RST. This behaviour it tested by the existing `tests/multi_net/tcp_client_rst.py` and `tests/multi_net/asyncio_tcp_client_rst.py` tests, and they both fail on boards like PYBD_SFx and RPI_PICO_W due to the deficiency. With the fix here, both of those tests now pass on lwIP targets, along with all existing socket tests. Signed-off-by: Damien George <damien@micropython.org>
These changes test a few more things related to TCP RST: - add a second iteration to drain incoming data after TCP RST - read data after closing socket Signed-off-by: Damien George <damien@micropython.org>
When `MICROPY_PY_FUNCTION_ATTRS_CODE` is enabled, constructing a function instance through `fun_bc_make_new()` can call `mp_make_function_from_proto_fun()` with pure bytecode as the proto-fun. Signed-off-by: Damien George <damien@micropython.org>
In case `MICROPY_PY_MARSHAL` is enabled manually. Otherwise the marshal module is not very usable. Signed-off-by: Damien George <damien@micropython.org>
This adds support to `mp_raw_code_save_fun_to_bytes()` so that it can handle saving functions that have children. It does this by inspecting the MP_BC_MAKE_FUNCTION/etc opcodes to work out how many children there are, and creating a tree of simplified raw code information. Signed-off-by: Damien George <damien@micropython.org>
If a function has children then the code object returned from __code__ must contain an `mp_raw_code_t` (actually `mp_raw_code_truncated_t` is enough) that points to the child table. Signed-off-by: Damien George <damien@micropython.org>
This commit adds support to the `marshal` module to be able to dump
functions that have child functions. For example:
import marshal
def f():
def child():
return 1
return child
marshal.dumps(f.__code__)
It also covers the case of marshalling functions that use list
comprehensions, because a list comprehension uses a child function.
This is made possible by the newly enhanced
`mp_raw_code_save_fun_to_bytes()` that can now handle nested functions.
Unmarshalling via `marshal.loads()` already supports nested functions
because it uses the standard `mp_raw_code_load_mem()` function which is
used to import mpy files (and hence can handle all possibilities).
Signed-off-by: Damien George <damien@micropython.org>
Pins may be on the LPADC2 peripheral. Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
The rt117x uses the LPADC peripheral which supports both A-side and B-side channel inputs, e.g. ADC1_CH1A and ADC1_CH1B. Previously, only `kLPADC_SampleChannelSingleEndSideA` was being used during capture, while the pin may be in side B. The fix in this commit detects the side based on the pin configuration and sets `sampleChannelMode` appropriately. Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
Adds new PHY driver for TI DP83867 Gigabit Ethernet PHY. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
The definitions from pins.csv are used directly in mimxrt/eth.c Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
Needs a native exp file because native code doesn't print line numbers in the traceback. Signed-off-by: Damien George <damien@micropython.org>
Following a69425b, this is a convenient way to run a subset of tests. Signed-off-by: Damien George <damien@micropython.org>
The webassembly port needs some additional weakref tests due to the fact that garbage collection only happens when Python execution finishes and JavaScript resumes. The `tests/ports/webassembly/heap_expand.py` expected output also needs to be updated because the amount of GC heap got smaller (weakref WTB takes some of the available RAM). Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: Damien George <damien@micropython.org>
It takes longer now that weakref is enabled in the coverage build. Signed-off-by: Damien George <damien@micropython.org>
This brings in: - sdcard: Send stop bit after multi-block read/write - sdcard: Compute CRC7 for all SPI commands - sdcard: Add read/write speed test to sdtest - lsm6dsox: Add pedometer support - lsm6dsox: Add pedometer example code - unix-ffi/re: Handle PCRE2_UNSET in group and groups methods - unix-ffi/re: Add tests for empty string match in ffi regex - unix-ffi/machine: Retrieve a unique identifier if one is known - senml/docs: Correct capitalization of 'MicroPython' - unix-ffi/_libc: Extend FreeBSD libc versions range - string: Convert string module to package and import templatelib Signed-off-by: Damien George <damien@micropython.org>
If a port enables t-strings then it is required to have the `string.templatelib` package (at least to run the tests). That's automatically the case if `MICROPY_PY_TSTRINGS` is enabled. If a port freezes in the micropython-lib `string` extension package then the latest version of this package will include the built-in `string.templatelib` classes. So the feature check for t-strings no longer needs to check if they are available. Signed-off-by: Damien George <damien@micropython.org>
Includes a fix to STA teardown to deinit tcpip and clear itf_state. Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
Signed-off-by: Matt Trentini <matthew.trentini@planetinnovation.com.au> Signed-off-by: Matt Trentini <matt.trentini@gmail.com>
This fixes a regression made by 9e9da6c. There are two issues here: 1. `MPY_FEATURE_ARCH` and `MP_NATIVE_ARCH_xxx` are not visible in this file because `py/persistentcode.h` is not included. 2. Even if they were visible the macro logic will not work because `MP_NATIVE_ARCH_xxx` are enum values and cannot be used in #if logic. What this means is that the first #if is always true, so there is no cache flushing on ARM (non-Thumb) or RISC-V targets. This breaks native code on, eg, ESP32-P4. The fix here aims to simplify the logic by using built-in compiler defines to select the target: - On an ARM Thumb target with `__ICACHE_PRESENT` enabled, it will flush the cache. - On an ARM (non-Thumb) target, it will prefer `__builtin___clear_cache()` if possible, otherwise it will use inline assembler. - On a RISC-V target, it will use `MP_HAL_CLEAN_DCACHE()` if that macro is defined (that's only on ESP32-P4 at the moment). The logic should be the same as before, except for the cases where an emitter is enabled on a mismatching architecture. For example, if `MICROPY_EMIT_THUMB` and/or `MICROPY_EMIT_INLINE_THUMB` were enabled on a non-Thumb target, previously that will try to generate code to flush caches (which doesn't really make sense), but now it will not. This actually happened for `mpy-cross` which does enable all the emitters, and prior to this fix would follow the Thumb path, but not generate any code because `__ICACHE_PRESENT` is disabled (at least when building `mpy-cross` on x86). Signed-off-by: Damien George <damien@micropython.org>
On the esp32 port when adding a user C module, the source code for the user
C module was being compiled without certain C flags. Notably the
optimisation flag was missing.
This commit fixes that by explicitly adding the missing C flags to the
compilation of user C modules.
The missing flags were the following, which are now included when building
user C modules (found by inspecting the generated CMake files when building
with ulab):
-ffunction-sections
-fdata-sections
-Wall
-Werror=all
-Wno-error=unused-function
-Wno-error=unused-variable
-Wno-error=unused-but-set-variable
-Wno-error=deprecated-declarations
-Wextra
-Wno-error=extra
-Wno-unused-parameter
-Wno-sign-compare
-Wno-enum-conversion
-gdwarf-4
-ggdb
-mdisable-hardware-atomics
-O2
-fmacro-prefix-map=micropython/ports/esp32=.
-fmacro-prefix-map=espressif/esp-idf=/IDF
-fstrict-volatile-bitfields
-fno-jump-tables
-fno-tree-switch-conversion
See related issue micropython#18880.
Work done in collaboration with @andrewleech.
Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: Damien George <damien@micropython.org>
Restores the merge-commit style last used for v1.25.0 in adafruit#10437. v1.26 was skipped and v1.27 landed as a squashed diff port (14c1815), so no MicroPython tag since v1.25.0 has been an ancestor of main and the merge base for this one is v1.25.0 rather than v1.27.0. That is why this merge reports 1104 conflicted files: it replays 1350 upstream commits, 745 of the conflicts being MicroPython ports CircuitPython does not carry. Conflicts are resolved to the tree from the v1.27.0..v1.28.0 diff port, which is restricted to the paths CircuitPython does carry and was tested on hardware. The resulting tree is byte-identical to that branch; only the history differs. Content summary: - 88 files applied without conflict - 26 files hand-merged against CircuitPython deviations - 91 new upstream test and doc files added - py/modstring.c, py/modweakref.c and py/objtemplate.c added and wired into py.mk and py.cmake. All three are inert: their feature gates sit above CircuitPython's CORE_FEATURES ROM level - skipped 23 extmod and lib files CircuitPython does not carry, plus the tests/ports, tests/multi_wlan and tests/net_inet directories Every CIRCUITPY-CHANGE deviation was preserved. One new deviation: upstream moves the tuple and list helper declarations out of py/obj.h, so py/obj.h now includes py/objlist.h and py/objtuple.h at the bottom, keeping the roughly 55 consumers outside py/ working unchanged. Supersedes adafruit#11331. All four commits from micropython#18596 are in v1.28.0, as is upstream's d41b8dc, which fixes the same -Werror=undef breakage that PR fixes by other means. Tested on six ARM boards: Metro RP2040, Metro RP2350, Metro M4 AirLift Lite, Metro M0 Express, Feather nRF52840 Express and Feather STM32F405 Express. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The v1.27 to v1.28 diff port was restricted to py, extmod, shared, lib, mpy-cross, tools, tests and docs, so ports/unix was never considered. It is not an independent CircuitPython port: it is a fork of upstream's, still carrying MicroPython's header and CIRCUITPY-CHANGE markers, and .github/workflows/run-tests.yml builds it with VARIANT=coverage to run the test suite. modos.c: upstream moved mp_os_urandom into extmod/modos.c and deleted it here. Taking only the extmod half left both definitions in one translation unit, since this file is included via MICROPY_PY_OS_INCLUDEFILE, and the coverage build failed to compile with a redefinition error. This affected the diff port identically. unix_mphal.c: mp_hal_delay_ms(0) now processes pending callbacks instead of falling straight out of the wait loop, so time.sleep(0) services scheduled callbacks and keyboard interrupts. alloc.c: guard mp_unix_alloc_exec and mp_unix_free_exec with MICROPY_ENABLE_NATIVE_CODE rather than MICROPY_EMIT_NATIVE, matching the macro py/persistentcode.c calls them under. The two coincide on x86_64 hosts today but diverge when native code is loaded without a native emitter compiled in. ports/unix VARIANT=coverage now builds clean and the test suite runs 959 of 960. The one failure, basics/string_tstring_basic1.py, is a new upstream test that asserts upstream's \uXXXX repr escaping and conflicts with CircuitPython's deliberate "print printable Unicode chars" deviation in py/objstrunicode.c. It is unrelated to this commit and fails on the diff port too. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CircuitPython carries a deliberate deviation in py/objstrunicode.c, marked
"CIRCUITPY-CHANGE: print printable Unicode chars", which prints printable
non-ASCII characters in repr() as-is where upstream escapes them:
repr(chr(0x3b1)) -> upstream: '\u03b1' CircuitPython: 'α'
Upstream did not touch objstrunicode.c between v1.27.0 and v1.28.0, so this
merge preserved the deviation unchanged. What is new in v1.28.0 is
tests/basics/string_tstring_basic1.py, whose expected output asserts upstream's
escaped form. Its own comment acknowledges this, "Unicode escapes (display
format differs)". Only the Unicode repr lines differ; the rest of the file
passes.
Skipped rather than regenerating the .exp, which would diverge the file from
upstream, conflict on the next update, and quietly re-assert behaviour
CircuitPython has deliberately rejected. This follows the existing pattern in
this file for tests that contradict a CircuitPython deviation.
ports/unix VARIANT=coverage now runs 959 of 959.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
MicroPython v1.28.0 adds three MP_ERROR_TEXT strings in files CircuitPython
compiles:
py/persistentcode.c "function must be bytecode"
py/modweakref.c "not a heap object"
py/objtemplate.c "expected str or Interpolation"
Regenerated with make translate. make check-translate passes.
Six of the changed lines are unrelated to this merge and were already stale on
main: shared-bindings/audiocore/WaveFile.c joins the location list for "Buffer
must be a multiple of %d bytes", and three WatchDogTimer strings reorder.
Running make translate on unmodified main reproduces exactly those six lines, so
they are carried here rather than hand-trimmed, because the pre-commit hook
compares against a fresh generation and a trimmed file would fail it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three comment-only changes, no behaviour change. py/obj.h: drop the note above mp_type_template describing upstream's own declaration layout. It marks no CircuitPython decision and the same unconditional-extern pattern is visible three lines above without one. py/obj.h: the tuple and list note repeated the include-placement rationale that the comment at the includes themselves already gives. Kept the part that is not obvious from the code, that mp_obj_tuple_del and mp_obj_tuple_hash were dead declarations upstream. tests/run-tests.py: the new skip carried a four line explanation where every other skip in that function has one line. The commit message covers the reasoning. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
….sleep
v1.28 moves mp_handle_pending from the EINTR path to the top of both sleep
loops, so it runs before every sleep rather than only after an interrupted one.
mp_time_sleep is now byte-identical to upstream's.
This was missed on the first pass because the rest of the modtime.c diff is the
mp_handle_pending(bool) to enum rename, which is source compatible, so the file
looked mechanical. The call was relocated, not just renamed.
Without it, time.sleep(0) never processes scheduled callbacks, because select
returns immediately and the EINTR branch is never taken. Under the bytecode
emitter the VM dispatch loop picks callbacks up anyway, so this only shows under
--emit native, where there is no dispatch loop. That is exactly what the new
tests/micropython/schedule_sleep.py is for, per its own header comment: it
replaces busy loops with sleep so the test can pass under the native emitter.
Fixes the tests / run (native) and tests / run (native_mpy) CI failures, where
schedule_sleep.py timed out.
Ran all four CI test variants against ports/unix VARIANT=coverage:
all 959 passed
mpy 746 passed
native 942 passed
native_mpy 732 passed
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
abosulte to absolute, and irregardless to regardless, in a comment in run_one_test. Pre-existing, surfaced because codespell runs over the whole file once the file is touched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
CI is green except That board has no headroom to give:
12 of the 13 translations build. Only The three new upstream modules are not the cause. On a board build they are
The growth is ordinary upstream expansion across #11335 reclaims the unused 32 KB To keep CI green in the meantime I have gated one module off for this board, |
The ja translation overflows FLASH by 176 bytes on this board with the MicroPython v1.28.0 update. The board is at 99.99% on main, with 80 bytes free in that translation, so a routine upstream release does not fit. The other 12 translations build. The three new upstream modules are not the cause. On a board build py/modstring.c, py/modweakref.c and py/objtemplate.c all have zero .text, no symbols in the ELF and none of their error strings in the binary, because their feature gates sit above CircuitPython's ROM level. The growth is ordinary expansion across py/. msgpack is chosen because it is self contained and has no tie to any peripheral on this board, so nothing else loses a capability. This is temporary. adafruit#11335 gives slot0 the unused 32 KB storage partition, which is 186 times the shortfall, and this gate should be reverted when that lands. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
dhalbert
left a comment
There was a problem hiding this comment.
py/obj.h gets a compatibility shim.
Don't do this. Change the consumers. We want to make py/ and other shared files as close as possible to upstream to minimize merge differences.
Upstream v1.28 moved the tuple and list helper declarations out of py/obj.h into py/objtuple.h and py/objlist.h. This branch re-exported them from py/obj.h so that no consumer had to change. Review asked for the opposite: keep py/ as close to upstream as possible so future merges stay small. Only three files need anything. Every other consumer already reaches the declarations through py/runtime.h, which includes py/mpstate.h, which includes py/objlist.h and py/objexcept.h. common-hal/wifi/Network.c includes neither, so it now includes py/objlist.h directly. Also removes three comments in py/obj.h that only narrated upstream's own moves. py/obj.h now adds nothing to upstream v1.28 beyond the CIRCUITPY-CHANGE deviations that were already there. Built with the shim gone: unix coverage, Metro RP2350, Feather nRF52840 Express, Pico 2 W and Metro ESP32-S3 for the wifi and _bleio paths. run-tests.py passes in all four CI variants. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
| **Availability:** template strings require ``MICROPY_PY_TSTRINGS`` to be enabled | ||
| at compile time. They are enabled by default at the full feature level, which | ||
| includes the alif, mimxrt and samd (SAMD51 only) ports, the unix coverage variant | ||
| and the webassembly pyscript variant. |
There was a problem hiding this comment.
This comment about availability is MicroPython-specific.
There was a problem hiding this comment.
Agreed, and it may go further. MICROPY_PY_TSTRINGS is only enabled in mpy-cross, never in firmware, so no board can import this module. The merge also added this page to the docs/library/index.rst toctree. Should it be there at all, or would you rather I just rewrite the availability text?
There was a problem hiding this comment.
We need to decide whether to add this new templates feature to most boards. What is the size growth when it's turned on?
The easy documentation fix is just to remove the Availability: paragraph. Users can always check circuitpython.org.
| **Availability:** the weakref module requires ``MICROPY_PY_WEAKREF`` to be enabled | ||
| at compile time. It is enabled on the unix coverage variant and the webassembly | ||
| pyscript variant. |
There was a problem hiding this comment.
Same here. MICROPY_PY_WEAKREF defaults to ROM level EVERYTHING and no CircuitPython build sets that, so the module is not available anywhere. Same question as the templatelib page: drop it from the toctree, or keep it with CircuitPython availability text?
There was a problem hiding this comment.
This doesn't seem that useful for us right now. Just remove it from the toctree.
| // CIRCUITPY-CHANGE: mp_obj_fun_get_name was renamed mp_obj_fun_bc_get_name | ||
| // upstream in v1.28 and now lives in py/objfun.h. No caller outside py/. |
There was a problem hiding this comment.
Confused why this is here. If it moved we should just track it. Is it becaue of the shim you mentioned?
There was a problem hiding this comment.
Yes, that was the shim. Upstream renamed it mp_obj_fun_bc_get_name and moved it to py/objfun.h, and there is no caller outside py/, so the declaration is correctly gone. The comment was only narration and is removed in 2097c90, along with the shim itself.
py/objlist.c carried a comment saying mp_obj_list_get, _set_len and _store were kept out of line. They are not. They are static inline in py/objlist.h where upstream v1.28 puts them, with the subclassing cast inlined into _get and _store and marked CIRCUITPY-CHANGE on each. The comment described an earlier attempt and contradicted the code below it. py/objtype.c had a comment above a line that is byte-identical to upstream v1.28 py/objtype.c:96, so there was nothing CircuitPython-specific to mark. Comments only. unix coverage and Metro RP2350 build clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Only three files needed changing.
Everything else already reaches the declarations through Built unix coverage, Metro RP2350, nRF52840, Pico 2 W and Metro ESP32-S3. Verified that the farm builds and runs the benchmark burn-in within normal tolerance. Based on the last commit
|
What
Merges MicroPython v1.28.0 into main as a merge commit. Supersedes #11331.
Why
Keeps upstream commits referenced in our history, and sets the merge base for v1.29.
Parents are
9749ce19f4(main) ande0e9fbb17e(mp-v1.28.0).Hardware tested
Nine boards on the farm, all flashed and running
10.3.0-51-g68772606a1.All passing
tests/run-perfbench.py.How I tested it
Test suite on the unix coverage build:
ruff checkandruff format --checkclean on the 77 changed Python files,using the pinned 0.15.7 from
.pre-commit-config.yaml.Scope
Two things a reviewer should not have to discover.
Conflicts were resolved wholesale, not adjudicated individually.
git merge mp-v1.28.0reports 1104 conflicted files, because the merge base is v1.25.0rather than v1.27.0, and 745 of those are MicroPython ports CircuitPython does
not carry. The tree was set to a separate v1.27.0..v1.28.0 port restricted to
the paths CircuitPython does carry, already built and tested on hardware. Both
parents are recorded.
py/obj.hmatches upstream. Upstream moves the tuple and list declarationsinto
py/objtuple.handpy/objlist.h. Three files neededpy/objlist.hadded:
common-hal/wifi/Network.cin espressif, raspberrypi and zephyr-cp.Every other consumer already reaches the declarations through
py/runtime.h.Done in 2097c90.
Smaller notes:
ports/unixmodos.cis a build fix: upstream movedmp_os_urandomtoextmod/modos.c, and taking only that half left two definitions in one translation unittests/basics/string_tstring_basic1.pypy/objstrunicode.cdeliberately does not doports/unix/coverage.cmp_obj_list_ensureandmp_obj_list_optional_arg. Both functions exist, so this is a coverage gap onlyAI assistance
Claude Code performed the merge and wrote the follow-up commits. I ran every
build, flashed every board, and ran the test suite and benchmarks myself.