Library of Hyperplane Arrangements¶
A collection of useful or interesting hyperplane arrangements. See
sage.geometry.hyperplane_arrangement.arrangement for details
about how to construct your own hyperplane arrangements.
- class sage.geometry.hyperplane_arrangement.library.HyperplaneArrangementLibrary[source]¶
- Bases: - object- The library of hyperplane arrangements. - Catalan(n, K=Rational Field, names=None)[source]¶
- Return the Catalan arrangement. - INPUT: - n– integer
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The arrangement of \(3n(n-1)/2\) hyperplanes \(\{ x_i - x_j = -1,0,1 : 1 \leq i \leq j \leq n \}\). - EXAMPLES: - sage: hyperplane_arrangements.Catalan(5) Arrangement of 30 hyperplanes of dimension 5 and rank 4 - >>> from sage.all import * >>> hyperplane_arrangements.Catalan(Integer(5)) Arrangement of 30 hyperplanes of dimension 5 and rank 4 
 - Coxeter(data, K=Rational Field, names=None)[source]¶
- Return the Coxeter arrangement. - This generalizes the braid arrangements to crystallographic root systems. - INPUT: - data– either an integer or a Cartan type (or coercible into; see “CartanType”)
- K– field (default:- QQ)
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - If - datais an integer \(n\), return the braid arrangement in dimension \(n\), i.e. the set of \(n(n-1)\) hyperplanes: \(\{ x_i - x_j = 0,1 : 1 \leq i \leq j \leq n \}\). This corresponds to the Coxeter arrangement of Cartan type \(A_{n-1}\).
- If - datais a Cartan type, return the Coxeter arrangement of given type.
 - The Coxeter arrangement of a given crystallographic Cartan type is defined by the inner products \(\langle a,x \rangle = 0\) where \(a \in \Phi^+\) runs over positive roots of the root system \(\Phi\). - EXAMPLES: - sage: # needs sage.combinat sage: hyperplane_arrangements.Coxeter(4) Arrangement of 6 hyperplanes of dimension 4 and rank 3 sage: hyperplane_arrangements.Coxeter("B4") Arrangement of 16 hyperplanes of dimension 4 and rank 4 sage: hyperplane_arrangements.Coxeter("A3") Arrangement of 6 hyperplanes of dimension 4 and rank 3 - >>> from sage.all import * >>> # needs sage.combinat >>> hyperplane_arrangements.Coxeter(Integer(4)) Arrangement of 6 hyperplanes of dimension 4 and rank 3 >>> hyperplane_arrangements.Coxeter("B4") Arrangement of 16 hyperplanes of dimension 4 and rank 4 >>> hyperplane_arrangements.Coxeter("A3") Arrangement of 6 hyperplanes of dimension 4 and rank 3 - If the Cartan type is not crystallographic, the Coxeter arrangement is not implemented yet: - sage: hyperplane_arrangements.Coxeter("H3") # needs sage.libs.gap Traceback (most recent call last): ... NotImplementedError: Coxeter arrangements are not implemented for non crystallographic Cartan types - >>> from sage.all import * >>> hyperplane_arrangements.Coxeter("H3") # needs sage.libs.gap Traceback (most recent call last): ... NotImplementedError: Coxeter arrangements are not implemented for non crystallographic Cartan types - The characteristic polynomial is pre-computed using the results of Terao, see [Ath2000]: - sage: # needs sage.combinat sage: hyperplane_arrangements.Coxeter("A3").characteristic_polynomial() x^3 - 6*x^2 + 11*x - 6 - >>> from sage.all import * >>> # needs sage.combinat >>> hyperplane_arrangements.Coxeter("A3").characteristic_polynomial() x^3 - 6*x^2 + 11*x - 6 
 - G_Shi(G, K=Rational Field, names=None)[source]¶
- Return the Shi hyperplane arrangement of a graph \(G\). - INPUT: - G– graph
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: the Shi hyperplane arrangement of the given graph - G- EXAMPLES: - sage: # needs sage.graphs sage: G = graphs.CompleteGraph(5) sage: hyperplane_arrangements.G_Shi(G) Arrangement of 20 hyperplanes of dimension 5 and rank 4 sage: g = graphs.HouseGraph() sage: hyperplane_arrangements.G_Shi(g) Arrangement of 12 hyperplanes of dimension 5 and rank 4 sage: a = hyperplane_arrangements.G_Shi(graphs.WheelGraph(4)); a Arrangement of 12 hyperplanes of dimension 4 and rank 3 - >>> from sage.all import * >>> # needs sage.graphs >>> G = graphs.CompleteGraph(Integer(5)) >>> hyperplane_arrangements.G_Shi(G) Arrangement of 20 hyperplanes of dimension 5 and rank 4 >>> g = graphs.HouseGraph() >>> hyperplane_arrangements.G_Shi(g) Arrangement of 12 hyperplanes of dimension 5 and rank 4 >>> a = hyperplane_arrangements.G_Shi(graphs.WheelGraph(Integer(4))); a Arrangement of 12 hyperplanes of dimension 4 and rank 3 
 - G_semiorder(G, K=Rational Field, names=None)[source]¶
