Skip to content

Latest commit

 

History

History
1915 lines (1103 loc) · 57.4 KB

array.rst

File metadata and controls

1915 lines (1103 loc) · 57.4 KB

array

.. rst-class:: mini-api

:mini:`meth (A: any) != (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A != Bᵥ then 1 else 0 end`.
:mini:`meth (A: any) * (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A * Bᵥ`.

let B := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 * B :> <<2 4> <6 8>>
:mini:`meth (A: any) + (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A + Bᵥ`.

let B := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 + B :> <<3 4> <5 6>>
:mini:`meth (A: any) - (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A - Bᵥ`.

let B := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 - B :> <<1 0> <-1 -2>>
:mini:`meth (A: any) / (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A / Bᵥ`.

let B := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 / B :> <<2 1> <0.666667 0.5>>
:mini:`meth (A: any) < (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A < Bᵥ then 1 else 0 end`.
:mini:`meth (A: any) <= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A <= Bᵥ then 1 else 0 end`.
:mini:`meth (A: any) = (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A = Bᵥ then 1 else 0 end`.
:mini:`meth (A: any) > (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A > Bᵥ then 1 else 0 end`.
:mini:`meth (A: any) >= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A >= Bᵥ then 1 else 0 end`.
:mini:`type array < address, sequence`
Base type for multidimensional arrays.
:mini:`fun array(List: list): array`
Returns a new array containing the values in :mini:`List`. The shape and type of the array is determined from the elements in :mini:`List`.
:mini:`fun array::hcat(Array₁: array, ...): array`

Returns a new array with the values of :mini:`Array₁, ..., Arrayₙ` concatenated along the last dimension.

let A := $[[1, 2, 3], [4, 5, 6]] :> <<1 2 3> <4 5 6>>
let B := $[[7, 8, 9], [10, 11, 12]]
:> <<7 8 9> <10 11 12>>
array::hcat(A, B) :> <<1 2 3 7 8 9> <4 5 6 10 11 12>>
:mini:`fun array::vcat(Array₁: array, ...): array`

Returns a new array with the values of :mini:`Array₁, ..., Arrayₙ` concatenated along the first dimension.

let A := $[[1, 2, 3], [4, 5, 6]] :> <<1 2 3> <4 5 6>>
let B := $[[7, 8, 9], [10, 11, 12]]
:> <<7 8 9> <10 11 12>>
array::vcat(A, B) :> <<1 2 3> <4 5 6> <7 8 9> <10 11 12>>
:mini:`meth (A: array) != (B: any): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ != B then 1 else 0 end`.
:mini:`meth (A: array) != (B: complex): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ != B then 1 else 0 end`.
:mini:`meth (A: array) != (B: integer): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ != B then 1 else 0 end`.
:mini:`meth (A: array) != (B: real): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ != B then 1 else 0 end`.
:mini:`meth (A: array) !== (B: array): integer`
Compare the degrees, dimensions and entries of :mini:`A` and :mini:`B` and returns :mini:`nil` if they match and :mini:`B` otherwise.
:mini:`meth (A: array) * (B: any): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ * B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A * 2 :> <<2 4> <6 8>>
:mini:`meth (A: array) * (B: array): array`

Returns :mini:`A * B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A * B :> <<7 16 27> <40 55 72>>
B * A :> <<7 16 27> <40 55 72>>
A * C :> <<5 20 45> <20 50 90>>
C * A :> <<5 20 45> <20 50 90>>
B * C :> <<35 80 135> <50 110 180>>
C * B :> <<35 80 135> <50 110 180>>
:mini:`meth (A: array) ** (B: array): array`

Returns an array with :mini:`Aᵢ * Bⱼ` for each pair of elements of :mini:`A` and :mini:`B`. The result will have shape :mini:`A:shape + B:shape`.

let A := array([1, 8, 3]) :> <1 8 3>
let B := array([[7, 2], [4, 11]]) :> <<7 2> <4 11>>
A:shape :> [3]
B:shape :> [2, 2]
let C := A ** B
:> <<<7 2> <4 11>> <<56 16> <32 88>> <<21 6> <12 33>>>
C:shape :> [3, 2, 2]
:mini:`meth (A: array) + (B: any): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ + B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A + 2 :> <<3 4> <5 6>>
:mini:`meth (A: array) + (B: array): array`

Returns :mini:`A + B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A + B :> <<8 10 12> <14 16 18>>
B + A :> <<8 10 12> <14 16 18>>
A + C :> <<6 12 18> <9 15 21>>
C + A :> <<6 12 18> <9 15 21>>
B + C :> <<12 18 24> <15 21 27>>
C + B :> <<12 18 24> <15 21 27>>
:mini:`meth (A: array) ++ (B: array): array`

Returns an array with :mini:`Aᵢ + Bⱼ` for each pair of elements of :mini:`A` and :mini:`B`. The result will have shape :mini:`A:shape + B:shape`.

