#
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**

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:

Andrew HaleAdded 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

Bastien MontagneNot 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 using`vector * vector`

which matches numpy.The current API allows for

`matrix * vector`

and`vector * 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).