- Return the semiorder hyperplane arrangement of a graph. - INPUT: - G– graph
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The semiorder hyperplane arrangement of a graph G is the arrangement \(\{ x_i - x_j = -1,1 \}\) where \(ij\) is an edge of - G.- EXAMPLES: - sage: # needs sage.graphs sage: G = graphs.CompleteGraph(5) sage: hyperplane_arrangements.G_semiorder(G) Arrangement of 20 hyperplanes of dimension 5 and rank 4 sage: g = graphs.HouseGraph() sage: hyperplane_arrangements.G_semiorder(g) Arrangement of 12 hyperplanes of dimension 5 and rank 4 - >>> from sage.all import * >>> # needs sage.graphs >>> G = graphs.CompleteGraph(Integer(5)) >>> hyperplane_arrangements.G_semiorder(G) Arrangement of 20 hyperplanes of dimension 5 and rank 4 >>> g = graphs.HouseGraph() >>> hyperplane_arrangements.G_semiorder(g) Arrangement of 12 hyperplanes of dimension 5 and rank 4 
 - Ish(n, K=Rational Field, names=None)[source]¶
- Return the Ish arrangement. - INPUT: - n– integer
- K– field (default:- QQ)
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The Ish arrangement, which is the set of \(n(n-1)\) hyperplanes. \[\{ x_i - x_j = 0 : 1 \leq i \leq j \leq n \} \cup \{ x_1 - x_j = i : 1 \leq i \leq j \leq n \}.\]- EXAMPLES: - sage: # needs sage.combinat sage: a = hyperplane_arrangements.Ish(3); a Arrangement of 6 hyperplanes of dimension 3 and rank 2 sage: a.characteristic_polynomial() x^3 - 6*x^2 + 9*x sage: b = hyperplane_arrangements.Shi(3) sage: b.characteristic_polynomial() x^3 - 6*x^2 + 9*x - >>> from sage.all import * >>> # needs sage.combinat >>> a = hyperplane_arrangements.Ish(Integer(3)); a Arrangement of 6 hyperplanes of dimension 3 and rank 2 >>> a.characteristic_polynomial() x^3 - 6*x^2 + 9*x >>> b = hyperplane_arrangements.Shi(Integer(3)) >>> b.characteristic_polynomial() x^3 - 6*x^2 + 9*x - REFERENCES: 
 - IshB(n, K=Rational Field, names=None)[source]¶
- Return the type B Ish arrangement. - INPUT: - n– integer
- K– field (default:- QQ)
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: the type \(B\) Ish arrangement, which is the set of \(2n^2\) hyperplanes \[\{ x_i \pm x_j = 0 : 1 \leq i < j \leq n \} \cup \{ x_i = a : 1 \leq i\leq n, \quad i - n \leq a \leq n - i + 1 \}.\]- EXAMPLES: - sage: a = hyperplane_arrangements.IshB(2) sage: a Arrangement of 8 hyperplanes of dimension 2 and rank 2 sage: a.hyperplanes() (Hyperplane 0*t0 + t1 - 1, Hyperplane 0*t0 + t1 + 0, Hyperplane t0 - t1 + 0, Hyperplane t0 + 0*t1 - 2, Hyperplane t0 + 0*t1 - 1, Hyperplane t0 + 0*t1 + 0, Hyperplane t0 + 0*t1 + 1, Hyperplane t0 + t1 + 0) sage: a.cone().is_free() # needs sage.libs.singular True - >>> from sage.all import * >>> a = hyperplane_arrangements.IshB(Integer(2)) >>> a Arrangement of 8 hyperplanes of dimension 2 and rank 2 >>> a.hyperplanes() (Hyperplane 0*t0 + t1 - 1, Hyperplane 0*t0 + t1 + 0, Hyperplane t0 - t1 + 0, Hyperplane t0 + 0*t1 - 2, Hyperplane t0 + 0*t1 - 1, Hyperplane t0 + 0*t1 + 0, Hyperplane t0 + 0*t1 + 1, Hyperplane t0 + t1 + 0) >>> a.cone().is_free() # needs sage.libs.singular True - sage: a = hyperplane_arrangements.IshB(3); a Arrangement of 18 hyperplanes of dimension 3 and rank 3 sage: a.characteristic_polynomial() x^3 - 18*x^2 + 108*x - 216 sage: b = hyperplane_arrangements.Shi(['B', 3]) sage: b.characteristic_polynomial() x^3 - 18*x^2 + 108*x - 216 - >>> from sage.all import * >>> a = hyperplane_arrangements.IshB(Integer(3)); a Arrangement of 18 hyperplanes of dimension 3 and rank 3 >>> a.characteristic_polynomial() x^3 - 18*x^2 + 108*x - 216 >>> b = hyperplane_arrangements.Shi(['B', Integer(3)]) >>> b.characteristic_polynomial() x^3 - 18*x^2 + 108*x - 216 - REFERENCES: 
 - Shi(data, K=Rational Field, names=None, m=1)[source]¶