let A := array([1, 8, 3]) :> <1 8 3>
let B := array([[7, 2], [4, 11]]) :> <<7 2> <4 11>>
A:shape :> [3]
B:shape :> [2, 2]
let C := A ++ B
:> <<<8 3> <5 12>> <<15 10> <12 19>> <<10 5> <7 14>>>
C:shape :> [3, 2, 2]
:mini:`meth -(Array: array): array`
Returns an array with the negated values from :mini:`Array`.
:mini:`meth (A: array) - (B: any): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ - B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A - 2 :> <<-1 0> <1 2>>
:mini:`meth (A: array) - (B: array): array`

Returns :mini:`A - B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A - B :> <<-6 -6 -6> <-6 -6 -6>>
B - A :> <<6 6 6> <6 6 6>>
A - C :> <<-4 -8 -12> <-1 -5 -9>>
C - A :> <<4 8 12> <1 5 9>>
B - C :> <<2 -2 -6> <5 1 -3>>
C - B :> <<-2 2 6> <-5 -1 3>>
:mini:`meth (A: array) -- (B: array): array`

Returns an array with :mini:`Aᵢ - Bⱼ` for each pair of elements of :mini:`A` and :mini:`B`. The result will have shape :mini:`A:shape + B:shape`.

let A := array([1, 8, 3]) :> <1 8 3>
let B := array([[7, 2], [4, 11]]) :> <<7 2> <4 11>>
A:shape :> [3]
B:shape :> [2, 2]
let C := A -- B
:> <<<-6 -1> <-3 -10>> <<1 6> <4 -3>> <<-4 1> <-1 -8>>>
C:shape :> [3, 2, 2]
:mini:`meth (A: array) . (B: array): array`
Returns the inner product of :mini:`A` and :mini:`B`. The last dimension of :mini:`A` and the first dimension of :mini:`B` must match, skipping any dimensions of size :mini:`1`.
:mini:`meth (A: array) / (B: any): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ / B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A / 2 :> <<0.5 1> <1.5 2>>
:mini:`meth (A: array) / (B: array): array`

Returns :mini:`A / B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A / B :> <<0.142857 0.25 0.333333> <0.4 0.454545 0.5>>
B / A :> <<7 4 3> <2.5 2.2 2>>
A / C :> <<0.2 0.2 0.2> <0.8 0.5 0.4>>
C / A :> <<5 5 5> <1.25 2 2.5>>
B / C :> <<1.4 0.8 0.6> <2 1.1 0.8>>
C / B :> <<0.714286 1.25 1.66667> <0.5 0.909091 1.25>>
:mini:`meth (A: array) // (B: array): array`

Returns an array with :mini:`Aᵢ / Bⱼ` for each pair of elements of :mini:`A` and :mini:`B`. The result will have shape :mini:`A:shape + B:shape`.

let A := array([1, 8, 3]) :> <1 8 3>
let B := array([[7, 2], [4, 11]]) :> <<7 2> <4 11>>
A:shape :> [3]
B:shape :> [2, 2]
let C := A // B
:> <<<0.142857 0.5> <0.25 0.0909091>> <<1.14286 4> <2 0.727273>> <<0.428571 1.5> <0.75 0.272727>>>
C:shape :> [3, 2, 2]
:mini:`meth (A: array) /\\ (B: array): array`

