API
ComponentArrays.Axis — Typeax = Axis(nt::NamedTuple)Gives named component access for ComponentArrays.
Examples
julia> using ComponentArrays
julia> ax = Axis((a = 1, b = ViewAxis(2:7, PartitionedAxis(2, (a = 1, b = 2))),
c = ViewAxis(8:10, (a = 1, b = 2:3))));
julia> A = [100, 4, 1.3, 1, 1, 4.4, 0.4, 2, 1, 45];
julia> ca = ComponentArray(A, ax)
ComponentVector{Float64}(a = 100.0, b = ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = 1, b = 2)}}}[(a = 4.0, b = 1.3), (a = 1.0, b = 1.0), (a = 4.4, b = 0.4)], c = (a = 2.0, b = [1.0, 45.0]))
julia> ca.a
100.0
julia> ca.b
3-element LazyArray{ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = 1, b = 2)}}}}:
ComponentVector{Float64,SubArray...}(a = 4.0, b = 1.3)
ComponentVector{Float64,SubArray...}(a = 1.0, b = 1.0)
ComponentVector{Float64,SubArray...}(a = 4.4, b = 0.4)
julia> ca.c
ComponentVector{Float64,SubArray...}(a = 2.0, b = [1.0, 45.0])
julia> ca.c.b
2-element view(::Vector{Float64}, 9:10) with eltype Float64:
1.0
45.0ComponentArrays.ComponentArray — Typex = ComponentArray(nt::NamedTuple)
x = ComponentArray(;kwargs...)
x = ComponentArray(data::AbstractVector, ax)
x = ComponentArray{T}(args...; kwargs...) where TArray type that can be accessed like an arbitrary nested mutable struct.
Examples
julia> using ComponentArrays
julia> x = ComponentArray(a = 1, b = [2, 1, 4], c = (a = 2, b = [1, 2]))
ComponentVector{Int64}(a = 1, b = [2, 1, 4], c = (a = 2, b = [1, 2]))
julia> x.c.a = 400;
x
ComponentVector{Int64}(a = 1, b = [2, 1, 4], c = (a = 400, b = [1, 2]))
julia> x[5]
400
julia> collect(x)
7-element Vector{Int64}:
1
2
1
4
400
1
2ComponentArrays.ComponentMatrix — Typex = ComponentMatrix(data::AbstractMatrix, ax...)
x = ComponentMatrix{T}(data::AbstractMatrix, ax...) where TA ComponentMatrix is an alias for a two-dimensional ComponentArray.
ComponentArrays.ComponentVector — Typex = ComponentVector(nt::NamedTuple)
x = ComponentVector(;kwargs...)
x = ComponentVector(data::AbstractVector, ax)
x = ComponentVector{T}(args...; kwargs...) where TA ComponentVector is an alias for a one-dimensional ComponentArray.
ComponentArrays.KeepIndex — TypeKeepIndex(idx)Tag an index of a ComponentArray to retain it's Axis through indexing
ComponentArrays.LazyArray — TypeLazyArray(gen::Base.Generator)Wrapper around Base.Generator that also indexes like an array. This is needed to make ComponentArrays that hold arrays of ComponentArrays
ComponentArrays.PartitionedAxis — Typepa = PartitionedAxis(partition_size, index_map)Axis for creating arrays of ComponentArrays
ComponentArrays.ShapedAxis — Typesa = ShapedAxis(shape)Preserves higher-dimensional array components in ComponentArrays (matrix components, for example)
ComponentArrays.ViewAxis — Typeva = ViewAxis(parent_index, index_map)Axis for creating arrays of ComponentArrays
ComponentArrays.getaxes — Methodgetaxes(x::ComponentArray)Access .axes field of a ComponentArray. This is different than axes(x::ComponentArray), which returns the axes of the contained array.
Examples
julia> using ComponentArrays
julia> ax = Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3)))
Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3)))
julia> A = zeros(6, 6);
julia> ca = ComponentArray(A, (ax, ax))
6×6 ComponentMatrix{Float64} with axes Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3))) × Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3)))
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
julia> getaxes(ca)
(Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3))), Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3))))ComponentArrays.getdata — Methodgetdata(x::ComponentArray)Access .data field of a ComponentArray, which contains the array that ComponentArray wraps.
ComponentArrays.label2index — Methodlabel2index(x::ComponentVector, str::AbstractString)
label2index(label_array, str::AbstractString)Convert labels made by labels function to an array of flat indices of a ComponentVector.
Examples
julia> x = ComponentArray(a = 5, b = [(a = (a = 20, b = 1), b = 0), (a = (a = 33, b = 1), b = 0)],
c = (a = (a = 2, b = [1, 2]), b = [1.0 2.0; 5 6]))
ComponentVector{Float64}(a = 5.0, b = ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = ViewAxis(1:2, Axis(a = 1, b = 2)), b = 3)}}}[(a = (a = 20.0, b = 1.0), b = 0.0), (a = (a = 33.0, b = 1.0), b = 0.0)], c = (a = (a = 2.0, b = [1.0, 2.0]), b = [1.0 2.0; 5.0 6.0]))
julia> ComponentArrays.labels(x)
14-element Vector{String}:
"a"
"b[1].a.a"
"b[1].a.b"
"b[1].b"
"b[2].a.a"
"b[2].a.b"
"b[2].b"
"c.a.a"
"c.a.b[1]"
"c.a.b[2]"
"c.b[1,1]"
"c.b[2,1]"
"c.b[1,2]"
"c.b[2,2]"
julia> ComponentArrays.label2index(x, "c.a")
3-element Vector{Int64}:
8
9
10
julia> ComponentArrays.label2index(x, "b[1]")
3-element Vector{Int64}:
2
3
4see also labels
ComponentArrays.labels — Methodlabels(x::ComponentVector)Get string labels for for each index of a ComponentVector. Useful for automatic plot legend labelling.
Examples
julia> x = ComponentArray(a = 5, b = [(a = (a = 20, b = 1), b = 0), (a = (a = 33, b = 1), b = 0)],
c = (a = (a = 2, b = [1, 2]), b = [1.0 2.0; 5 6]))
ComponentVector{Float64}(a = 5.0, b = ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = ViewAxis(1:2, Axis(a = 1, b = 2)), b = 3)}}}[(a = (a = 20.0, b = 1.0), b = 0.0), (a = (a = 33.0, b = 1.0), b = 0.0)], c = (a = (a = 2.0, b = [1.0, 2.0]), b = [1.0 2.0; 5.0 6.0]))
julia> ComponentArrays.labels(x)
14-element Vector{String}:
"a"
"b[1].a.a"
"b[1].a.b"
"b[1].b"
"b[2].a.a"
"b[2].a.b"
"b[2].b"
"c.a.a"
"c.a.b[1]"
"c.a.b[2]"
"c.b[1,1]"
"c.b[2,1]"
"c.b[1,2]"
"c.b[2,2]"see also label2index
ComponentArrays.valkeys — Methodvalkeys(x::ComponentVector)
valkeys(x::AbstractAxis)Returns Val-wrapped keys of ComponentVector for fast iteration over component keys. Also works directly on an AbstractAxis.
Examples
julia> using ComponentArrays
julia> ca = ComponentArray(a = 1, b = [1, 2, 3], c = (a = 4,))
ComponentVector{Int64}(a = 1, b = [1, 2, 3], c = (a = 4))
julia> [ca[k] for k in valkeys(ca)]
3-element Vector{Any}:
1
[1, 2, 3]
ComponentVector{Int64}(a = 4)
julia> sum(prod(ca[k]) for k in valkeys(ca))
11