The GitHub Actions job "CI" on tvm-ffi.git/junrushao/2026-07-12/tmp-squashed has failed. Run started by GitHub user junrushao (triggered by junrushao).
Head commit for run: 7c3b64777783edd2cb4c9d014bff83f9fa4b99f9 / Junru Shao <[email protected]> feat(ffi)!: expand object, reflection, and dataclass support Architecture: - Make ObjectPtr<T> a first-class FFI value with retain/transfer semantics, runtime ancestry checks, and null-to-None encoding. - Normalize unqualified Object subclasses to ObjectPtr storage across Array, List, Map, Dict, Tuple, Optional, Variant, and Expected while preserving shorthand and explicit interoperability with storage-compatible covariance. - Separate py_class registration from owner-local annotation resolution so forward references, mixins, and mutually recursive classes resolve without merging inherited annotations. - Placement-construct and destroy native object-valued fields in Python-defined objects so Python allocation follows the C++ field lifetime contract. - Move IntEnum and StrEnum payload storage and lookup into native bases, with reflected type attributes handling conversion and JSON singleton restoration. Public Interfaces: - Add direct Any, reflected-field, parameter, and container support for ObjectPtr<T>. Qualified Object pointees remain unsupported, and Optional<ObjectPtr<T>> cannot distinguish absent from present-null over FFI. - Export tvm_ffi.utils.init_property. - Add ObjectDef::def_type_attr(), ObjectDef::def_convert<T>(), constant-valued TypeAttrDef::def(), and TypeAttrDef::def_convert<T>(). - Change @py_class structural_eq from opt-in to "tree" by default; explicit None now opts out. - Make payload enum subclasses inherit ffi.IntEnum or ffi.StrEnum native storage and reject subclass-owned value fields. - Accept device strings in typed conversion, expose ancestor-aware type attribute lookup, and broaden generated List and Dict input annotations to Sequence and Mapping. - Keep the stable C ABI unchanged; compatibility changes affect public C++ templates, reflected object behavior, and Python APIs. UI/UX: - none Behavioral Changes: - Preserve enum singleton identity through structural comparison, deep copy, JSON serialization, generated constructors, and reflected field assignment. - Compute init_property values once after FFI initialization, store them in reflected native memory, and exclude them from initialization and structural identity. - Route recognized __ffi_* hooks to type-attribute columns while allowing other marked FFI-prefixed and Python protocol methods. - Preserve nested __ffi_convert__ failures and field paths in conversion diagnostics, and accept internal Device and DataType carriers without wrapper assumptions. - Make FileLock report only contention as False, raise real filesystem errors, use explicit lock-file permissions, and measure timeouts monotonically. - Export ffi::Error on Windows and refine inline stubs and shared missing-value handling. Docs: - Document ObjectPtr ownership, container shorthand, qualifier limits, covariance, and null/optional semantics in the C++ language guide. - Document tree-by-default structural equality and explicit opt-out. - Document native payload-enum storage, singleton identity, deep-copy behavior, and scalar JSON round trips. - Keep FileLock, reflection-builder, and init_property details covered by API/source documentation and tests rather than dedicated guides. Tests: - Executed: uv pip install --force-reinstall --verbose --group test -e .; runtime-residue smoke checks. - Result: editable installation and smoke checks passed. - Executed: .venv/bin/python -m pytest -vvs tests/python/test_dataclass_py_class.py tests/python/test_dataclass_c_class.py tests/python/test_object.py. - Result: 508 tests passed. - Executed: clean Debug build of tvm_ffi_tests and the full CTest suite. - Result: the build passed; 444 enabled tests passed and 2 existing tests remained disabled. - Executed: uv run tvm-ffi-stubgen python; targeted pre-commit hooks; pre-commit run check-asf-header --all-files; targeted clang-tidy on the three changed public headers and Dict/List tests; git diff --check; and git diff --cached --check. - Result: all executed generation, lint, static-analysis, and diff checks passed. Untested Edge Cases: - Rust tests and the remainder of the Python test suite were not run locally. - Windows/MSVC, free-threaded Python, and non-host architectures were not exercised locally; CI remains responsible for platform coverage. BREAKING CHANGE: @py_class now uses structural_eq="tree" unless structural_eq=None is passed explicitly. IntEnum and StrEnum subclasses must stop declaring a value field and assign payloads through entry(value=) or variant literals. FileLock callers must handle RuntimeError for non-contention OS failures. Rebuild C++/Cython extensions so reflected behavior, enum ancestry, and native payload storage match the updated implementation. Refs: https://github.com/apache/tvm-ffi/pull/662 Report URL: https://github.com/apache/tvm-ffi/actions/runs/29266534473 With regards, GitHub Actions via GitBox --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
