# Matrix in SymbolicUtils?

how could I create, say a 2x2, symbolic matrix using SymbolicUtils? e.g. something like `[a11 a12; a21 a22]` where `aij` are symbols… I cannot find in the manual…

also, could I create a single symbol for a matrix e.g. `m`, and then access the element as a symbol like `m[1,2]` ?

thanks.

I think, you would want to use ModelingToolkit.jl for that, which uses SymbolicUtils under the hood. The relevant documentation for that would probably be in the `@variables` docstring. You could then write:

``````julia> using ModelingToolkit

julia> @variables a[1:2, 1:2]
(Operation[a₁ˏ₁ a₁ˏ₂; a₂ˏ₁ a₂ˏ₂],)
``````
2 Likes

a related question: if I’m doing symbolic calculations (e.g. determinant, inverse) of a matrix, is it easier to use `Reduce.jl` or `ModelingToolkit.jl`? thanks.

I can’t imagine it getting any simpler than ModelingToolkit. Just literally write the Julia code:

``````julia> using ModelingToolkit

julia> @variables u[1:3,1:3]
(Operation[u₁ˏ₁ u₁ˏ₂ u₁ˏ₃; u₂ˏ₁ u₂ˏ₂ u₂ˏ₃; u₃ˏ₁ u₃ˏ₂ u₃ˏ₃],)

julia> det(u)
(((1u₁ˏ₁) * (u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * ((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃))) * 1

julia> inv(u)
3×3 Array{Operation,2}:
u₁ˏ₁ \ ((identity(true) - u₁ˏ₃ * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) *
(identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true))))) - u₁ˏ₂ * ((u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)))))))  …  u₁ˏ₁ \ ((identity(0) - u₁ˏ₃ * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁
* inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0))))) - u₁ˏ₂ * ((u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)))))))

(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)))))

(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) \ ((identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) * (((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) *
u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)))))

((u₃ˏ₃ - (u₃ˏ₁ *
inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ -
(u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(0) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(true)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(true)))

((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃)) \ ((identity(true) - (u₃ˏ₁ * inv(u₁ˏ₁)) * identity(0)) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁))
* u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (identity(0) - (u₂ˏ₁ * inv(u₁ˏ₁)) * identity(0)))
``````

and simplify it if you need to:

``````julia> @time simplify.(inv(u))
0.225683 seconds (621.50 k allocations: 18.274 MiB)
3×3 Array{Operation,2}:
u₁ˏ₁ \ (true + -1 * (u₁ˏ₂ * ((-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) \ (-1 * inv(u₁ˏ₁) * u₂ˏ₁ + -1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ +
u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) * u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂))) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) + u₁ˏ₃ * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) * u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂)))))  …  u₁ˏ₁ \ (-1 *
u₁ˏ₂ * ((-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) \ (-1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) + -1 * u₁ˏ₃ * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1))

(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) \ (-1 * inv(u₁ˏ₁) * u₂ˏ₁ + -1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) *
u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁) * u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁
+ u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂))) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))

