Deedle


VectorConstruction

Namespace: Deedle.Vectors

A "mini-DSL" that describes construction of a vector. Vector can be constructed from various range operations (relocate, drop, slicing, appending), by combination of two vectors or by taking a vector from a list of variables.

Notably, vectors can only be constructed from other vectors of the same type (the Combine operation requires this - even though that one could be made more general). This is an intentional choice to make the representation simpler.

Logically, when we apply some index operation, we should get back a polymorphic vector construction (\forall T. VectorConstruction<T>) that can be applied to variuous different vector types. That would mean adding some more types, so we just model vector construction as an untyped operation and the typing is resquired by the Build method of the vector builder.

Union Cases

Union CaseDescription
Append(...)
Signature: VectorConstruction * VectorConstruction

Append two vectors after each other

AsyncCustomCommand(...)
Signature: VectorConstruction list * IVector list -> Async<IVector>

Same as CustomCommand with the difference that the resulting vector is returned asynchronously (this is useful for lazy loading and it is used by AsyncBuild).

Combine(...)
Signature: Lazy<int64> * VectorConstruction list * VectorListTransform

Combine N aligned vectors. The IVectorValueListTransform object specifies how to merge values (in case there is a value at a given address in more than one of the vectors).

CustomCommand(...)
Signature: VectorConstruction list * IVector list -> IVector

Apply a custom command to a vector - this can be used by special indices (e.g. index for a lazy vector) to provide a custom operations to be used. The first parameter is a list of sub-vectors to be combined (if as in e.g. Append) and the second argument is a function that will be called with evaluated vectors and is supposed to create the new vector.

DropRange(...)
Signature: VectorConstruction * RangeRestriction<Address>

Drop the specified range of addresses from the vector and return a new vector that excludes the range

Empty(int64)
Signature: int64

Creates an empty vector of the requested type and size The returned vector is filled with missing values.

FillMissing(...)
Signature: VectorConstruction * VectorFillMissing

Create a vector that has missing values filled using the specified direction (forward means that n-th value will contain (n-i)-th value where (n-i) is the first index that contains a value).

GetRange(...)
Signature: VectorConstruction * RangeRestriction<Address>

Get the specified range of addresses from the vector and return it as a new vector

Relocate(...)
Signature: VectorConstruction * int64 * seq<Address * Address>

Reorders elements of the vector. Carries a new required vector length and a list of relocations (each pair of addresses specifies that an element at a new address should be filled with an element from an old address). The addresses may be out of range!

Return(VectorHole)
Signature: VectorHole

When constructing vectors, we get an array of vectors to be used as "variables" - this element represent getting one of the variables.

Fork me on GitHub