Package org.jetbrains.kotlinx.multik.ndarray.data

Types

Link copied to clipboard
sealed class D1(val d: Int = 1) : Dimension, Dim1

One dimension.

Link copied to clipboard
typealias D1Array<T> = NDArray<T, D1>
Link copied to clipboard
sealed class D2(val d: Int = 2) : Dimension, Dim2

Two dimensions.

Link copied to clipboard
typealias D2Array<T> = NDArray<T, D2>
Link copied to clipboard
sealed class D3(val d: Int = 3) : Dimension, Dim3

Three dimensions.

Link copied to clipboard
typealias D3Array<T> = NDArray<T, D3>
Link copied to clipboard
sealed class D4(val d: Int = 4) : Dimension, Dim4

Four dimensions.

Link copied to clipboard
typealias D4Array<T> = NDArray<T, D4>
Link copied to clipboard
enum DataType : Enum<DataType>

Describes the type of elements stored in a NDArray.

Link copied to clipboard
interface Dim1 : Dim2
Link copied to clipboard
interface Dim2 : Dim3
Link copied to clipboard
interface Dim3 : Dim4
Link copied to clipboard
interface Dim4 : DimN
Link copied to clipboard
interface Dimension

Marker interface for dimensions.

Link copied to clipboard
interface DimN : Dimension
Link copied to clipboard
class DN(val d: Int) : Dimension, DimN

N dimension. Usually, the dimension is greater than four. It can also be used when the dimension is unknown.

Link copied to clipboard
interface ImmutableMemoryView<T> : Iterable<T>

View for storing data in a NDArray and working them in a uniform style.

Link copied to clipboard
interface Indexing

Marker class. Serves to share slice and simple indexes.

Link copied to clipboard
sealed class MemoryView<T> : ImmutableMemoryView<T>
Link copied to clipboard
class MemoryViewByteArray(val data: ByteArray) : MemoryView<Byte>

View for ByteArray.

Link copied to clipboard
class MemoryViewComplexDoubleArray(val data: ComplexDoubleArray) : MemoryView<ComplexDouble>
Link copied to clipboard
class MemoryViewComplexFloatArray(val data: ComplexFloatArray) : MemoryView<ComplexFloat>
Link copied to clipboard
class MemoryViewDoubleArray(val data: DoubleArray) : MemoryView<Double>

View for DoubleArray.

Link copied to clipboard
class MemoryViewFloatArray(val data: FloatArray) : MemoryView<Float>

View for FloatArray.

Link copied to clipboard
class MemoryViewIntArray(val data: IntArray) : MemoryView<Int>

View for IntArray.

Link copied to clipboard
class MemoryViewLongArray(val data: LongArray) : MemoryView<Long>

View for LongArray.

Link copied to clipboard
class MemoryViewShortArray(val data: ShortArray) : MemoryView<Short>

View for ShortArray.

Link copied to clipboard
interface MultiArray<T, D : Dimension>

A generic ndarray. Methods in this interface support only read-only access to the ndarray.

Link copied to clipboard
class MultiIndexProgression(    val first: IntArray,     val last: IntArray,     val step: Int = 1)

Multidimensional index.

Link copied to clipboard
interface MutableMultiArray<T, D : Dimension> : MultiArray<T, D>

A generic ndarray. Methods in this interface support write access to the ndarray.

Link copied to clipboard
class NDArray<T, D : Dimension>(    data: ImmutableMemoryView<T>,     val offset: Int = 0,     val shape: IntArray,     val strides: IntArray = computeStrides(shape),     val dim: D,     val base: MultiArray<T, out Dimension>? = null) : MutableMultiArray<T, D>

A class that implements multidimensional arrays. This implementation is based on primitive arrays. With the help of offset, shape, strides there is a multidimensionality representation over a sequential homogeneous array.

Link copied to clipboard
class NDArrayIterator<T>(    data: MemoryView<T>,     offset: Int = 0,     strides: IntArray,     shape: IntArray) : Iterator<T>

Iterator over multidimensional arrays. Iterated taking into account the offset, strides and shape.

Link copied to clipboard
class ReadableView<T>(base: MultiArray<T, DN>)
Link copied to clipboard
value class RInt(data: Int) : Indexing

Helper class for indexing. Since the standard rangeTo overrides the rangeTo for slices.

