JuMP.Containers.SparseAxisArray
— Typestruct SparseAxisArray{T,N,K<:NTuple{N, Any}} <: AbstractArray{T,N}
+ 1.0 1.0
diff --git a/previews/PR3561/.documenter-siteinfo.json b/previews/PR3561/.documenter-siteinfo.json
index 60ef06d33d2..ae7db55371d 100644
--- a/previews/PR3561/.documenter-siteinfo.json
+++ b/previews/PR3561/.documenter-siteinfo.json
@@ -1 +1 @@
-{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-11-06T23:12:14","documenter_version":"1.1.1"}}
\ No newline at end of file
+{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-11-07T21:14:37","documenter_version":"1.1.1"}}
\ No newline at end of file
diff --git a/previews/PR3561/JuMP.pdf b/previews/PR3561/JuMP.pdf
index 4969c92aaaf..02e70af39e9 100644
Binary files a/previews/PR3561/JuMP.pdf and b/previews/PR3561/JuMP.pdf differ
diff --git a/previews/PR3561/api/JuMP.Containers/index.html b/previews/PR3561/api/JuMP.Containers/index.html
index 0da845d6229..19adbb5929b 100644
--- a/previews/PR3561/api/JuMP.Containers/index.html
+++ b/previews/PR3561/api/JuMP.Containers/index.html
@@ -12,7 +12,7 @@
3 4
julia> array[:b, 3]
-4source Construct an uninitialized DenseAxisArray with element-type Example Construct an uninitialized DenseAxisArray with element-type ExampleDenseAxisArray{T}(undef, axes...) where T
T
indexed over the given axes.julia> array = Containers.DenseAxisArray{Float64}(undef, [:a, :b], 1:2);
+4
DenseAxisArray{T}(undef, axes...) where T
T
indexed over the given axes.julia> array = Containers.DenseAxisArray{Float64}(undef, [:a, :b], 1:2);
julia> fill!(array, 1.0)
2-dimensional DenseAxisArray{Float64,2,...} with index sets:
@@ -34,7 +34,7 @@
Dimension 2, 1:2
And data, a 2×2 Matrix{Float64}:
1.0 5.0
- 1.0 1.0
SparseAxisArray
JuMP.Containers.SparseAxisArray
— Typestruct SparseAxisArray{T,N,K<:NTuple{N, Any}} <: AbstractArray{T,N}
+ 1.0 1.0
SparseAxisArray
JuMP.Containers.SparseAxisArray
— Typestruct SparseAxisArray{T,N,K<:NTuple{N, Any}} <: AbstractArray{T,N}
data::Dict{K,T}
end
N
-dimensional array with elements of type T
where only a subset of the entries are defined. The entries with indices idx = (i1, i2, ..., iN)
in keys(data)
has value data[idx]
. Note that as opposed to SparseArrays.AbstractSparseArray
, the missing entries are not assumed to be zero(T)
, they are simply not part of the array. This means that the result of map(f, sa::SparseAxisArray)
or f.(sa::SparseAxisArray)
has the same sparsity structure than sa
even if f(zero(T))
is not zero.
Example
julia> dict = Dict((:a, 2) => 1.0, (:a, 3) => 2.0, (:b, 3) => 3.0)
Dict{Tuple{Symbol, Int64}, Float64} with 3 entries:
@@ -49,7 +49,7 @@
[b, 3] = 3.0
julia> array[:b, 3]
-3.0
Containers.@container
JuMP.Containers.@container
— Macro@container([i=..., j=..., ...], expr[, container = :Auto])
Create a container with indices i
, j
, ... and values given by expr
that may depend on the value of the indices.
@container(ref[i=..., j=..., ...], expr[, container = :Auto])
Same as above but the container is assigned to the variable of name ref
.
The type of container can be controlled by the container
keyword.
When the index set is explicitly given as 1:n
for any expression n
, it is transformed to Base.OneTo(n)
before being given to container
.
Example
julia> Containers.@container([i = 1:3, j = 1:3], i + j)
+3.0
Containers.@container
JuMP.Containers.@container
— Macro@container([i=..., j=..., ...], expr[, container = :Auto])
Create a container with indices i
, j
, ... and values given by expr
that may depend on the value of the indices.
@container(ref[i=..., j=..., ...], expr[, container = :Auto])
Same as above but the container is assigned to the variable of name ref
.
The type of container can be controlled by the container
keyword.
When the index set is explicitly given as 1:n
for any expression n
, it is transformed to Base.OneTo(n)
before being given to container
.
Example
julia> Containers.@container([i = 1:3, j = 1:3], i + j)
3×3 Matrix{Int64}:
2 3 4
3 4 5
@@ -84,7 +84,7 @@
[1, 3] = 4
[2, 2] = 4
[2, 3] = 5
- [3, 3] = 6
Containers.container
JuMP.Containers.container
— Functioncontainer(f::Function, indices[[, ::Type{C} = AutoContainerType], names])
Create a container of type C
with index names names
, indices indices
and values at given indices given by f
.
If the method with names
is not specialized on Type{C}
, it falls back to calling container(f, indices, c)
for backwards compatibility with containers not supporting index names.
Example
julia> Containers.container((i, j) -> i + j, Containers.vectorized_product(Base.OneTo(3), Base.OneTo(3)))
+ [3, 3] = 6
Containers.container
JuMP.Containers.container
— Functioncontainer(f::Function, indices[[, ::Type{C} = AutoContainerType], names])
Create a container of type C
with index names names
, indices indices
and values at given indices given by f
.
If the method with names
is not specialized on Type{C}
, it falls back to calling container(f, indices, c)
for backwards compatibility with containers not supporting index names.
Example
julia> Containers.container((i, j) -> i + j, Containers.vectorized_product(Base.OneTo(3), Base.OneTo(3)))
3×3 Matrix{Int64}:
2 3 4
3 4 5
@@ -113,7 +113,7 @@
[1, 2] = 3
[1, 3] = 4
[2, 3] = 5
- [3, 3] = 6
Containers.rowtable
JuMP.Containers.rowtable
— Functionrowtable([f::Function=identity,] x; [header::Vector{Symbol} = Symbol[]])
Applies the function f
to all elements of the variable container x
, returning the result as a Vector
of NamedTuple
s, where header
is a vector containing the corresponding axis names.
If x
is an N
-dimensional array, there must be N+1
names, so that the last name corresponds to the result of f(x[i])
.
If header
is left empty, then the default header is [:x1, :x2, ..., :xN, :y]
.
A Vector
of NamedTuple
s implements the Tables.jl interface, and so the result can be used as input for any function that consumes a 'Tables.jl' compatible source.
Example
julia> model = Model();
+ [3, 3] = 6
Containers.rowtable
JuMP.Containers.rowtable
— Functionrowtable([f::Function=identity,] x; [header::Vector{Symbol} = Symbol[]])
Applies the function f
to all elements of the variable container x
, returning the result as a Vector
of NamedTuple
s, where header
is a vector containing the corresponding axis names.
If x
is an N
-dimensional array, there must be N+1
names, so that the last name corresponds to the result of f(x[i])
.
If header
is left empty, then the default header is [:x1, :x2, ..., :xN, :y]
.
A Vector
of NamedTuple
s implements the Tables.jl interface, and so the result can be used as input for any function that consumes a 'Tables.jl' compatible source.
Example
julia> model = Model();
julia> @variable(model, x[i=1:2, j=i:2] >= 0, start = i+j);
@@ -127,7 +127,7 @@
3-element Vector{NamedTuple{(:x1, :x2, :y), Tuple{Int64, Int64, VariableRef}}}:
(x1 = 1, x2 = 2, y = x[1,2])
(x1 = 1, x2 = 1, y = x[1,1])
- (x1 = 2, x2 = 2, y = x[2,2])
Containers.default_container
JuMP.Containers.default_container
— Functiondefault_container(indices)
If indices
is a NestedIterator
, return a SparseAxisArray
. Otherwise, indices
should be a VectorizedProductIterator
and the function returns Array
if all iterators of the product are Base.OneTo
and retunrs DenseAxisArray
otherwise.
Containers.nested
JuMP.Containers.nested
— Functionnested(iterators...; condition = (args...) -> true)
Create a NestedIterator
.
Example
julia> iterator = Containers.nested(
+ (x1 = 2, x2 = 2, y = x[2,2])
Containers.default_container
JuMP.Containers.default_container
— Functiondefault_container(indices)
If indices
is a NestedIterator
, return a SparseAxisArray
. Otherwise, indices
should be a VectorizedProductIterator
and the function returns Array
if all iterators of the product are Base.OneTo
and retunrs DenseAxisArray
otherwise.
Containers.nested
JuMP.Containers.nested
— Functionnested(iterators...; condition = (args...) -> true)
Create a NestedIterator
.
Example
julia> iterator = Containers.nested(
() -> 1:2,
(i,) -> ["A", "B"];
condition = (i, j) -> isodd(i) || j == "B",
@@ -137,12 +137,12 @@
3-element Vector{Tuple{Int64, String}}:
(1, "A")
(1, "B")
- (2, "B")
Containers.vectorized_product
JuMP.Containers.vectorized_product
— Functionvectorized_product(iterators...)
Created a VectorizedProductIterator
.
Example
julia> iterator = Containers.vectorized_product(1:2, ["A", "B"]);
+ (2, "B")
Containers.vectorized_product
JuMP.Containers.vectorized_product
— Functionvectorized_product(iterators...)
Created a VectorizedProductIterator
.
Example
julia> iterator = Containers.vectorized_product(1:2, ["A", "B"]);
julia> collect(iterator)
2×2 Matrix{Tuple{Int64, String}}:
(1, "A") (1, "B")
- (2, "A") (2, "B")
Containers.build_ref_sets
JuMP.Containers.build_ref_sets
— Functionbuild_ref_sets(_error::Function, expr)
Helper function for macros to construct container objects.
This function is for advanced users implementing JuMP extensions. See container_code
for more details.
Arguments
_error
: a function that takes a String
and throws an error, potentially annotating the input string with extra information such as from which macro it was thrown from. Use error
if you do not want a modified error message.expr
: an Expr
that specifies the container, e.g., :(x[i = 1:3, [:red, :blue], k = S; i + k <= 6])
Returns
index_vars
: a Vector{Any}
of names for the index variables, e.g., [:i, gensym(), :k]
. These may also be expressions, like :((i, j))
from a call like :(x[(i, j) in S])
.indices
: an iterator over the indices, for example, Containers.NestedIterator
Example
See container_code
for a worked example.
Containers.container_code
JuMP.Containers.container_code
— Functioncontainer_code(
+ (2, "A") (2, "B")
Containers.build_ref_sets
JuMP.Containers.build_ref_sets
— Functionbuild_ref_sets(_error::Function, expr)
Helper function for macros to construct container objects.
This function is for advanced users implementing JuMP extensions. See container_code
for more details.
Arguments
_error
: a function that takes a String
and throws an error, potentially annotating the input string with extra information such as from which macro it was thrown from. Use error
if you do not want a modified error message.expr
: an Expr
that specifies the container, e.g., :(x[i = 1:3, [:red, :blue], k = S; i + k <= 6])
Returns
index_vars
: a Vector{Any}
of names for the index variables, e.g., [:i, gensym(), :k]
. These may also be expressions, like :((i, j))
from a call like :(x[(i, j) in S])
.indices
: an iterator over the indices, for example, Containers.NestedIterator
Example
See container_code
for a worked example.
Containers.container_code
JuMP.Containers.container_code
— Functioncontainer_code(
index_vars::Vector{Any},
indices::Expr,
code,
@@ -164,7 +164,7 @@
Dimension 2, ["A", "B"]
And data, a 2×2 Matrix{String}:
"A" "B"
- "AA" "BB"
Containers.AutoContainerType
JuMP.Containers.AutoContainerType
— TypeAutoContainerType
Pass AutoContainerType
to container
to let the container type be chosen based on the type of the indices using default_container
.
Containers.NestedIterator
JuMP.Containers.NestedIterator
— Typestruct NestedIterator{T}
+ "AA" "BB"
Containers.AutoContainerType
JuMP.Containers.AutoContainerType
— TypeAutoContainerType
Pass AutoContainerType
to container
to let the container type be chosen based on the type of the indices using default_container
.
Containers.NestedIterator
JuMP.Containers.NestedIterator
— Typestruct NestedIterator{T}
iterators::T # Tuple of functions
condition::Function
end
Iterators over the tuples that are produced by a nested for loop.
Construct a NestedIterator
using nested
.
Example
julia> iterators = (() -> 1:2, (i,) -> ["A", "B"]);
@@ -187,6 +187,6 @@
end
(1, "A")
(1, "B")
-(2, "B")
Containers.VectorizedProductIterator
JuMP.Containers.VectorizedProductIterator
— Typestruct VectorizedProductIterator{T}
+(2, "B")
Containers.VectorizedProductIterator
JuMP.Containers.VectorizedProductIterator
— Typestruct VectorizedProductIterator{T}
prod::Iterators.ProductIterator{T}
-end
A wrapper type for Iterators.ProuctIterator
that discards shape information and returns a Vector
.
Construct a VectorizedProductIterator
using vectorized_product
.
Settings
This document was generated with Documenter.jl version 1.1.1 on Monday 6 November 2023. Using Julia version 1.9.3.