declare function ndarray>( data: D, shape?: number[], stride?: number[], offset?: number, ): ndarray.NdArray; declare namespace ndarray { interface NdArray> { data: D; shape: number[]; stride: number[]; offset: number; dtype: DataType; size: number; order: number[]; dimension: number; get(...args: number[]): Value; set(...args: number[]): Value; index(...args: number[]): Value; lo(...args: number[]): NdArray; hi(...args: number[]): NdArray; step(...args: number[]): NdArray; transpose(...args: number[]): NdArray; pick(...args: Array): NdArray; T: NdArray; } interface GenericArray { get(idx: number): T; set(idx: number, value: T): void; length: number; } type MaybeBigInt64Array = InstanceType; type MaybeBigUint64Array = InstanceType; type Data = T extends number ? GenericArray | T[] | TypedArray : T extends bigint ? GenericArray | T[] | MaybeBigInt64Array | MaybeBigUint64Array : GenericArray | T[]; type TypedArray = | Int8Array | Int16Array | Int32Array | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Float32Array | Float64Array; type Value = D extends GenericArray | Record ? T : never; type DataType = D extends Int8Array ? "int8" : D extends Int16Array ? "int16" : D extends Int32Array ? "int32" : D extends Uint8Array ? "uint8" : D extends Uint8ClampedArray ? "uint8_clamped" : D extends Uint16Array ? "uint16" : D extends Uint32Array ? "uint32" : D extends Float32Array ? "float32" : D extends Float64Array ? "float64" : D extends MaybeBigInt64Array ? "bigint64" : D extends MaybeBigUint64Array ? "biguint64" : D extends GenericArray ? "generic" : "array"; } export = ndarray;