Link copied to clipboard
typealias sl = Slice.Companion

Alias name for Slice.

Link copied to clipboard
class Slice(    start: Int,     stop: Int,     step: Int) : Indexing, ClosedRange<Int>

Slice class. An analogue of slices in python.

Link copied to clipboard
class SliceEndStub

Convenient Slice for stop stub.

Link copied to clipboard
class SliceStartStub

Convenient Slice for start stub.

Link copied to clipboard
class WritableView<T>(base: MutableMultiArray<T, DN>)

Functions

Link copied to clipboard
fun <T, D : Dimension> MultiArray<T, D>.asDNArray(): NDArray<T, DN>
Link copied to clipboard
inline fun checkBounds(    value: Boolean,     index: Int,     axis: Int,     size: Int)
Link copied to clipboard
operator fun <T : Number> Number.compareTo(other: T): Int
Link copied to clipboard
inline fun <D : Dimension> dimensionClassOf(dim: Int = -1): D
Link copied to clipboard
inline fun <D : Dimension> dimensionOf(dim: Int): D

Returns specific Dimension by integer dim.

Link copied to clipboard
infix fun IntArray.downTo(to: IntArray): MultiIndexProgression

Returns multidimensional index from highest to lowest in the step of -1.

Link copied to clipboard
@JvmName(name = "get0")
operator fun <T> MultiArray<T, D1>.get(index: Int): T
@JvmName(name = "get12")
operator fun <T> MultiArray<T, D1>.get(index: ClosedRange<Int>): MultiArray<T, D1>
@JvmName(name = "get1")
operator fun <T> MultiArray<T, D2>.get(index: Int): MultiArray<T, D1>
@JvmName(name = "get13")
operator fun <T> MultiArray<T, D2>.get(index: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get3")
operator fun <T> MultiArray<T, D3>.get(index: Int): MultiArray<T, D2>
@JvmName(name = "get17")
operator fun <T> MultiArray<T, D3>.get(index: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get6")
operator fun <T> MultiArray<T, D4>.get(index: Int): MultiArray<T, D3>
@JvmName(name = "get28")
operator fun <T> MultiArray<T, D4>.get(index: ClosedRange<Int>): MultiArray<T, D4>
@JvmName(name = "get10")
operator fun <T> MultiArray<T, DN>.get(vararg index: Int): T
@JvmName(name = "get11")
operator fun <T> MultiArray<T, DN>.get(index: IntArray): T
@JvmName(name = "get2")
operator fun <T> MultiArray<T, D2>.get(ind1: Int, ind2: Int): T
@JvmName(name = "get15")
operator fun <T> MultiArray<T, D2>.get(ind1: Int, ind2: ClosedRange<Int>): MultiArray<T, D1>
@JvmName(name = "get16")
operator fun <T> MultiArray<T, D2>.get(ind1: ClosedRange<Int>, ind2: Int): MultiArray<T, D1>
@JvmName(name = "get14")
operator fun <T> MultiArray<T, D2>.get(ind1: ClosedRange<Int>, ind2: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get4")
operator fun <T> MultiArray<T, D3>.get(ind1: Int, ind2: Int): MultiArray<T, D1>
@JvmName(name = "get19")
operator fun <T> MultiArray<T, D3>.get(ind1: Int, ind2: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get20")
operator fun <T> MultiArray<T, D3>.get(ind1: ClosedRange<Int>, ind2: Int): MultiArray<T, D2>
@JvmName(name = "get18")
operator fun <T> MultiArray<T, D3>.get(ind1: ClosedRange<Int>, ind2: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get7")
operator fun <T> MultiArray<T, D4>.get(ind1: Int, ind2: Int): MultiArray<T, D2>
@JvmName(name = "get30")
operator fun <T> MultiArray<T, D4>.get(ind1: Int, ind2: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get31")
operator fun <T> MultiArray<T, D4>.get(ind1: ClosedRange<Int>, ind2: Int): MultiArray<T, D3>
@JvmName(name = "get29")
operator fun <T> MultiArray<T, D4>.get(ind1: ClosedRange<Int>, ind2: ClosedRange<Int>): MultiArray<T, D4>
@JvmName(name = "get1")
operator fun <T> MutableMultiArray<T, D2>.get(write: WritableView.Companion, index: Int): MutableMultiArray<T, D1>
@JvmName(name = "get3")
operator fun <T> MutableMultiArray<T, D3>.get(write: WritableView.Companion, index: Int): MutableMultiArray<T, D2>
@JvmName(name = "get6")
operator fun <T> MutableMultiArray<T, D4>.get(write: WritableView.Companion, index: Int): MutableMultiArray<T, D3>
@JvmName(name = "get5")
operator fun <T> MultiArray<T, D3>.get(    ind1: Int,     ind2: Int,     ind3: Int): T
@JvmName(name = "get22")
operator fun <T> MultiArray<T, D3>.get(    ind1: Int,     ind2: Int,     ind3: ClosedRange<Int>): MultiArray<T, D1>
@JvmName(name = "get23")
operator fun <T> MultiArray<T, D3>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: Int): MultiArray<T, D1>
@JvmName(name = "get25")
operator fun <T> MultiArray<T, D3>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get24")
operator fun <T> MultiArray<T, D3>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: Int): MultiArray<T, D1>
@JvmName(name = "get27")
operator fun <T> MultiArray<T, D3>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get26")
operator fun <T> MultiArray<T, D3>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: Int): MultiArray<T, D2>
@JvmName(name = "get21")
operator fun <T> MultiArray<T, D3>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get8")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: Int,     ind3: Int): MultiArray<T, D1>
@JvmName(name = "get33")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: Int,     ind3: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get34")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: Int): MultiArray<T, D2>
@JvmName(name = "get36")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get35")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: Int): MultiArray<T, D2>
@JvmName(name = "get38")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get37")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: Int): MultiArray<T, D3>
@JvmName(name = "get32")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>): MultiArray<T, D4>
@JvmName(name = "get4")
operator fun <T> MutableMultiArray<T, D3>.get(    write: WritableView.Companion,     ind1: Int,     ind2: Int): MultiArray<T, D1>
@JvmName(name = "get7")
operator fun <T> MutableMultiArray<T, D4>.get(    write: WritableView.Companion,     ind1: Int,     ind2: Int): MultiArray<T, D2>
@JvmName(name = "get9")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: Int,     ind3: Int,     ind4: Int): T
@JvmName(name = "get39")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: Int,     ind3: Int,     ind4: ClosedRange<Int>): MultiArray<T, D1>
@JvmName(name = "get40")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: Int,     ind3: ClosedRange<Int>,     ind4: Int): MultiArray<T, D1>
@JvmName(name = "get43")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: Int,     ind3: ClosedRange<Int>,     ind4: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get41")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: Int,     ind4: Int): MultiArray<T, D1>
@JvmName(name = "get46")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: Int,     ind4: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get44")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>,     ind4: Int): MultiArray<T, D2>
@JvmName(name = "get49")
operator fun <T> MultiArray<T, D4>.get(    ind1: Int,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>,     ind4: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get42")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: Int,     ind4: Int): MultiArray<T, D1>
@JvmName(name = "get47")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: Int,     ind4: ClosedRange<Int>): MultiArray<T, D2>
@JvmName(name = "get48")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: ClosedRange<Int>,     ind4: Int): MultiArray<T, D2>
@JvmName(name = "get50")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: Int,     ind3: ClosedRange<Int>,     ind4: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get45")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: Int,     ind4: Int): MultiArray<T, D2>
@JvmName(name = "get51")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: Int,     ind4: ClosedRange<Int>): MultiArray<T, D3>
@JvmName(name = "get52")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>,     ind4: Int): MultiArray<T, D3>
@JvmName(name = "get39")
operator fun <T> MultiArray<T, D4>.get(    ind1: ClosedRange<Int>,     ind2: ClosedRange<Int>,     ind3: ClosedRange<Int>,     ind4: ClosedRange<Int>): MultiArray<T, D4>
@JvmName(name = "get8")
operator fun <T> MutableMultiArray<T, D4>.get(    write: WritableView.Companion,     ind1: Int,     ind2: Int,     ind3: Int): MutableMultiArray<T, D1>
Link copied to clipboard
inline fun <T : Any> initMemoryView(size: Int): MemoryView<T>

