from application fan
A hyperplane arrangement. The hyperplane arrangement is given by a matrix HYPERPLANES
whose rows are the linear equations of the hyperplanes and an optional support cone. The support cone defaults to being the whole space. Duplicate hyperplanes are ignored, as well as hyperplanes that intersect the support cone trivially. The support cone is subdivided by the hyperplanes resulting in a fan CHAMBER_DECOMPOSITION
.
Scalar
: numeric data type used for the coordinates, must be an ordered field. Default is Rational
.
Take the 2-dimensional positive orthant and slice it along the ray through (1,1)
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; 0 1 1 0 1 1
> print $CD->MAXIMAL_CONES; {1 2} {0 2}
Coxeter hyperplane arrangement of type E8.
> $E8 = new HyperplaneArrangement(HYPERPLANES=>root_system("E8")->VECTORS->minor(All,~[0]));
Note that the roots lie “at infinity”, which is why the leading zero column of the root vectors is eliminated.
permuting the RAYS
These properties are for input only. They allow redundant information.
SUPPORT
A cone being subdivided by the HYPERPLANES
defaults to the whole space.
Cone<Scalar>
Take the 2-dimensional positive orthant and slice it along the ray through (1,1)
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; 0 1 1 0 1 1
> print $CD->MAXIMAL_CONES; {1 2} {0 2}
Subdivide the two-dimensional space along the axes
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; -1 0 0 -1 0 1 1 0
> print $CD->MAXIMAL_CONES; {2 3} {1 3} {0 2} {0 1}
> print $CD->COMPLETE; true
These properties capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice.
CHAMBER_SIGNATURES
The i-th entry is the signature of the i-th maximal cone of the CHAMBER_DECOMPOSITION
as Set<Int> # of indices of the HYPERPLANES
that evaluate positively on this cone.
Take the 2-dimensional positive orthant and slice it along the ray through (1,1)
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->MAXIMAL_CONES; {1 2} {0 2}
> print $HA->CHAMBER_SIGNATURES; {} {0}
> print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[0]); {}
> print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[1]); {0}
> print $HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0]); 0
> print $CD->MAXIMAL_CONES->[$HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0])]; {1 2}
N_HYPERPLANES
Number of HYPERPLANES
. Alias for property N_VECTORS
.
Coordinate hyperplane arrangement in the plane.
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,0],[0,1]]); > print $HA->N_HYPERPLANES; 2
RAYS_IN_HYPERPLANES
Incidences between RAYS
and HYPERPLANES
.
These properties capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets.
CHAMBER_DECOMPOSITION
Slicing the SUPPORT
along every hyperplane of HYPERPLANES
one gets a polyhedral fan.
PolyhedralFan<Scalar>
Take the 2-dimensional positive orthant and slice it along the ray through (1,1)
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; 0 1 1 0 1 1
> print $CD->MAXIMAL_CONES; {1 2} {0 2}
HYPERPLANES
A matrix containing the hyperplanes of the arrangement as rows. Alias for property VECTORS
.
Matrix<Scalar,NonSymmetric>
The same hyperplane with opposing directions.
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,-1],[-1,1],[1,1]]); > print $HA->HYPERPLANES; 1 -1 -1 1 1 1
A hyperplane that does not cut through the SUPPORT
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,1]], "SUPPORT.INEQUALITIES"=>unit_matrix(2)); > print $HA->HYPERPLANES; 1 1
HYPERPLANE_AMBIENT_DIM
Dimension of the space which contains the hyperplane arrangement. Alias for property VECTOR_AMBIENT_DIM
.
LINEALITY_SPACE
A basis of the lineality space of the hyperplane arrangement.
Matrix<Scalar,NonSymmetric>
HYPERPLANE_LABELS
For a polyhedral fan built from scratch, you should create this property by yourself, either manually in a text editor, or with a client program.
These methods capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice.
chamber_to_signature
Given a maximal cone of CHAMBER_DECOMPOSITION
as Set<Int> containing the indices of the rays spanning it, return the signature of the cone as Set<Int> of indices of the HYPERPLANES
that evaluate negatively on this cone.
Take the 2-dimensional positive orthant and slice it along the ray through (1,1)
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->MAXIMAL_CONES; {1 2} {0 2}
> print $HA->CHAMBER_SIGNATURES; {} {0}
> print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[0]); {}
> print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[1]); {0}
> print $HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0]); 0
> print $CD->MAXIMAL_CONES->[$HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0])]; {1 2}
signature_to_chamber
Given a signature as a Set<Int> of indices that indicate which HYPERPLANES
should evaluate negatively (the remaining evaluate positively), return the maximal cone of CHAMBER_DECOMPOSITION
associated to this signature. The result the index of the maximal cone in the maximal cones of CHAMBER_DECOMPOSITION
.
Take the 2-dimensional positive orthant and slice it along the ray through (1,1)
> $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->MAXIMAL_CONES; {1 2} {0 2}
> print $HA->CHAMBER_SIGNATURES; {} {0}
> print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[0]); {}
> print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[1]); {0}
> print $HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0]); 0
> print $CD->MAXIMAL_CONES->[$HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0])]; {1 2}
These methods are for visualization.
VISUAL()
Visualizes the fan, intersected with the unit ball.
geometric_options_linear