- Return the Shi arrangement. - INPUT: - data– either an integer or a Cartan type (or coercible into; see “CartanType”)
- K– field (default:- QQ)
- names– tuple of strings or- None(default); the variable names for the ambient space
- m– integer (default: 1)
 - OUTPUT: - If - datais an integer \(n\), return the Shi arrangement in dimension \(n\), i.e. the set of \(n(n-1)\) hyperplanes: \(\{ x_i - x_j = 0,1 : 1 \leq i \leq j \leq n \}\). This corresponds to the Shi arrangement of Cartan type \(A_{n-1}\).
- If - datais a Cartan type, return the Shi arrangement of given type.
- If \(m > 1\), return the \(m\)-extended Shi arrangement of given type. 
 - The \(m\)-extended Shi arrangement of a given crystallographic Cartan type is defined by the inner product \(\langle a,x \rangle = k\) for \(-m < k \leq m\) and \(a \in \Phi^+\) is a positive root of the root system \(\Phi\). - EXAMPLES: - sage: # needs sage.combinat sage: hyperplane_arrangements.Shi(4) Arrangement of 12 hyperplanes of dimension 4 and rank 3 sage: hyperplane_arrangements.Shi("A3") Arrangement of 12 hyperplanes of dimension 4 and rank 3 sage: hyperplane_arrangements.Shi("A3", m=2) Arrangement of 24 hyperplanes of dimension 4 and rank 3 sage: hyperplane_arrangements.Shi("B4") Arrangement of 32 hyperplanes of dimension 4 and rank 4 sage: hyperplane_arrangements.Shi("B4", m=3) Arrangement of 96 hyperplanes of dimension 4 and rank 4 sage: hyperplane_arrangements.Shi("C3") Arrangement of 18 hyperplanes of dimension 3 and rank 3 sage: hyperplane_arrangements.Shi("D4", m=3) Arrangement of 72 hyperplanes of dimension 4 and rank 4 sage: hyperplane_arrangements.Shi("E6") Arrangement of 72 hyperplanes of dimension 8 and rank 6 sage: hyperplane_arrangements.Shi("E6", m=2) Arrangement of 144 hyperplanes of dimension 8 and rank 6 - >>> from sage.all import * >>> # needs sage.combinat >>> hyperplane_arrangements.Shi(Integer(4)) Arrangement of 12 hyperplanes of dimension 4 and rank 3 >>> hyperplane_arrangements.Shi("A3") Arrangement of 12 hyperplanes of dimension 4 and rank 3 >>> hyperplane_arrangements.Shi("A3", m=Integer(2)) Arrangement of 24 hyperplanes of dimension 4 and rank 3 >>> hyperplane_arrangements.Shi("B4") Arrangement of 32 hyperplanes of dimension 4 and rank 4 >>> hyperplane_arrangements.Shi("B4", m=Integer(3)) Arrangement of 96 hyperplanes of dimension 4 and rank 4 >>> hyperplane_arrangements.Shi("C3") Arrangement of 18 hyperplanes of dimension 3 and rank 3 >>> hyperplane_arrangements.Shi("D4", m=Integer(3)) Arrangement of 72 hyperplanes of dimension 4 and rank 4 >>> hyperplane_arrangements.Shi("E6") Arrangement of 72 hyperplanes of dimension 8 and rank 6 >>> hyperplane_arrangements.Shi("E6", m=Integer(2)) Arrangement of 144 hyperplanes of dimension 8 and rank 6 - If the Cartan type is not crystallographic, the Shi arrangement is not defined: - sage: hyperplane_arrangements.Shi("H4") Traceback (most recent call last): ... NotImplementedError: Shi arrangements are not defined for non crystallographic Cartan types - >>> from sage.all import * >>> hyperplane_arrangements.Shi("H4") Traceback (most recent call last): ... NotImplementedError: Shi arrangements are not defined for non crystallographic Cartan types - The characteristic polynomial is pre-computed using the results of [Ath1996]: - sage: # needs sage.combinat sage: hyperplane_arrangements.Shi("A3").characteristic_polynomial() x^4 - 12*x^3 + 48*x^2 - 64*x sage: hyperplane_arrangements.Shi("A3", m=2).characteristic_polynomial() x^4 - 24*x^3 + 192*x^2 - 512*x sage: hyperplane_arrangements.Shi("C3").characteristic_polynomial() x^3 - 18*x^2 + 108*x - 216 sage: hyperplane_arrangements.Shi("E6").characteristic_polynomial() x^8 - 72*x^7 + 2160*x^6 - 34560*x^5 + 311040*x^4 - 1492992*x^3 + 2985984*x^2 sage: hyperplane_arrangements.Shi("B4", m=3).characteristic_polynomial() x^4 - 96*x^3 + 3456*x^2 - 55296*x + 331776 - >>> from sage.all import * >>> # needs sage.combinat >>> hyperplane_arrangements.Shi("A3").characteristic_polynomial() x^4 - 12*x^3 + 48*x^2 - 64*x >>> hyperplane_arrangements.Shi("A3", m=Integer(2)).characteristic_polynomial() x^4 - 24*x^3 + 192*x^2 - 512*x >>> hyperplane_arrangements.Shi("C3").characteristic_polynomial() x^3 - 18*x^2 + 108*x - 216 >>> hyperplane_arrangements.Shi("E6").characteristic_polynomial() x^8 - 72*x^7 + 2160*x^6 - 34560*x^5 + 311040*x^4 - 1492992*x^3 + 2985984*x^2 >>> hyperplane_arrangements.Shi("B4", m=Integer(3)).characteristic_polynomial() x^4 - 96*x^3 + 3456*x^2 - 55296*x + 331776 
 - bigraphical(G, A=None, K=Rational Field, names=None)[source]¶
