﻿:: { T:i8[*,3], U:s[*,3] }
T->Add(U)
T->Sub(U)
T->Mul(U)
T->Min(U)
T->Max(U)
T->Div(U)
T->Divide(U)

U->Add(T)
U->Sub(T)
U->Mul(T)
U->Min(T)
U->Max(T)
U->Div(T)
U->Divide(T)

U->Add(U)
U->Sub(U)
U->Mul(U)
U->Min(U)
U->Max(U)
U->Div(U)
U->Divide(U)

:: { T:i8[*,3], Ts:i8[*,3]*, QT:i8[*,3]?, QTs:i8[*,3]?*, U:i4[*,3], V:s[*,3], R:{A:i4}, i4:i4 }

T->Add(T)
T->Add(Ts)
T->Add(QT)
T->Add(QTs)
T->Add(U)
T->Add(V)
T->Add(R)
T->Add(i4)

Ts->Add(T)
Ts->Add(Ts)
Ts->Add(QT)
Ts->Add(QTs)
Ts->Add(U)
Ts->Add(V)
Ts->Add(R)
Ts->Add(i4)

QT->Add(T)
QT->Add(Ts)
QT->Add(QT)
QT->Add(QTs)
QT->Add(U)
QT->Add(V)
QT->Add(R)
QT->Add(i4)

T->Sub(T)
T->Sub(Ts)
T->Sub(QT)
T->Sub(QTs)
T->Sub(U)
T->Sub(V)
T->Sub(R)
T->Sub(i4)

Ts->Sub(T)
Ts->Sub(Ts)
Ts->Sub(QT)
Ts->Sub(QTs)
Ts->Sub(U)
Ts->Sub(V)
Ts->Sub(R)
Ts->Sub(i4)

QT->Sub(T)
QT->Sub(Ts)
QT->Sub(QT)
QT->Sub(QTs)
QT->Sub(U)
QT->Sub(V)
QT->Sub(R)
QT->Sub(i4)

T->Mul(T)
T->Mul(Ts)
T->Mul(QT)
T->Mul(QTs)
T->Mul(U)
T->Mul(V)
T->Mul(R)
T->Mul(i4)

Ts->Mul(T)
Ts->Mul(Ts)
Ts->Mul(QT)
Ts->Mul(QTs)
Ts->Mul(U)
Ts->Mul(V)
Ts->Mul(R)
Ts->Mul(i4)

QT->Mul(T)
QT->Mul(Ts)
QT->Mul(QT)
QT->Mul(QTs)
QT->Mul(U)
QT->Mul(V)
QT->Mul(R)
QT->Mul(i4)

T->Min(T)
T->Min(Ts)
T->Min(QT)
T->Min(QTs)
T->Min(U)
T->Min(V)
T->Min(R)
T->Min(i4)

Ts->Min(T)
Ts->Min(Ts)
Ts->Min(QT)
Ts->Min(QTs)
Ts->Min(U)
Ts->Min(V)
Ts->Min(R)
Ts->Min(i4)

QT->Min(T)
QT->Min(Ts)
QT->Min(QT)
QT->Min(QTs)
QT->Min(U)
QT->Min(V)
QT->Min(R)
QT->Min(i4)

T->Max(T)
T->Max(Ts)
T->Max(QT)
T->Max(QTs)
T->Max(U)
T->Max(V)
T->Max(R)
T->Max(i4)

Ts->Max(T)
Ts->Max(Ts)
Ts->Max(QT)
Ts->Max(QTs)
Ts->Max(U)
Ts->Max(V)
Ts->Max(R)
Ts->Max(i4)

QT->Max(T)
QT->Max(Ts)
QT->Max(QT)
QT->Max(QTs)
QT->Max(U)
QT->Max(V)
QT->Max(R)
QT->Max(i4)

T->Div(T)
T->Div(Ts)
T->Div(QT)
T->Div(QTs)
T->Div(U)
T->Div(V)
T->Div(R)
T->Div(i4)

Ts->Div(T)
Ts->Div(Ts)
Ts->Div(QT)
Ts->Div(QTs)
Ts->Div(U)
Ts->Div(V)
Ts->Div(R)
Ts->Div(i4)