Returns :mini:`A /\ B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A /\ B :> <<1 0 1> <0 1 4>>
B /\ A :> <<1 0 1> <0 1 4>>
A /\ C :> <<1 2 3> <4 0 6>>
C /\ A :> <<1 2 3> <4 0 6>>
B /\ C :> <<5 8 9> <0 10 12>>
C /\ B :> <<5 8 9> <0 10 12>>
:mini:`meth (A: array) /\\ (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ bitwise and B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A /\ 2 :> <<0 2> <2 0>>
:mini:`meth (A: array) < (B: any): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ < B then 1 else 0 end`.
:mini:`meth (A: array) < (B: complex): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ < B then 1 else 0 end`.
:mini:`meth (A: array) < (B: integer): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ < B then 1 else 0 end`.
:mini:`meth (A: array) < (B: real): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ < B then 1 else 0 end`.
:mini:`meth (A: array) <= (B: any): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ <= B then 1 else 0 end`.
:mini:`meth (A: array) <= (B: complex): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ <= B then 1 else 0 end`.
:mini:`meth (A: array) <= (B: integer): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ <= B then 1 else 0 end`.
:mini:`meth (A: array) <= (B: real): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ <= B then 1 else 0 end`.
:mini:`meth (A: array) <> (B: array): integer`
Compare the degrees, dimensions and entries of :mini:`A` and :mini:`B` and returns :mini:`-1`, :mini:`0` or :mini:`1`. This method is only intending for sorting arrays or using them as keys in a map.
:mini:`meth (A: array) = (B: any): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ = B then 1 else 0 end`.
:mini:`meth (A: array) = (B: complex): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ = B then 1 else 0 end`.
:mini:`meth (A: array) = (B: integer): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ = B then 1 else 0 end`.
:mini:`meth (A: array) = (B: real): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ = B then 1 else 0 end`.
:mini:`meth (A: array) == (B: array): integer`
Compare the degrees, dimensions and entries of :mini:`A` and :mini:`B` and returns :mini:`B` if they match and :mini:`nil` otherwise.
:mini:`meth (A: array) > (B: any): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ > B then 1 else 0 end`.
:mini:`meth (A: array) > (B: complex): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ > B then 1 else 0 end`.
:mini:`meth (A: array) > (B: integer): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ > B then 1 else 0 end`.
:mini:`meth (A: array) > (B: real): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ > B then 1 else 0 end`.
:mini:`meth (A: array) >< (B: array): array`

Returns :mini:`A >< B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A >< B :> <<7 10 11> <14 15 14>>
B >< A :> <<7 10 11> <14 15 14>>
A >< C :> <<5 10 15> <5 15 15>>
C >< A :> <<5 10 15> <5 15 15>>
B >< C :> <<7 10 15> <15 11 15>>
C >< B :> <<7 10 15> <15 11 15>>
:mini:`meth (A: array) >< (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ bitwise xor B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A >< 2 :> <<3 0> <1 6>>
:mini:`meth (A: array) >= (B: any): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ >= B then 1 else 0 end`.
:mini:`meth (A: array) >= (B: complex): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ >= B then 1 else 0 end`.
:mini:`meth (A: array) >= (B: integer): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ >= B then 1 else 0 end`.
:mini:`meth (A: array) >= (B: real): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if Aᵥ >= B then 1 else 0 end`.
:mini:`meth (Array: array)[Index₁: any, ...]: array`

Returns a sub-array of :mini:`Array` sharing the underlying data, indexed by :mini:`Indexᵢ`. Dimensions are copied to the output array, applying the indices as follows:

If fewer than :mini:`A:degree` indices are provided then the remaining dimensions are copied unchanged.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A[1] :> <<19 16 12> <4 7 20>>
A[1, 2] :> <4 7 20>
A[1, 2, 3] :> 20
A[nil, 2] :> <<4 7 20> <20 9 20>>
A[.., 3] :> <<12 20> <8 20>>
A[.., 1 .. 2] :> <<<19 16> <4 7>> <<5 17> <20 9>>>
A[(1, 2, 3)] :> 20
A[[(1, 2, 3), (2, 1, 1)]] :> <20 5>
let B := A > 10 :> <<<1 1 1> <0 0 1>> <<0 1 0> <1 0 1>>>
type(B) :> <<array::mutable::int8>>
A[B] :> <19 16 12 20 17 20 20>
let C := A:maxidx(2) :> <<2 3> <2 1>>
type(C) :> <<matrix::mutable::int32>>
A[C] :> <20 20>
:mini:`meth (Array: array)[Indices: map]: array`
Returns a sub-array of :mini:`Array` sharing the underlying data. The :mini:`i`-th dimension is indexed by :mini:`Indices[i]` if present, and :mini:`nil` otherwise.
:mini:`meth (A: array) \\/ (B: array): array`

Returns :mini:`A \/ B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A \/ B :> <<7 10 11> <14 15 14>>
B \/ A :> <<7 10 11> <14 15 14>>
A \/ C :> <<5 10 15> <5 15 15>>
C \/ A :> <<5 10 15> <5 15 15>>
B \/ C :> <<7 10 15> <15 11 15>>
C \/ B :> <<7 10 15> <15 11 15>>
:mini:`meth (A: array) \\/ (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ bitwise or B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A \/ 2 :> <<3 2> <3 6>>
:mini:`meth ^(Array: array): array`

Returns the transpose of :mini:`Array`, sharing the underlying data.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
^A :> <<1 4> <2 5> <3 6>>
:mini:`meth (Array: array):copy: array`
Return a new array with the same values of :mini:`Array` but not sharing the underlying data.
:mini:`meth (Array: array):copy(Function: function): array`
Return a new array with the results of applying :mini:`Function` to each value of :mini:`Array`.
:mini:`meth (Array: array):count: integer`

Return the number of elements in :mini:`Array`.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:count :> 6
:mini:`meth (Array: array):degree: integer`

Return the degree of :mini:`Array`.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:degree :> 2
:mini:`meth (Array: array):expand(Indices: list): array`
Returns an array sharing the underlying data with :mini:`Array` with additional unit-length axes at the specified :mini:`Indices`.
:mini:`meth (Array: array):join(Start: integer, Count: integer): array`
Returns an array sharing the underlying data with :mini:`Array` replacing the dimensions at :mini:`Start .. (Start + Count)` with a single dimension with the same overall size.
:mini:`meth (A: array):max(B: array): array`

Returns :mini:`A max B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A max B :> <<7 8 9> <10 11 12>>
B max A :> <<7 8 9> <10 11 12>>
A max C :> <<5 10 15> <5 10 15>>
C max A :> <<5 10 15> <5 10 15>>
B max C :> <<7 10 15> <10 11 15>>
C max B :> <<7 10 15> <10 11 15>>
:mini:`meth (A: array):max(B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := max(Aᵥ, B)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A max 2 :> <<2 2> <3 4>>
:mini:`meth (A: array):max(B: real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := max(Aᵥ, B)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A max 2.5 :> <<2.5 2.5> <3 4>>
:mini:`meth (Array: array):maxidx: array`

Returns a new array with the indices of maximums of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:maxidx :> <1 2 3>
:mini:`meth (Array: array):maxidx(Count: integer): array`

Returns a new array with the indices of maximums of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:maxidx(1) :> <<<1> <3>> <<2> <1>>>
A:maxidx(2) :> <<2 3> <2 1>>
:mini:`meth (Array: array):maxval: number`

Returns the maximum of the values in :mini:`Array`.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:maxval :> 20
:mini:`meth (Array: array):maxval(Count: integer): array`

Returns a new array with the maximums of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:maxval(1) :> <<19 20> <17 20>>
A:maxval(2) :> <20 20>
:mini:`meth (A: array):min(B: array): array`

Returns :mini:`A min B` (element-wise). The shapes of :mini:`A` and :mini:`B` must be compatible, i.e. either

When the shapes are not the same, remaining dimensions are repeated (broadcast) to the required size.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
let B := array([[7, 8, 9], [10, 11, 12]])
:> <<7 8 9> <10 11 12>>
let C := array([5, 10, 15]) :> <5 10 15>
A min B :> <<1 2 3> <4 5 6>>
B min A :> <<1 2 3> <4 5 6>>
A min C :> <<1 2 3> <4 5 6>>
C min A :> <<1 2 3> <4 5 6>>
B min C :> <<5 8 9> <5 10 12>>
C min B :> <<5 8 9> <5 10 12>>
:mini:`meth (A: array):min(B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := min(Aᵥ, B)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A min 2 :> <<1 2> <2 2>>
:mini:`meth (A: array):min(B: real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := min(Aᵥ, B)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A min 2.5 :> <<1 2> <2.5 2.5>>
:mini:`meth (Array: array):minidx: array`

Returns a new array with the indices of minimums of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:minidx :> <1 2 1>
:mini:`meth (Array: array):minidx(Count: integer): array`

Returns a new array with the indices of minimums of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:minidx(1) :> <<<3> <1>> <<1> <2>>>
A:minidx(2) :> <<2 1> <1 1952671094>>
:mini:`meth (Array: array):minval: number`

Returns the minimum of the values in :mini:`Array`.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:minval :> 4
:mini:`meth (Array: array):minval(Count: integer): array`

Returns a new array with the minimums :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[[19, 16, 12], [4, 7, 20]], [[5, 17, 8], [20, 9, 20]]])
A:minval(1) :> <<12 4> <5 9>>
A:minval(2) :> <4 5>
:mini:`meth (Array: array):permute(Indices: integer, ...): array`

Returns an array sharing the underlying data with :mini:`Array`, permuting the axes according to :mini:`Indices`.

let A := array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
:> <<<1 2 3> <4 5 6>> <<7 8 9> <10 11 12>>>
A:shape :> [2, 2, 3]
let B := A:permute(2, 3, 1)
:> <<<1 7> <2 8> <3 9>> <<4 10> <5 11> <6 12>>>
B:shape :> [2, 3, 2]
:mini:`meth (Array: array):permute(Indices: list): array`

Returns an array sharing the underlying data with :mini:`Array`, permuting the axes according to :mini:`Indices`.

let A := array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
:> <<<1 2 3> <4 5 6>> <<7 8 9> <10 11 12>>>
A:shape :> [2, 2, 3]
let B := A:permute([2, 3, 1])
:> <<<1 7> <2 8> <3 9>> <<4 10> <5 11> <6 12>>>
B:shape :> [2, 3, 2]
:mini:`meth (Array: array):prod: number`

Returns the product of the values in :mini:`Array`.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:prod :> 720
:mini:`meth (Array: array):prod(Count: integer): array`

Returns a new array with the products of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:prod(1) :> <6 120>
:mini:`meth (Array: array):prods(Index: integer): array`
Returns a new array with the partial products of :mini:`Array` in the :mini:`Index`-th dimension.
:mini:`meth (Array: array):reshape(Sizes: list): array`

Returns a copy of :mini:`Array` with dimensions specified by :mini:`Sizes`. .. note:

This method always makes a copy of the data so that changes to the returned array do not affect the original.
:mini:`meth (Array: array):reverse(Index: integer): array`
Returns an array sharing the underlying data with :mini:`Array` with dimension :mini:`Index` reversed.
:mini:`meth (Array: array):shape: list`

Return the shape of :mini:`Array`.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:shape :> [2, 3]
:mini:`meth (Array: array):split(Index: integer, Sizes: list): array`
Returns an array sharing the underlying data with :mini:`Array` replacing the dimension at :mini:`Index` with new dimensions with sizes :mini:`Sizes`. The total count :mini:`Sizes₁ * Sizes₂ * ... * Sizesₙ` must equal the original size.
:mini:`meth (Array: array):strides: list`
Return the strides of :mini:`Array` in bytes.
:mini:`meth (Array: array):sum: number`

Returns the sum of the values in :mini:`Array`.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:sum :> 21
:mini:`meth (Array: array):sum(Index: integer): array`

Returns a new array with the sums of :mini:`Array` in the last :mini:`Count` dimensions.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:sum(1) :> <6 15>
:mini:`meth (Array: array):sums(Index: integer): array`
Returns a new array with the partial sums of :mini:`Array` in the :mini:`Index`-th dimension.
:mini:`meth (Array: array):swap: array`

Returns the transpose of :mini:`Array`, sharing the underlying data.

let A := array([[1, 2, 3], [4, 5, 6]])
:> <<1 2 3> <4 5 6>>
A:swap :> <<1 4> <2 5> <3 6>>
:mini:`meth (Array: array):swap(Index₁: integer, Index₂: integer): array`
Returns an array sharing the underlying data with :mini:`Array` with dimensions :mini:`Index₁` and :mini:`Index₂` swapped.
:mini:`meth (Array: array):where: list`
Returns a list of non-zero indices of :mini:`Array`.
:mini:`meth (Array: array):where(Function: function): list[tuple]`
Returns list of indices :mini:`Array` where :mini:`Function(Arrayᵢ)` returns a non-nil value.
:mini:`meth ||(Array: array): number`
Returns the norm of the values in :mini:`Array`.
:mini:`meth (Array: array) || (Arg₂: real): number`
Returns the norm of the values in :mini:`Array`.
:mini:`type array::any < array`
TBD
:mini:`fun array::any(Sizes: list[integer]): array::any`
Returns a new array of any values with the specified dimensions.
:mini:`type array::complex < array`
TBD
:mini:`meth (A: array::complex) * (B: complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ * B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A * (1 + 1i) :> <<1 + 1i 2 + 2i> <3 + 3i 4 + 4i>>
:mini:`meth (A: array::complex) + (B: complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ + B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A + (1 + 1i) :> <<2 + 1i 3 + 1i> <4 + 1i 5 + 1i>>
:mini:`meth (A: array::complex) - (B: complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ - B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A - (1 + 1i) :> <<0 - 1i 1 - 1i> <2 - 1i 3 - 1i>>
:mini:`meth (A: array::complex) / (B: complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ / B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A / (1 + 1i) :> <<0.5 - 0.5i 1 - 1i> <1.5 - 1.5i 2 - 2i>>
:mini:`type array::complex32 < array::complex`
TBD
:mini:`fun array::complex32(Sizes: list[integer]): array::complex32`
Returns a new array of complex32 values with the specified dimensions.
:mini:`type array::complex64 < array::complex`
TBD
:mini:`fun array::complex64(Sizes: list[integer]): array::complex64`
Returns a new array of complex64 values with the specified dimensions.
:mini:`type array::float32 < array::real`
TBD
:mini:`fun array::float32(Sizes: list[integer]): array::float32`
Returns a new array of float32 values with the specified dimensions.
:mini:`type array::float64 < array::real`
TBD
:mini:`fun array::float64(Sizes: list[integer]): array::float64`
Returns a new array of float64 values with the specified dimensions.
:mini:`type array::int16 < array::integer`
TBD
:mini:`fun array::int16(Sizes: list[integer]): array::int16`
Returns a new array of int16 values with the specified dimensions.
:mini:`type array::int32 < array::integer`
TBD
:mini:`fun array::int32(Sizes: list[integer]): array::int32`
Returns a new array of int32 values with the specified dimensions.
:mini:`type array::int64 < array::integer`
TBD
:mini:`fun array::int64(Sizes: list[integer]): array::int64`
Returns a new array of int64 values with the specified dimensions.
:mini:`type array::int8 < array::integer`
TBD
:mini:`fun array::int8(Sizes: list[integer]): array::int8`
Returns a new array of int8 values with the specified dimensions.
:mini:`type array::integer < array::real`
TBD
:mini:`meth (A: array::integer) * (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ * B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A * 2 :> <<2 4> <6 8>>
:mini:`meth (A: array::integer) + (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ + B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A + 2 :> <<3 4> <5 6>>
:mini:`meth (A: array::integer) - (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ - B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A - 2 :> <<-1 0> <1 2>>
:mini:`meth (A: array::integer) / (B: integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ / B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A / 2 :> <<0.5 1> <1.5 2>>
:mini:`type array::iterator`
TBD
:mini:`type array::mutable < array, buffer`
TBD
:mini:`meth (Array: array::mutable):update(Function: function): array`
Update the values in :mini:`Array` in place by applying :mini:`Function` to each value.
:mini:`type array::mutable::any < array::any, array::mutable`

An array of any values.

:mini:`(A: array::mutable::any) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::any) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::complex < array::complex, array::mutable`
Base type for arrays of complex numbers.
:mini:`meth (Arg₁: array::mutable::complex) ^ (Arg₂: complex)`
TBD
:mini:`type array::mutable::complex32 < array::complex32, array::mutable::complex`

An array of complex32 values.

:mini:`(A: array::mutable::complex32) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::complex32) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::complex64 < array::complex64, array::mutable::complex`

An array of complex64 values.

:mini:`(A: array::mutable::complex64) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::complex64) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::float32 < array::float32, array::mutable::real`

An array of float32 values.

:mini:`(A: array::mutable::float32) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::float32) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::float64 < array::float64, array::mutable::real`

An array of float64 values.

:mini:`(A: array::mutable::float64) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::float64) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::int16 < array::int16, array::mutable::integer`

An array of int16 values.

:mini:`(A: array::mutable::int16) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::int16) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::int32 < array::int32, array::mutable::integer`

An array of int32 values.

:mini:`(A: array::mutable::int32) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::int32) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::int64 < array::int64, array::mutable::integer`

An array of int64 values.

:mini:`(A: array::mutable::int64) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::int64) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::int8 < array::int8, array::mutable::integer`

An array of int8 values.

:mini:`(A: array::mutable::int8) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::int8) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::integer < array::integer, array::mutable::real`
Base type for arrays of integers.
:mini:`type array::mutable::iterator < array::iterator`
TBD
:mini:`type array::mutable::real < array::real, array::mutable::complex`
Base type for arrays of real numbers.
:mini:`meth (Arg₁: array::mutable::real) ^ (Arg₂: real)`
TBD
:mini:`type array::mutable::uint16 < array::uint16, array::mutable::integer`

An array of uint16 values.

:mini:`(A: array::mutable::uint16) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::uint16) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::uint32 < array::uint32, array::mutable::integer`

An array of uint32 values.

:mini:`(A: array::mutable::uint32) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::uint32) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::uint64 < array::uint64, array::mutable::integer`

An array of uint64 values.

:mini:`(A: array::mutable::uint64) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::uint64) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::mutable::uint8 < array::uint8, array::mutable::integer`

An array of uint8 values.

:mini:`(A: array::mutable::uint8) := (B: number)`
Sets the values in :mini:`A` to :mini:`B`.
:mini:`(A: array::mutable::uint8) := (B: array | list)`
Sets the values in :mini:`A` to those in :mini:`B`, broadcasting as necessary. The shape of :mini:`B` must match the last dimensions of :mini:`A`.
:mini:`type array::real < array::complex`
TBD
:mini:`meth (A: array::real) * (B: real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ * B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A * 2.5 :> <<2.5 5> <7.5 10>>
:mini:`meth (A: array::real) + (B: real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ + B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A + 2.5 :> <<3.5 4.5> <5.5 6.5>>
:mini:`meth (A: array::real) - (B: real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ - B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A - 2.5 :> <<-1.5 -0.5> <0.5 1.5>>
:mini:`meth (A: array::real) / (B: real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := Aᵥ / B`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
A / 2.5 :> <<0.4 0.8> <1.2 1.6>>
:mini:`type array::uint16 < array::integer`
TBD
:mini:`fun array::uint16(Sizes: list[integer]): array::uint16`
Returns a new array of uint16 values with the specified dimensions.
:mini:`type array::uint32 < array::integer`
TBD
:mini:`fun array::uint32(Sizes: list[integer]): array::uint32`
Returns a new array of uint32 values with the specified dimensions.
:mini:`type array::uint64 < array::integer`
TBD
:mini:`fun array::uint64(Sizes: list[integer]): array::uint64`
Returns a new array of uint64 values with the specified dimensions.
:mini:`type array::uint8 < array::integer`
TBD
:mini:`fun array::uint8(Sizes: list[integer]): array::uint8`
Returns a new array of uint8 values with the specified dimensions.
:mini:`meth (A: complex) != (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A != Bᵥ then 1 else 0 end`.
:mini:`meth (A: complex) * (B: array::complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A * Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
(1 + 1i) * A :> <<1 + 1i 2 + 2i> <3 + 3i 4 + 4i>>
:mini:`meth (A: complex) + (B: array::complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A + Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
(1 + 1i) + A :> <<2 + 1i 3 + 1i> <4 + 1i 5 + 1i>>
:mini:`meth (A: complex) - (B: array::complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A - Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
(1 + 1i) - A :> <<0 + 1i -1 + 1i> <-2 + 1i -3 + 1i>>
:mini:`meth (A: complex) / (B: array::complex): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A / Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
(1 + 1i) / A
:> <<1 + 1i 0.5 + 0.5i> <0.333333 + 0.333333i 0.25 + 0.25i>>
:mini:`meth (A: complex) < (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A < Bᵥ then 1 else 0 end`.
:mini:`meth (A: complex) <= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A <= Bᵥ then 1 else 0 end`.
:mini:`meth (A: complex) = (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A = Bᵥ then 1 else 0 end`.
:mini:`meth (A: complex) > (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A > Bᵥ then 1 else 0 end`.
:mini:`meth (A: complex) >= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A >= Bᵥ then 1 else 0 end`.
:mini:`fun array::cat(Index: integer, Array₁: any, ...): array`

Returns a new array with the values of :mini:`Array₁, ..., Arrayₙ` concatenated along the :mini:`Index`-th dimension.

let A := $[[1, 2, 3], [4, 5, 6]] :> <<1 2 3> <4 5 6>>
let B := $[[7, 8, 9], [10, 11, 12]]
:> <<7 8 9> <10 11 12>>
array::cat(1, A, B)
:> <<1 2 3> <4 5 6> <7 8 9> <10 11 12>>
array::cat(2, A, B) :> <<1 2 3 7 8 9> <4 5 6 10 11 12>>
:mini:`meth (A: integer) != (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A != Bᵥ then 1 else 0 end`.
:mini:`meth (A: integer) * (B: array::integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A * Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 * A :> <<2 4> <6 8>>
:mini:`meth (A: integer) + (B: array::integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A + Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 + A :> <<3 4> <5 6>>
:mini:`meth (A: integer) - (B: array::integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A - Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 - A :> <<1 0> <-1 -2>>
:mini:`meth (A: integer) / (B: array::integer): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A / Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 / A :> <<2 1> <0.666667 0.5>>
:mini:`meth (A: integer) /\\ (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A bitwise and Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 /\ A :> <<0 2> <2 0>>
:mini:`meth (A: integer) < (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A < Bᵥ then 1 else 0 end`.
:mini:`meth (A: integer) <= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A <= Bᵥ then 1 else 0 end`.
:mini:`meth (A: integer) = (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A = Bᵥ then 1 else 0 end`.
:mini:`meth (A: integer) > (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A > Bᵥ then 1 else 0 end`.
:mini:`meth (A: integer) >< (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A bitwise xor Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 >< A :> <<3 0> <1 6>>
:mini:`meth (A: integer) >= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A >= Bᵥ then 1 else 0 end`.
:mini:`meth (A: integer) \\/ (B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A bitwise or Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 \/ A :> <<3 2> <3 6>>
:mini:`meth (A: integer):max(B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := max(A, Bᵥ)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 max A :> <<2 2> <3 4>>
:mini:`meth (A: integer):min(B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := min(A, Bᵥ)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2 min A :> <<1 2> <2 2>>
:mini:`meth $(List: list): array`
Returns an array with the contents of :mini:`List`.
:mini:`meth ^(List: list): array`
Returns an array with the contents of :mini:`List`, transposed.
:mini:`type matrix < array`
Arrays with exactly 2 dimensions.
:mini:`meth (T: matrix) @ (X: vector): vector`
Returns :mini:`X` transformed by :mini:`T`. :mini:`T` must be a :mini:`N` |times| :mini:`N` matrix and :mini:`X` a vector of size :mini:`N - 1`.
:mini:`meth \\(A: matrix): matrix`
Returns the inverse of :mini:`A`.
:mini:`meth (A: matrix) \\ (B: vector): vector`
Returns the solution :mini:`X` of :mini:`A . X = B`.
:mini:`meth (A: matrix):det: any`
Returns the determinant of :mini:`A`.
:mini:`meth (A: matrix)🇹🇷 any`
Returns the trace of :mini:`A`.
:mini:`type matrix::any < matrix, array::any`
TBD
:mini:`type matrix::complex < array::complex, matrix`
TBD
:mini:`type matrix::complex32 < matrix::complex, array::complex32`
TBD
:mini:`type matrix::complex64 < matrix::complex, array::complex64`
TBD
:mini:`type matrix::float32 < matrix::real, array::float32`
TBD
:mini:`type matrix::float64 < matrix::real, array::float64`
TBD
:mini:`type matrix::int16 < matrix::integer, array::int16`
TBD
:mini:`type matrix::int32 < matrix::integer, array::int32`
TBD
:mini:`type matrix::int64 < matrix::integer, array::int64`
TBD
:mini:`type matrix::int8 < matrix::integer, array::int8`
TBD
:mini:`type matrix::integer < matrix::real`
TBD
:mini:`type matrix::mutable < matrix, array::mutable`
TBD
:mini:`type matrix::mutable::any < matrix::any, matrix::mutable, array::mutable::any`
A matrix of any values.
:mini:`type matrix::mutable::complex < array::mutable::complex, matrix::mutable`
Base type for matrices of complex numbers.
:mini:`type matrix::mutable::complex32 < matrix::complex32, matrix::mutable::complex, array::mutable::complex32`
A matrix of complex32 values.
:mini:`type matrix::mutable::complex64 < matrix::complex64, matrix::mutable::complex, array::mutable::complex64`
A matrix of complex64 values.
:mini:`type matrix::mutable::float32 < matrix::float32, matrix::mutable::real, array::mutable::float32`
A matrix of float32 values.
:mini:`type matrix::mutable::float64 < matrix::float64, matrix::mutable::real, array::mutable::float64`
A matrix of float64 values.
:mini:`type matrix::mutable::int16 < matrix::int16, matrix::mutable::integer, array::mutable::int16`
A matrix of int16 values.
:mini:`type matrix::mutable::int32 < matrix::int32, matrix::mutable::integer, array::mutable::int32`
A matrix of int32 values.
:mini:`type matrix::mutable::int64 < matrix::int64, matrix::mutable::integer, array::mutable::int64`
A matrix of int64 values.
:mini:`type matrix::mutable::int8 < matrix::int8, matrix::mutable::integer, array::mutable::int8`
A matrix of int8 values.
:mini:`type matrix::mutable::integer < matrix::integer, matrix::mutable::real`
Base type for matrices of integers.
:mini:`type matrix::mutable::real < matrix::real, array::mutable::real, matrix::mutable::complex`
Base type for matrices of real numbers.
:mini:`type matrix::mutable::uint16 < matrix::uint16, matrix::mutable::integer, array::mutable::uint16`
A matrix of uint16 values.
:mini:`type matrix::mutable::uint32 < matrix::uint32, matrix::mutable::integer, array::mutable::uint32`
A matrix of uint32 values.
:mini:`type matrix::mutable::uint64 < matrix::uint64, matrix::mutable::integer, array::mutable::uint64`
A matrix of uint64 values.
:mini:`type matrix::mutable::uint8 < matrix::uint8, matrix::mutable::integer, array::mutable::uint8`
A matrix of uint8 values.
:mini:`type matrix::real < array::real, matrix::complex`
TBD
:mini:`type matrix::uint16 < matrix::integer, array::uint16`
TBD
:mini:`type matrix::uint32 < matrix::integer, array::uint32`
TBD
:mini:`type matrix::uint64 < matrix::integer, array::uint64`
TBD
:mini:`type matrix::uint8 < matrix::integer, array::uint8`
TBD
:mini:`meth (A: real) != (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A != Bᵥ then 1 else 0 end`.
:mini:`meth (A: real) * (B: array::real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A * Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2.5 * A :> <<2.5 5> <7.5 10>>
:mini:`meth (A: real) + (B: array::real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A + Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2.5 + A :> <<3.5 4.5> <5.5 6.5>>
:mini:`meth (A: real) - (B: array::real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A - Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2.5 - A :> <<1.5 0.5> <-0.5 -1.5>>
:mini:`meth (A: real) / (B: array::real): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := A / Bᵥ`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2.5 / A :> <<2.5 1.25> <0.833333 0.625>>
:mini:`meth (A: real) < (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A < Bᵥ then 1 else 0 end`.
:mini:`meth (A: real) <= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A <= Bᵥ then 1 else 0 end`.
:mini:`meth (A: real) = (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A = Bᵥ then 1 else 0 end`.
:mini:`meth (A: real) > (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A > Bᵥ then 1 else 0 end`.
:mini:`meth (A: real) >= (B: array): array`
Returns an array :mini:`C` where each :mini:`Cᵥ := if A >= Bᵥ then 1 else 0 end`.
:mini:`meth (A: real):max(B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := max(A, Bᵥ)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2.5 max A :> <<2 2> <3 4>>
:mini:`meth (A: real):min(B: array): array`

Returns an array :mini:`C` where each :mini:`Cᵥ := min(A, Bᵥ)`.

let A := array([[1, 2], [3, 4]]) :> <<1 2> <3 4>>
2.5 min A :> <<1 2> <2 2>>
:mini:`type ref::any`
TBD
:mini:`type ref::complex32`
TBD
:mini:`type ref::complex64`
TBD
:mini:`type ref::float32`
TBD
:mini:`type ref::float64`
TBD
:mini:`type ref::int16`
TBD
:mini:`type ref::int32`
TBD
:mini:`type ref::int64`
TBD
:mini:`type ref::int8`
TBD
:mini:`type ref::uint16`
TBD
:mini:`type ref::uint32`
TBD
:mini:`type ref::uint64`
TBD
:mini:`type ref::uint8`
TBD
:mini:`fun array::new(Arg₁: type, Arg₂: list)`
TBD
:mini:`fun array::wrap(Type: type, Buffer: address, Sizes: list, Strides: list): array`

Returns an array pointing to the contents of :mini:`Address` with the corresponding sizes and strides.

let B := buffer(16)
:> <16:202DFADA967F00004F3A20496D706C65>
array::wrap(array::uint16, B, [2, 2, 2], [8, 4, 2])
:> <<<11552 56058> <32662 0>> <<14927 18720> <28781 25964>>>
:mini:`type vector < array`
Arrays with exactly 1 dimension.
:mini:`type vector::any < vector, array::any`
TBD
:mini:`type vector::complex < array::complex, vector`
TBD
:mini:`type vector::complex32 < vector::complex, array::complex32`
TBD
:mini:`type vector::complex64 < vector::complex, array::complex64`
TBD
:mini:`type vector::float32 < vector::real, array::float32`
TBD
:mini:`type vector::float64 < vector::real, array::float64`
TBD
:mini:`type vector::int16 < vector::integer, array::int16`
TBD
:mini:`type vector::int32 < vector::integer, array::int32`
TBD
:mini:`type vector::int64 < vector::integer, array::int64`
TBD
:mini:`type vector::int8 < vector::integer, array::int8`
TBD
:mini:`type vector::integer < vector::real`
TBD
:mini:`type vector::mutable < vector, array::mutable`
TBD
:mini:`type vector::mutable::any < vector::any, vector::mutable, array::mutable::any`
A vector of any values.
:mini:`type vector::mutable::complex < vector::complex, array::mutable::complex, vector::mutable`
Base type for vectors of complex numbers.
:mini:`type vector::mutable::complex32 < vector::complex32, vector::mutable::complex, array::mutable::complex32`
A vector of complex32 values.
:mini:`type vector::mutable::complex64 < vector::complex64, vector::mutable::complex, array::mutable::complex64`
A vector of complex64 values.
:mini:`type vector::mutable::float32 < vector::float32, vector::mutable::real, array::mutable::float32`
A vector of float32 values.
:mini:`type vector::mutable::float64 < vector::float64, vector::mutable::real, array::mutable::float64`
A vector of float64 values.
:mini:`type vector::mutable::int16 < vector::int16, vector::mutable::integer, array::mutable::int16`
A vector of int16 values.
:mini:`type vector::mutable::int32 < vector::int32, vector::mutable::integer, array::mutable::int32`
A vector of int32 values.
:mini:`type vector::mutable::int64 < vector::int64, vector::mutable::integer, array::mutable::int64`
A vector of int64 values.
:mini:`type vector::mutable::int8 < vector::int8, vector::mutable::integer, array::mutable::int8`
A vector of int8 values.
:mini:`type vector::mutable::integer < vector::integer, vector::mutable::real`
Base type for vectors of integers.
:mini:`type vector::mutable::real < vector::real, array::mutable::real, vector::mutable::complex`
Base type for vectors of real numbers.
:mini:`meth (Vector: vector::mutable::real):softmax: vector`

Returns :mini:`softmax(Vector)`.

let A := array([1, 4.2, 0.6, 1.23, 4.3, 1.2, 2.5])
:> <1 4.2 0.6 1.23 4.3 1.2 2.5>
let B := A:softmax
:> <0.01659 0.406995 0.0111206 0.0208802 0.449799 0.0202631 0.0743513>
:mini:`type vector::mutable::uint16 < vector::uint16, vector::mutable::integer, array::mutable::uint16`
A vector of uint16 values.
:mini:`type vector::mutable::uint32 < vector::uint32, vector::mutable::integer, array::mutable::uint32`
A vector of uint32 values.
:mini:`type vector::mutable::uint64 < vector::uint64, vector::mutable::integer, array::mutable::uint64`
A vector of uint64 values.
:mini:`type vector::mutable::uint8 < vector::uint8, vector::mutable::integer, array::mutable::uint8`
A vector of uint8 values.
:mini:`type vector::real < array::real, vector::complex`
TBD
:mini:`type vector::uint16 < vector::integer, array::uint16`
TBD
:mini:`type vector::uint32 < vector::integer, array::uint32`
TBD
:mini:`type vector::uint64 < vector::integer, array::uint64`
TBD
:mini:`type vector::uint8 < vector::integer, array::uint8`
TBD
:mini:`meth (Arg₁: visitor):const(Arg₂: array)`
TBD
:mini:`meth (Arg₁: visitor):copy(Arg₂: array)`
TBD