# 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 Case Description  Append(...)  Signature: VectorConstruction * VectorConstruction Append two vectors after each other  AsyncCustomCommand(...)  Signature: VectorConstruction list * IVector list -> Async 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 * 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
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
Get the specified range of addresses from the vector and return it as a new vector  Relocate(...)  Signature: VectorConstruction * int64 * seq
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.