Update 5.1 conformance tests with memoryview and euler, improve conformance output

- Enable memoryview() tests in 5.1 conformance (Python 3.13 supports __buffer__)
- Add test_mathutils_euler.py for 5.1 conformance
- Show Python version in conformance check output

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Joseph HENRY 2026-03-27 18:25:34 +01:00
parent 8ef75df9eb
commit f0affebaa3
6 changed files with 47 additions and 9 deletions

View File

@ -33,5 +33,5 @@ print(
) )
) )
# Direct buffer access is supported at runtime via C buffer protocol # Direct buffer access is supported.
# but not expressible in type stubs (requires Python 3.12+ __buffer__). print(memoryview(col).tobytes())

View File

@ -0,0 +1,35 @@
import mathutils
import math
# Create a new euler with default axis rotation order.
eul = mathutils.Euler((0.0, math.radians(45.0), 0.0), "XYZ")
# Rotate the euler.
eul.rotate_axis("Z", math.radians(10.0))
# You can access its components by attribute or index.
print("Euler X", eul.x)
print("Euler Y", eul[1])
print("Euler Z", eul[-1])
# Components of an existing euler can be set.
eul[:] = 1.0, 2.0, 3.0
# Components of an existing euler can use slice notation to get a tuple.
print("Values: {:f}, {:f}, {:f}".format(*eul))
# The order can be set at any time too.
eul.order = "ZYX"
# Eulers can be used to rotate vectors.
vec = mathutils.Vector((0.0, 0.0, 1.0))
vec.rotate(eul)
# Often its useful to convert the euler into a matrix so it can be used as
# transformations with more flexibility.
mat_rot = eul.to_matrix()
mat_loc = mathutils.Matrix.Translation((2.0, 3.0, 4.0))
mat = mat_loc @ mat_rot.to_4x4()
# Direct buffer access is supported.
print(memoryview(eul).tobytes())

View File

@ -31,5 +31,5 @@ mat[0][0:3] = 0.0, 1.0, 2.0
# Each item in a matrix is a vector so vector utility functions can be used. # Each item in a matrix is a vector so vector utility functions can be used.
mat[0].xyz = 0.0, 1.0, 2.0 mat[0].xyz = 0.0, 1.0, 2.0
# Direct buffer access is supported at runtime via C buffer protocol # Direct buffer access is supported.
# but not expressible in type stubs (requires Python 3.12+ __buffer__). print(memoryview(mat).tobytes())

View File

@ -36,5 +36,5 @@ quat_avg = mathutils.Quaternion(exp_avg)
print("Average rotation:") print("Average rotation:")
print(quat_avg) print(quat_avg)
# Direct buffer access is supported at runtime via C buffer protocol # Direct buffer access is supported.
# but not expressible in type stubs (requires Python 3.12+ __buffer__). print(memoryview(quat_avg).tobytes())

View File

@ -54,5 +54,5 @@ vec.xy = vec4d.zw
vec.xyz = vec4d.wzz vec.xyz = vec4d.wzz
vec4d.wxyz = vec.yxyx vec4d.wxyz = vec.yxyx
# Direct buffer access is supported at runtime via C buffer protocol # Direct buffer access is supported.
# but not expressible in type stubs (requires Python 3.12+ __buffer__). raw_data = memoryview(vec).tobytes()

View File

@ -433,7 +433,6 @@ def conformance_check(versions: list[str] | None = None) -> None:
for version in versions: for version in versions:
version_dir = dist_dir / version version_dir = dist_dir / version
test_dir = conformance_dir / version test_dir = conformance_dir / version
print(f"=== Conformance check against Blender {version} stubs ===")
python_version_file = version_dir / ".python-version" python_version_file = version_dir / ".python-version"
python_version = ( python_version = (
@ -442,6 +441,10 @@ def conformance_check(versions: list[str] | None = None) -> None:
else "3.11" else "3.11"
) )
print(
f"=== Conformance check against Blender {version} stubs with Python {python_version} ==="
)
config = version_dir / "pyrightconfig.conformance.json" config = version_dir / "pyrightconfig.conformance.json"
config.write_text( config.write_text(
json.dumps( json.dumps(