fun <T> initMemoryView(size: Int, dataType: DataType): MemoryView<T>

Creates a MemoryView based size and dataType.

fun <T> initMemoryView(    size: Int,     dataType: DataType,     init: (Int) -> T): MemoryView<T>

Create a MemoryView based size and dataType, where each elements will be initialized according to the given init function.

Link copied to clipboard
inline fun <T, D : Dimension, M : Dimension> MutableMultiArray<T, D>.mutableView(index: Int, axis: Int = 0): MutableMultiArray<T, M>
inline fun <T, D : Dimension, M : Dimension> MutableMultiArray<T, D>.mutableView(index: IntArray, axes: IntArray): MutableMultiArray<T, M>
@JvmName(name = "mutableViewD2")
fun <T> MutableMultiArray<T, D2>.mutableView(index: Int, axis: Int = 0): MutableMultiArray<T, D1>
@JvmName(name = "mutableViewD3")
fun <T> MutableMultiArray<T, D3>.mutableView(index: Int, axis: Int = 0): MutableMultiArray<T, D2>
@JvmName(name = "mutableViewD4")
fun <T> MutableMultiArray<T, D4>.mutableView(index: Int, axis: Int = 0): MutableMultiArray<T, D3>
@JvmName(name = "mutableViewDN")
fun <T> MutableMultiArray<T, DN>.mutableView(index: Int, axis: Int = 0): MutableMultiArray<T, DN>
@JvmName(name = "mutableViewDN")
fun <T> MutableMultiArray<T, DN>.mutableView(index: IntArray, axes: IntArray): MutableMultiArray<T, DN>
@JvmName(name = "mutableViewD3toD1")
fun <T> MutableMultiArray<T, D3>.mutableView(    ind1: Int,     ind2: Int,     axis1: Int = 0,     axis2: Int = 1): MutableMultiArray<T, D1>
@JvmName(name = "mutableViewD4toD2")
fun <T> MutableMultiArray<T, D4>.mutableView(    ind1: Int,     ind2: Int,     axis1: Int = 0,     axis2: Int = 1): MutableMultiArray<T, D2>
@JvmName(name = "mutableViewD4toD1")
fun <T> MutableMultiArray<T, D4>.mutableView(    ind1: Int,     ind2: Int,     ind3: Int,     axis1: Int = 0,     axis2: Int = 1,     axis3: Int = 2): MutableMultiArray<T, D1>
Link copied to clipboard
operator fun Int.rangeTo(that: RInt): Slice

