-
Notifications
You must be signed in to change notification settings - Fork 30
Description
The slangpy.math library does not support all dimensions of matrix multiplication.
To reproduce using the following snippet,
import slangpy as sgl
spalt2world = sgl.float4x3([-0.0402, 0.0673, 0.0824, 0.0000, -0.0626, -0.0861, 0.0398, 0.0000, -4.8637, -1.1342, -6.3513, 1.0000,])
world2ndc = sgl.float4x4([-0.0724, 0.4652, 1.6573, 0.7338, -0.5483, 2.4286, -0.7057, 1.5564, -0.9765, -0.2153, 0.0178, 4.2501, -0.9764, -0.2153, 0.0178, 4.2597,])
ndc2pix = sgl.float4x3([628.0000, 0.0000, 0.0000, 627.5000, 0.0000, 414.0000, 0.0000, 413.5000, 0.0000, 0.0000, 0.0000, 1.0000,])
full_transformation1 = sgl.math.transpose(spalt2world) @ world2ndc @ ndc2pix
full_transformation2 = sgl.math.mul(sgl.math.transpose(spalt2world), world2ndc) @ ndc2pix
I got the warning and error
full_transformation1 = sgl.math.transpose(spalt2world) @ world2ndc @ ndc2pix ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
TypeError: unsupported operand type(s) for @: 'slangpy.math.float3x4' and 'slangpy.math.float4x4'
full_transformation2 = sgl.math.mul(sgl.math.mul(sgl.math.transpose(spalt2world), world2ndc), ndc2pix)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: mul(): incompatible function arguments. The following argument types are supported:
1. mul(x: slangpy.math.float2x2, y: slangpy.math.float2x2) -> slangpy.math.float2x2
2. mul(x: slangpy.math.float2x2, y: slangpy.math.float2) -> slangpy.math.float2
3. mul(x: slangpy.math.float2, y: slangpy.math.float2x2) -> slangpy.math.float2
4. mul(x: slangpy.math.float2x3, y: slangpy.math.float3x2) -> slangpy.math.float2x2
5. mul(x: slangpy.math.float2x3, y: slangpy.math.float3) -> slangpy.math.float2
6. mul(x: slangpy.math.float2, y: slangpy.math.float2x3) -> slangpy.math.float3
7. mul(x: slangpy.math.float2x4, y: slangpy.math.float4x2) -> slangpy.math.float2x2
8. mul(x: slangpy.math.float2x4, y: slangpy.math.float4) -> slangpy.math.float2
9. mul(x: slangpy.math.float2, y: slangpy.math.float2x4) -> slangpy.math.float4
10. mul(x: slangpy.math.float3x2, y: slangpy.math.float2x3) -> slangpy.math.float3x3
11. mul(x: slangpy.math.float3x2, y: slangpy.math.float2) -> slangpy.math.float3
12. mul(x: slangpy.math.float3, y: slangpy.math.float3x2) -> slangpy.math.float2
13. mul(x: slangpy.math.float3x3, y: slangpy.math.float3x3) -> slangpy.math.float3x3
14. mul(x: slangpy.math.float3x3, y: slangpy.math.float3) -> slangpy.math.float3
15. mul(x: slangpy.math.float3, y: slangpy.math.float3x3) -> slangpy.math.float3
16. mul(x: slangpy.math.float3x4, y: slangpy.math.float4x3) -> slangpy.math.float3x3
17. mul(x: slangpy.math.float3x4, y: slangpy.math.float4) -> slangpy.math.float3
18. mul(x: slangpy.math.float3, y: slangpy.math.float3x4) -> slangpy.math.float4
19. mul(x: slangpy.math.float4x2, y: slangpy.math.float2x4) -> slangpy.math.float4x4
20. mul(x: slangpy.math.float4x2, y: slangpy.math.float2) -> slangpy.math.float4
21. mul(x: slangpy.math.float4, y: slangpy.math.float4x2) -> slangpy.math.float2
22. mul(x: slangpy.math.float4x3, y: slangpy.math.float3x4) -> slangpy.math.float4x4
23. mul(x: slangpy.math.float4x3, y: slangpy.math.float3) -> slangpy.math.float4
24. mul(x: slangpy.math.float4, y: slangpy.math.float4x3) -> slangpy.math.float3
25. mul(x: slangpy.math.float4x4, y: slangpy.math.float4x4) -> slangpy.math.float4x4
26. mul(x: slangpy.math.float4x4, y: slangpy.math.float4) -> slangpy.math.float4
27. mul(x: slangpy.math.float4, y: slangpy.math.float4x4) -> slangpy.math.float4
28. mul(x: slangpy.math.quatf, y: slangpy.math.quatf) -> slangpy.math.quatf
29. mul(x: slangpy.math.quatf, y: slangpy.math.float3) -> slangpy.math.float3Invoked with types: slangpy.math.float3x4, slangpy.math.float4x4
It appears that the math library's dimensional support for matrix multiplication is incomplete, which may also include other vector and matrix calculations. Currently, it can only be used to construct slangpy variables by passing the results calculated using NumPy.
I'm not sure if this is intentional, but it's important to clarify the functional scope and basic guarantees of the slangpy.math library.