(-1 * inv(u₁ˏ₁) * u₁ˏ₂
* u₂ˏ₁ + u₂ˏ₂) \ (-1 * ((u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))

(u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ (-1 * inv(u₁ˏ₁) * u₃ˏ₁ + inv(u₁ˏ₁)
* u₂ˏ₁ * inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂))

(u₃ˏ₃ + -1 * (inv(u₁ˏ₁) * u₁ˏ₃ * u₃ˏ₁ + inv(-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₂ˏ₁ + u₂ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₂ * u₃ˏ₁ + u₃ˏ₂) * (-1 * inv(u₁ˏ₁) * u₁ˏ₃ * u₂ˏ₁ + u₂ˏ₃))) \ 1
``````
4 Likes

thanks.

seems that `SymbolicUtils.jl` and `ModelingToolkit.jl` are in pure `Julia` (is it true?) so that they could seamlessly integrated with `Julia`. On the other hand, seems that `Reduce.jl` is from a more mature system and has a more complete documentation.

for example, I cannot find in `ModelingToolkit` manual about how to get `v[1,2]` below:

``````julia> @variables u[1:3,1:3]
(Operation[u₁ˏ₁ u₁ˏ₂ u₁ˏ₃; u₂ˏ₁ u₂ˏ₂ u₂ˏ₃; u₃ˏ₁ u₃ˏ₂ u₃ˏ₃],)

julia> v = LinearAlgebra.det(u)
(((1u₁ˏ₁) * (u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * ((u₃ˏ₃ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃) - ((u₃ˏ₂ - (u₃ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂) * inv(u₂ˏ₂ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₂)) * (u₂ˏ₃ - (u₂ˏ₁ * inv(u₁ˏ₁)) * u₁ˏ₃))) * 1

julia> typeof(v)
Operation

julia> typeof(u)
Array{Operation,2}

julia> u[1,2]
u₁ˏ₂

julia> v[1,2]
ERROR: BoundsError
``````

or, did I miss any documentation besides SymbolicUtils and ModelingToolkit?

The determinant of a matrix is a scalar, so I don’t know what you’re indexing. That BoundsError is correct.

2 Likes

yes

Not necessarily. It has different stuff, but neither supersets the other.

oh my stupid! I was thinking matrix inverse

any suggestions? I afraid asking more stupid questions here like “how to bind a value into a symbol”, “how to evaluate a symbolic expressions”, etc…

Just ask. That’s the docs we have right now, it’ll get populated more by questions, and maybe people who read the answers will contribute answers back as well . A lot of the features are automatically generated, so actually documenting what it can do is a weird thing that’s more done in retrospect after figuring out how dispatch generates the features and what names people know that feature by.

1 Like

good for you to be so helpful

so I ask more questions now:

1. how to declare a symbolic complex number in the form of `x = a + jb` and `x = rcosθ + jrsinθ`? that is, `x`,`a`,`b`,`r`,`θ` are all symbols.
2. in the following, how do I arrange `p` as a polynomial in `L`?
3. then, how to get the coefficients of the polynomials?
4. in general, how do I manipulate a `SymbolicUtils.Term` object? should I transform it into a standard `Julia` expression (how?) and then transverse the expression tree?
``````julia> @syms L α₁ α₂
(L, α₁, α₂)

julia> p = (1 - L) * (1 - α₁ * L) * (1 - α₂ * L)
(1 + (-1 * L)) * (1 + (-1 * L * α₁)) * (1 + (-1 * L * α₂))
``````

many thanks!

Probably answers most of it:

``````using ModelingToolkit

@variables x a b r θ

x + im * a

x = r*cos(θ) + im*r*sin(θ)

x.op # +
x.args

2-element Array{Expression,1}:
r * cos(θ)
((im) * r) * sin(θ)
``````

@shashi would have to answer the polynomial part.

This is super cool! How would one generate a julia function based on this result? I can’t find an obvious way to do it in the docs.

Nevermind, I saw the tutorial. I think I was confused by the “Parallel” in the title…

``````julia> f_det = eval(ModelingToolkit.build_function( det(u), u ))
#6 (generic function with 1 method)

julia> A = rand(3,3);

julia> det(A)
-0.04382988531989483

julia> f_det(A)
-0.04382988531989484
``````

The first tutorial is titled " Symbolic Calculations and Building Fast Parallel Functions" . Let’s multithread it:

``````using ModelingToolkit
@variables u[1:3,1:3]
A = inv(u)
``````

which creates:

``````:((var"##MTIIPVar#82901", var"##MTKArg#82899")->begin
@inbounds begin
begin
(ModelingToolkit.fill_array_with_zero!)(var"##MTIIPVar#82901")
@sync begin
let (u₁ˏ₁, u₂ˏ₁, u₃ˏ₁, u₁ˏ₂, u₂ˏ₂, u₃ˏ₂, u₁ˏ₃, u₂ˏ₃, u₃ˏ₃) = (var"##MTKArg#82899"[1], var"##MTKArg#82899"[2], var"##MTKArg#82899"[3], var"##MTKArg#82899"[4], var"##MTKArg#82899"[5], var"##MTKArg#82899"[6], var"##MTKArg#82899"[7], var"##MTKArg#82899"[8], var"##MTKArg#82899"[9])
begin
var"##MTIIPVar#82901"[1] = (getproperty(Base, :\))(u₁ˏ₁, (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))(u₁ˏ₃, (getproperty(Base,
:\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true)))))))), (getproperty(Base, :*))(u₁ˏ₂, (getproperty(Base, :\))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))), (getproperty(Base,
:*))((getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base,
:inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base,
:*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))))))))))))
var"##MTIIPVar#82901"[2] = (getproperty(Base, :\))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))), (getproperty(Base, :*))((getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)),
(getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base,
:-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true)))))))))
var"##MTIIPVar#82901"[3] = (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base,
:*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)),
u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(true))))))
end
end
begin
var"##MTIIPVar#82901"[4] = (getproperty(Base, :\))(u₁ˏ₁, (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))(u₁ˏ₃, (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0)))))))), (getproperty(Base, :*))(u₁ˏ₂, (getproperty(Base, :\))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))))))))))))
var"##MTIIPVar#82901"[5] = (getproperty(Base, :\))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)),
(getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0)))))))))
var"##MTIIPVar#82901"[6] = (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base,
:*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))))))
end
end
begin
var"##MTIIPVar#82901"[7] = (getproperty(Base, :\))(u₁ˏ₁, (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))(u₁ˏ₃, (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0)))))))), (getproperty(Base, :*))(u₁ˏ₂, (getproperty(Base, :\))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))))))))))))
var"##MTIIPVar#82901"[8] = (getproperty(Base, :\))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :-))((getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0)))))))))
var"##MTIIPVar#82901"[9] = (getproperty(Base, :\))((getproperty(Base, :-))((getproperty(Base, :-))(u₃ˏ₃, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)))), (getproperty(Base, :-))(u₂ˏ₃, (getproperty(Base, :*))((getproperty(Base,
:*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₃)))), (getproperty(Base, :-))((getproperty(Base, :-))(identity(true), (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))), (getproperty(Base, :*))((getproperty(Base, :*))((getproperty(Base, :-))(u₃ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₃ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), u₁ˏ₂)), (getproperty(Base, :inv))((getproperty(Base, :-))(u₂ˏ₂, (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)),
u₁ˏ₂)))), (getproperty(Base, :-))(identity(0), (getproperty(Base, :*))((getproperty(Base, :*))(u₂ˏ₁, (getproperty(Base, :inv))(u₁ˏ₁)), identity(0))))))
end
end
begin
end
end
end
end
end
end
nothing
end)
``````
1 Like

This is very impressive!

What’s going on with the empty `Threads.@spawn begin end` towards the end?

It’s trying to do load balancing for my 4 cores, but it’s definitely not expensive enough to make good use of 4