- Return a bigraphical hyperplane arrangement. - INPUT: - G– graph
- A– list, matrix, dictionary (default:- Nonegives semiorder), or the string ‘generic’
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The hyperplane arrangement with hyperplanes \(x_i - x_j = A[i,j]\) and \(x_j - x_i = A[j,i]\) for each edge \(v_i, v_j\) of - G. The indices \(i,j\) are the indices of elements of- G.vertices().- EXAMPLES: - sage: # needs sage.graphs sage: G = graphs.CycleGraph(4) sage: G.edges(sort=True) [(0, 1, None), (0, 3, None), (1, 2, None), (2, 3, None)] sage: G.edges(sort=True, labels=False) [(0, 1), (0, 3), (1, 2), (2, 3)] sage: A = {0:{1:1, 3:2}, 1:{0:3, 2:0}, 2:{1:2, 3:1}, 3:{2:0, 0:2}} sage: HA = hyperplane_arrangements.bigraphical(G, A) sage: HA.n_regions() 63 sage: hyperplane_arrangements.bigraphical(G, # random ....: 'generic').n_regions() 65 sage: hyperplane_arrangements.bigraphical(G).n_regions() 59 - >>> from sage.all import * >>> # needs sage.graphs >>> G = graphs.CycleGraph(Integer(4)) >>> G.edges(sort=True) [(0, 1, None), (0, 3, None), (1, 2, None), (2, 3, None)] >>> G.edges(sort=True, labels=False) [(0, 1), (0, 3), (1, 2), (2, 3)] >>> A = {Integer(0):{Integer(1):Integer(1), Integer(3):Integer(2)}, Integer(1):{Integer(0):Integer(3), Integer(2):Integer(0)}, Integer(2):{Integer(1):Integer(2), Integer(3):Integer(1)}, Integer(3):{Integer(2):Integer(0), Integer(0):Integer(2)}} >>> HA = hyperplane_arrangements.bigraphical(G, A) >>> HA.n_regions() 63 >>> hyperplane_arrangements.bigraphical(G, # random ... 'generic').n_regions() 65 >>> hyperplane_arrangements.bigraphical(G).n_regions() 59 - REFERENCES: 
 - braid(n, K=Rational Field, names=None)[source]¶