QT->Div(T)
QT->Div(Ts)
QT->Div(QT)
QT->Div(QTs)
QT->Div(U)
QT->Div(V)
QT->Div(R)
QT->Div(i4)

Tensor.Add(i4,T)
Tensor.Sub(i4,T)
Tensor.Mul(i4,T)
Tensor.Min(i4,T)
Tensor.Max(i4,T)
Tensor.Div(i4,T)

Tensor.Add(i4,i4)
Tensor.Sub(i4,i4)
Tensor.Mul(i4,i4)
Tensor.Min(i4,i4)
Tensor.Max(i4,i4)
Tensor.Div(i4,i4)

:: { T:r8[*,3], Ts:r8[*,3]*, QT:r8[*,3]?, QTs:r8[*,3]?*, U:r4[*,3], V:s[*,3], R:{A:i4}, i4:i4, r4:r4 }

T->Divide(T)
T->Divide(Ts)
T->Divide(QT)
T->Divide(QTs)
T->Divide(U)
T->Divide(V)
T->Divide(R)
T->Divide(r4)
T->Divide(i4)

Ts->Divide(T)
Ts->Divide(Ts)
Ts->Divide(QT)
Ts->Divide(QTs)
Ts->Divide(U)
Ts->Divide(V)
Ts->Divide(R)
Ts->Divide(r4)
Ts->Divide(i4)

QT->Divide(T)
QT->Divide(Ts)
QT->Divide(QT)
QT->Divide(QTs)
QT->Divide(U)
QT->Divide(V)
QT->Divide(R)
QT->Divide(r4)
QT->Divide(i4)

Tensor.Divide(i4, T)
Tensor.Divide(r4, T)
Tensor.Divide(i4, i4)
Tensor.Divide(r4, r4)

:: { Ti1:i1[4,2], Ti2:i2[4,2], Ti4:i4[4,2], Ti8:i8[4,2], Tu1:u1[4,2], Tu2:u2[4,2], Tu4:u4[4,2], Tu8:u8[4,2], Tr4:r4[4,2], Tr8:r8[4,2] }
Ti1->Div(Ti1)
Ti2->Div(Ti2)
Ti4->Div(Ti4)
Ti8->Div(Ti8)
Tu1->Div(Tu1)
Tu2->Div(Tu2)
Tu4->Div(Tu4)
Tu8->Div(Tu8)
Tr4->Div(Tr4)
Tr8->Div(Tr8)

Ti1->Divide(Ti1)
Ti2->Divide(Ti2)
Ti4->Divide(Ti4)
Ti8->Divide(Ti8)
Tu1->Divide(Tu1)
Tu2->Divide(Tu2)
Tu4->Divide(Tu4)
Tu8->Divide(Tu8)
Tr4->Divide(Tr4)
Tr8->Divide(Tr8)

:: { T:i8[4,2], U:i8[4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:r4[4,2], U:r4[4,2] }
T->Divide(U)
U->Divide(T)

:: { T:i4[3,4,2], U:i4[3,4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:r4[3,4,2], U:r4[3,4,2] }
T->Divide(U)
U->Divide(T)

:: { T:i8[4,2], U:i4[4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:r8[4,2], U:r4[4,2] }
T->Divide(U)
U->Divide(T)

:: { T:i8[2], U:i8[4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[2], U:i8[2,4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[1,2], U:i8[2,4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[4,3], U:i8[4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[4,3], U:i8[2,3] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[4,0], U:i8[1,0] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[4,0], U:i8[2,3] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[0,4,3], U:i8[4,3] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[*,3], U:i8[4,2,3] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[1,*], U:i8[2,4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[1,*], U:i8[2,*,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[*], U:i8[*,*] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)

:: { T:i8[], U:i8[4,2] }
T->Add(U)
U->Add(T)
T->Sub(U)
U->Sub(T)
T->Mul(U)
U->Mul(T)
T->Min(U)
U->Min(T)
T->Max(U)
U->Max(T)
T->Div(U)
U->Div(T)