Returns Slice where stop from RInt.

operator fun Int.rangeTo(that: SliceEndStub): Slice

Returns Slice with stub of the stop.

operator fun IntArray.rangeTo(other: IntArray): MultiIndexProgression

Returns a multidimensional index based on given arrays.

operator fun IntRange.rangeTo(step: Int): Slice

Returns a slice at a specified step.

operator fun SliceStartStub.rangeTo(that: Int): Slice

Returns Slice with stub of the start.

Link copied to clipboard
inline fun requireElementsWithShape(elementSize: Int, shapeSize: Int)
Link copied to clipboard
@JvmName(name = "set0")
operator fun <T> MutableMultiArray<T, D1>.set(index: Int, value: T)
@JvmName(name = "set1")
operator fun <T> MutableMultiArray<T, D2>.set(index: Int, value: MultiArray<T, D1>)
@JvmName(name = "set3")
operator fun <T> MutableMultiArray<T, D3>.set(index: Int, value: MultiArray<T, D2>)
@JvmName(name = "set6")
operator fun <T> MutableMultiArray<T, D4>.set(index: Int, value: MultiArray<T, D3>)
@JvmName(name = "set10")
operator fun <T> MutableMultiArray<T, DN>.set(vararg index: Int, value: T)
@JvmName(name = "set11")
operator fun <T> MutableMultiArray<T, DN>.set(index: IntArray, value: T)
@JvmName(name = "set2")
operator fun <T> MutableMultiArray<T, D2>.set(    ind1: Int,     ind2: Int,     value: T)
@JvmName(name = "set4")
operator fun <T> MutableMultiArray<T, D3>.set(    ind1: Int,     ind2: Int,     value: MultiArray<T, D1>)
@JvmName(name = "set7")
operator fun <T> MutableMultiArray<T, D4>.set(    ind1: Int,     ind2: Int,     value: MultiArray<T, D2>)
@JvmName(name = "set5")
operator fun <T> MutableMultiArray<T, D3>.set(    ind1: Int,     ind2: Int,     ind3: Int,     value: T)
@JvmName(name = "set8")
operator fun <T> MutableMultiArray<T, D4>.set(    ind1: Int,     ind2: Int,     ind3: Int,     value: MultiArray<T, D1>)
@JvmName(name = "set9")
operator fun <T> MutableMultiArray<T, D4>.set(    ind1: Int,     ind2: Int,     ind3: Int,     ind4: Int,     value: T)
Link copied to clipboard
fun <T, D : Dimension, O : Dimension> MultiArray<T, D>.slice(indexing: Map<Int, Indexing>): NDArray<T, O>
fun <T> MultiArray<T, DN>.slice(map: Map<Int, Indexing>): MultiArray<T, DN>
fun <T, D : Dimension, O : Dimension> MultiArray<T, D>.slice(inSlice: ClosedRange<Int>, axis: Int = 0): NDArray<T, O>
Link copied to clipboard
infix fun MultiIndexProgression.step(step: Int): MultiIndexProgression

