Python: Add support for @ infix operator matrix multiplication #56276
Closed
opened 2018-08-08 17:00:18 +02:00 by Andrew Hale
·
9 comments
No Branch/Tag Specified
main
blender-v3.6-release
asset-shelf
blender-v3.5-release
brush-assets-project
blender-v2.93-release
blender-v3.3-release
blender-v3.4-release
xr-dev
blender-v3.2-release
blender-v3.1-release
screenshots-manual
gltf_vtree
blender-v2.83-release
blender-v3.0-release
xr-controller-support
studio-sprite-fright
asset-browser-poselib
blender-v2.92-release
blender-v2.91-release
blender-v2.90-release
greasepencil-addon
xr-world-navigation
soc-2019-openxr
blender-v2.82-release
blender-v2.81-release
filebrowser_redesign
blender-v2.80-release
blender2.7
blender-v2.79b-release
blender-v2.79a-release
blender-v2.79-release
fbx_experiments
blender-v2.78b-release
collada-2
blender-v2.78-release
rigify_fixes
fbx_io_export_ignore_parents
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76a
v2.76
v2.76-rc3
v2.76-rc1
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72
v2.72-rc1
v2.71
v2.71-rc1
v2.70a
v2.70
v2.70-rc
v2.69
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.62
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
Labels
Clear labels
Apply labels
Interest
Animation & Rigging
Interest
Blender Cloud
Interest
Collada
Interest
Core
Interest
Documentation
Interest
Eevee & Viewport
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
Import and Export
Interest
Modeling
Interest
Modifiers
Interest
Nodes & Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds, Tests & Devices
Interest
Python API
Interest
Rendering & Cycles
Interest
Sculpt, Paint & Texture
Interest
Translations
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Meta
Good First Issue
Meta
Papercut
Module
Add-ons (BF-Blender)
Module
Add-ons (Community)
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Label
Interest
Animation & Rigging
Interest
Blender Cloud
Interest
Collada
Interest
Core
Interest
Documentation
Interest
Eevee & Viewport
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
Import and Export
Interest
Modeling
Interest
Modifiers
Interest
Nodes & Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds, Tests & Devices
Interest
Python API
Interest
Rendering & Cycles
Interest
Sculpt, Paint & Texture
Interest
Translations
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Meta
Good First Issue
Meta
Papercut
Module
Add-ons (BF-Blender)
Module
Add-ons (Community)
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender-addons#56276
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
This subtask is to add support for the @ infix operator in python for matrix multiplication. The following combinations are permitted:
The subtask also covers element-wise multiplication but will be disabled. This will allow current usage of * for matrix multiplication in scripts to be identified and transitioned before the change to element-wise multiplication is introduced. A notable exception to this is that constant * matrix/vector/quaternion (and vice versa) is still permitted. The combinations to be supported are:
Added subscribers: @truman, @brita, @NumesSanguis-3, @JacquesLucke, @intrah, @gfxcoder, @vitorbalbio-3, @nathanvollmer, @monique, @Jeroen-Bakker, @lvxejay, @jta, @bliblubli, @Januz, @satishgoda1, @KerimBorchaev, @RayMairlot, @Ko, @Sergey, @VukGardasevic, @mano-wii, @JamesCrowther, @StephenSwaney, @jasperge-2, @dfelinto, @BrianSavery, @dr.sybren, @tetha.z, @MikeErwin, @BrendonMurphy, @mont29, @ideasman42
Not sure why that’s assigned to me… Guess @ideasman42 will want to check on that?
I suggest to leave this one out, since Blender uses column vector convention. Having it, could confuse people as to the order of multiplication of the matrices.
Vector @ Matrix (vector interpreted as row vector)
This one usually goes component-wise in shading languages.
Vector @ Vector (dot product)
I think it can be potentially confusing which operation it does ( I would write dot or cross explicitly always and for component-wise I wouldn't even know what to write, since that's usually the default.) You wouln't use vector-vector multiplication inline with matrix multiplications of transform code.
@brita / @truman, what about following numpy conventions for cases which are disputable?
@brita / @ideasman42
As per review comments on D3587, I've also implemented:
matrix @= matrix
matrix *= matrix/float
quat @= quat
quat *= quat/float
This seems like a reasonable approach. See below code, both numpy and mathutils produce the dot product for
vector @ vector
. Eventually element-wise multiplication will be exposed usingvector * vector
which matches numpy.The current API allows for
matrix * vector
andvector * matrix
, so it shouldn't introduce any additional confusion. Both are valid in numpy and produce the same results as mathutils (see below). Are we happy to maintain the status quo and allow both?If at least vector * vector doesn't do a dot product, I'm happy ^^
I wasn't aware of the @ possibility and I am also not familiar with numpy, but it definitely sounds like a good idea to follow a similar convention :)
Changed status from 'Open' to: 'Resolved'
Implemented in blender/blender@aa5a96430e
Note that this is now enabled in master (for 2.90 release).