- The braid arrangement. - INPUT: - n– integer
- K– field (default:- QQ)
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The hyperplane arrangement consisting of the \(n(n-1)/2\) hyperplanes \(\{ x_i - x_j = 0 : 1 \leq i \leq j \leq n \}\). - EXAMPLES: - sage: hyperplane_arrangements.braid(4) # needs sage.graphs Arrangement of 6 hyperplanes of dimension 4 and rank 3 - >>> from sage.all import * >>> hyperplane_arrangements.braid(Integer(4)) # needs sage.graphs Arrangement of 6 hyperplanes of dimension 4 and rank 3 
 - coordinate(n, K=Rational Field, names=None)[source]¶
- Return the coordinate hyperplane arrangement. - INPUT: - n– integer
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The coordinate hyperplane arrangement, which is the central hyperplane arrangement consisting of the coordinate hyperplanes \(x_i = 0\). - EXAMPLES: - sage: hyperplane_arrangements.coordinate(5) Arrangement of 5 hyperplanes of dimension 5 and rank 5 - >>> from sage.all import * >>> hyperplane_arrangements.coordinate(Integer(5)) Arrangement of 5 hyperplanes of dimension 5 and rank 5 
 - graphical(G, K=Rational Field, names=None)[source]¶
- Return the graphical hyperplane arrangement of a graph - G.- INPUT: - G– graph
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The graphical hyperplane arrangement of a graph G, which is the arrangement \(\{ x_i - x_j = 0 \}\) for all edges \(ij\) of the graph - G.- EXAMPLES: - sage: # needs sage.graphs sage: G = graphs.CompleteGraph(5) sage: hyperplane_arrangements.graphical(G) Arrangement of 10 hyperplanes of dimension 5 and rank 4 sage: g = graphs.HouseGraph() sage: hyperplane_arrangements.graphical(g) Arrangement of 6 hyperplanes of dimension 5 and rank 4 - >>> from sage.all import * >>> # needs sage.graphs >>> G = graphs.CompleteGraph(Integer(5)) >>> hyperplane_arrangements.graphical(G) Arrangement of 10 hyperplanes of dimension 5 and rank 4 >>> g = graphs.HouseGraph() >>> hyperplane_arrangements.graphical(g) Arrangement of 6 hyperplanes of dimension 5 and rank 4 
 - linial(n, K=Rational Field, names=None)[source]¶
- Return the linial hyperplane arrangement. - INPUT: - n– integer
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The linial hyperplane arrangement is the set of hyperplanes \(\{x_i - x_j = 1 : 1\leq i < j \leq n\}\). - EXAMPLES: - sage: a = hyperplane_arrangements.linial(4); a Arrangement of 6 hyperplanes of dimension 4 and rank 3 sage: a.characteristic_polynomial() x^4 - 6*x^3 + 15*x^2 - 14*x - >>> from sage.all import * >>> a = hyperplane_arrangements.linial(Integer(4)); a Arrangement of 6 hyperplanes of dimension 4 and rank 3 >>> a.characteristic_polynomial() x^4 - 6*x^3 + 15*x^2 - 14*x 
 - semiorder(n, K=Rational Field, names=None)[source]¶
- Return the semiorder arrangement. - INPUT: - n– integer
- K– field (default: \(\QQ\))
- names– tuple of strings or- None(default); the variable names for the ambient space
 - OUTPUT: - The semiorder arrangement, which is the set of \(n(n-1)\) hyperplanes \(\{ x_i - x_j = -1,1 : 1 \leq i \leq j \leq n\}\). - EXAMPLES: - sage: hyperplane_arrangements.semiorder(4) Arrangement of 12 hyperplanes of dimension 4 and rank 3 - >>> from sage.all import * >>> hyperplane_arrangements.semiorder(Integer(4)) Arrangement of 12 hyperplanes of dimension 4 and rank 3 
 
- sage.geometry.hyperplane_arrangement.library.make_parent(base_ring, dimension, names=None)[source]¶
- Construct the parent for the hyperplane arrangements. - For internal use only. - INPUT: - base_ring– a ring
- dimension– integer
- names–- None(default) or a list/tuple/iterable of strings
 - OUTPUT: - A new - HyperplaneArrangementsinstance.- EXAMPLES: - sage: from sage.geometry.hyperplane_arrangement.library import make_parent sage: make_parent(QQ, 3) Hyperplane arrangements in 3-dimensional linear space over Rational Field with coordinates t0, t1, t2 - >>> from sage.all import * >>> from sage.geometry.hyperplane_arrangement.library import make_parent >>> make_parent(QQ, Integer(3)) Hyperplane arrangements in 3-dimensional linear space over Rational Field with coordinates t0, t1, t2