Returns a multidimensional index with a given step.

Link copied to clipboard
fun <T : Number> Number.toPrimitiveType(dtype: DataType): T
Link copied to clipboard
fun ClosedRange<Int>.toSlice(): Slice
fun IntRange.toSlice(): Slice

Returns Slice containing the first, the last with a step of 1.

Link copied to clipboard
fun <T> List<T>.toViewPrimitiveArray(dataType: DataType): MemoryView<T>
Link copied to clipboard
fun <T, D : Dimension, M : Dimension> MultiArray<T, D>.view(index: Int, axis: Int = 0): MultiArray<T, M>
fun <T, D : Dimension, M : Dimension> MultiArray<T, D>.view(indices: IntArray, axes: IntArray): MultiArray<T, M>
@JvmName(name = "viewD2")
fun <T> MultiArray<T, D2>.view(index: Int, axis: Int = 0): MultiArray<T, D1>
@JvmName(name = "viewD3")
fun <T> MultiArray<T, D3>.view(index: Int, axis: Int = 0): MultiArray<T, D2>
@JvmName(name = "viewD4")
fun <T> MultiArray<T, D4>.view(index: Int, axis: Int = 0): MultiArray<T, D3>
@JvmName(name = "viewDN")
fun <T> MultiArray<T, DN>.view(index: Int, axis: Int = 0): MultiArray<T, DN>
@JvmName(name = "viewDN")
fun <T> MultiArray<T, DN>.view(index: IntArray, axes: IntArray): MultiArray<T, DN>
@JvmName(name = "viewD3toD1")
fun <T> MultiArray<T, D3>.view(    ind1: Int,     ind2: Int,     axis1: Int = 0,     axis2: Int = 1): MultiArray<T, D1>
@JvmName(name = "viewD4toD2")
fun <T> MultiArray<T, D4>.view(    ind1: Int,     ind2: Int,     axis1: Int = 0,     axis2: Int = 1): MultiArray<T, D2>
@JvmName(name = "viewD4toD1")
fun <T> MultiArray<T, D4>.view(    ind1: Int,     ind2: Int,     ind3: Int,     axis1: Int = 0,     axis2: Int = 1,     axis3: Int = 2): MultiArray<T, D1>
Link copied to clipboard
inline fun <T, D : Dimension, M : Dimension> MultiArray<T, D>.writableView(index: Int, axis: Int = 0): MutableMultiArray<T, M>
inline fun <T, D : Dimension, M : Dimension> MultiArray<T, D>.writableView(indices: IntArray, axes: IntArray): MutableMultiArray<T, M>
Link copied to clipboard
inline fun zeroNumber(dtype: DataType): Any

Properties

Link copied to clipboard
val sl.bounds: Slice

Returns Slice with stubs the start and the stop.

Link copied to clipboard
val sl.first: SliceStartStub

Stub start.

Link copied to clipboard
val sl.last: SliceEndStub

Stub stop.

Link copied to clipboard
val Int.r: RInt

Returns RInt.

Link copied to clipboard
val <T> MultiArray<T, DN>.V: ReadableView<T>
Link copied to clipboard
val <T> MutableMultiArray<T, DN>.W: WritableView<T>