Klyachko bundles and sheaves#
Klyachko bundles are torus-equivariant bundles on toric
varieties. That is, the action of the maximal torus on the toric
variety lifts to an action on the bundle. There is an equivalence of
categories between Klyachko bundles [Kly1990] and multiple filtrations (one for
each ray of the fan) of a vector space. The multi-filtrations are
implemented in sage.modules.multi_filtered_vector_space
.
EXAMPLES:
sage: X = toric_varieties.dP6xdP6()
sage: TX = X.sheaves.tangent_bundle()
sage: Alt2TX = TX.exterior_power(2); Alt2TX
Rank 6 bundle on 4-d CPR-Fano toric variety covered by 36 affine patches.
sage: K = X.sheaves.line_bundle(X.K())
sage: antiK = X.sheaves.line_bundle(-X.K())
sage: (Alt2TX * K).cohomology(dim=True, weight=(0,0,0,0)) # long time
(0, 0, 18, 0, 0)
sage: G_sum = TX + X.sheaves.trivial_bundle(2)
sage: V_sum = G_sum.wedge(2) * K # long time
sage: V_sum.cohomology(dim=True, weight=(0,0,0,0)) # long time
(0, 0, 18, 16, 1)
sage: Gtilde = G_sum.random_deformation()
sage: V = Gtilde.wedge(2) * K # long time
sage: V.cohomology(dim=True, weight=(0,0,0,0)) # long time # random failure (see #32773)
(0, 0, 3, 0, 0)
>>> from sage.all import *
>>> X = toric_varieties.dP6xdP6()
>>> TX = X.sheaves.tangent_bundle()
>>> Alt2TX = TX.exterior_power(Integer(2)); Alt2TX
Rank 6 bundle on 4-d CPR-Fano toric variety covered by 36 affine patches.
>>> K = X.sheaves.line_bundle(X.K())
>>> antiK = X.sheaves.line_bundle(-X.K())
>>> (Alt2TX * K).cohomology(dim=True, weight=(Integer(0),Integer(0),Integer(0),Integer(0))) # long time
(0, 0, 18, 0, 0)
>>> G_sum = TX + X.sheaves.trivial_bundle(Integer(2))
>>> V_sum = G_sum.wedge(Integer(2)) * K # long time
>>> V_sum.cohomology(dim=True, weight=(Integer(0),Integer(0),Integer(0),Integer(0))) # long time
(0, 0, 18, 16, 1)
>>> Gtilde = G_sum.random_deformation()
>>> V = Gtilde.wedge(Integer(2)) * K # long time
>>> V.cohomology(dim=True, weight=(Integer(0),Integer(0),Integer(0),Integer(0))) # long time # random failure (see #32773)
(0, 0, 3, 0, 0)
REFERENCES:
- sage.schemes.toric.sheaf.klyachko.Bundle(toric_variety, multi_filtration, check=True)[source]#
Construct a Klyacho bundle
INPUT:
toric_variety
– a toric variety. The base space of the bundle.multi_filtration
– a multi-filtered vectors space with multiple filtrations being indexed by the one-dimensional cones of the fan. Either an instance ofMultiFilteredVectorSpace()
or something (like a dictionary of ordinary filtered vector spaces).
EXAMPLES:
sage: P1 = toric_varieties.P1() sage: v1, v2, v3 = [(1,0,0), (0,1,0), (0,0,1)] sage: F1 = FilteredVectorSpace({1: [v1, v2, v3], 3: [v1]}) sage: F2 = FilteredVectorSpace({0: [v1, v2, v3], 2: [v2, v3]}) sage: P1 = toric_varieties.P1() sage: r1, r2 = P1.fan().rays() sage: F = MultiFilteredVectorSpace({r1: F1, r2: F2}); F Filtrations N(-1): QQ^3 >= QQ^2 >= QQ^2 >= 0 >= 0 N(1): QQ^3 >= QQ^3 >= QQ^1 >= QQ^1 >= 0
>>> from sage.all import * >>> P1 = toric_varieties.P1() >>> v1, v2, v3 = [(Integer(1),Integer(0),Integer(0)), (Integer(0),Integer(1),Integer(0)), (Integer(0),Integer(0),Integer(1))] >>> F1 = FilteredVectorSpace({Integer(1): [v1, v2, v3], Integer(3): [v1]}) >>> F2 = FilteredVectorSpace({Integer(0): [v1, v2, v3], Integer(2): [v2, v3]}) >>> P1 = toric_varieties.P1() >>> r1, r2 = P1.fan().rays() >>> F = MultiFilteredVectorSpace({r1: F1, r2: F2}); F Filtrations N(-1): QQ^3 >= QQ^2 >= QQ^2 >= 0 >= 0 N(1): QQ^3 >= QQ^3 >= QQ^1 >= QQ^1 >= 0
You should use the
Klyachko()
method to construct instances:sage: P1.sheaves.Klyachko(F) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches. sage: P1.sheaves.Klyachko({r1: F1, r2: F2}) # alternative Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches.
>>> from sage.all import * >>> P1.sheaves.Klyachko(F) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches. >>> P1.sheaves.Klyachko({r1: F1, r2: F2}) # alternative Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches.
The above is just a shorthand for:
sage: from sage.schemes.toric.sheaf.klyachko import Bundle sage: Bundle(P1, F) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches.
>>> from sage.all import * >>> from sage.schemes.toric.sheaf.klyachko import Bundle >>> Bundle(P1, F) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches.
- class sage.schemes.toric.sheaf.klyachko.KlyachkoBundle_class(toric_variety, multi_filtration, check=True)[source]#
Bases:
SageObject
A toric bundle using Klyachko’s representation.
Warning
You should always use the
Bundle()
factory function to construct instances.INPUT:
toric_variety
– a toric variety. The base space of the bundle.multi_filtration
– aMultiFilteredVectorSpace()
with index set the rays of the fan.check
– boolean (default:True
). Whether to perform consistency checks.
EXAMPLES:
sage: P1 = toric_varieties.P1() sage: r1, r2 = P1.fan().rays() sage: F = MultiFilteredVectorSpace({ ....: r1: FilteredVectorSpace(3,1), ....: r2: FilteredVectorSpace(3,0)}); F Filtrations N(-1): QQ^3 >= 0 >= 0 N(1): QQ^3 >= QQ^3 >= 0 sage: from sage.schemes.toric.sheaf.klyachko import Bundle sage: Bundle(P1, F) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches.
>>> from sage.all import * >>> P1 = toric_varieties.P1() >>> r1, r2 = P1.fan().rays() >>> F = MultiFilteredVectorSpace({ ... r1: FilteredVectorSpace(Integer(3),Integer(1)), ... r2: FilteredVectorSpace(Integer(3),Integer(0))}); F Filtrations N(-1): QQ^3 >= 0 >= 0 N(1): QQ^3 >= QQ^3 >= 0 >>> from sage.schemes.toric.sheaf.klyachko import Bundle >>> Bundle(P1, F) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches.
- E_degree(alpha, m)[source]#
Return the vector subspace \(E^\alpha(m)\).
INPUT:
alpha
– a ray of the fan. Can be specified by its index (an integer), a one-dimensional cone, or a \(N\)-lattice point.m
– tuple of integers or \(M\)-lattice point. A point in the dual lattice of the fan.
OUTPUT:
The subspace \(E^\alpha(\alpha m)\) of the filtration indexed by the ray \(\alpha\) and at the filtration degree \(\alpha * m\)
EXAMPLES:
sage: X = toric_varieties.P2() sage: M = X.fan().dual_lattice() sage: V = X.sheaves.tangent_bundle() sage: V.E_degree(X.fan().ray(0), (1,0)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] sage: V.E_degree(X.fan(1)[0], (1,0)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] sage: V.E_degree(0, (1,0)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0]
>>> from sage.all import * >>> X = toric_varieties.P2() >>> M = X.fan().dual_lattice() >>> V = X.sheaves.tangent_bundle() >>> V.E_degree(X.fan().ray(Integer(0)), (Integer(1),Integer(0))) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] >>> V.E_degree(X.fan(Integer(1))[Integer(0)], (Integer(1),Integer(0))) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] >>> V.E_degree(Integer(0), (Integer(1),Integer(0))) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0]
- E_intersection(sigma, m)[source]#
Return the vector subspace \(E^\sigma(m)\).
See [Kly1990], equation 4.1.
INPUT:
sigma
– a cone of the fan of the base toric variety.m
– tuple of integers or \(M\)-lattice point. A point in the dual lattice of the fan. Must be immutable.
OUTPUT: The subspace \(E^\sigma(m)\).
EXAMPLES:
sage: X = toric_varieties.P2() sage: fan = X.fan() sage: V = X.sheaves.tangent_bundle() sage: V.E_intersection(fan(1)[0], (1,0)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] sage: V.E_intersection(fan(2)[0], (-1,1)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [0 1]
>>> from sage.all import * >>> X = toric_varieties.P2() >>> fan = X.fan() >>> V = X.sheaves.tangent_bundle() >>> V.E_intersection(fan(Integer(1))[Integer(0)], (Integer(1),Integer(0))) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] >>> V.E_intersection(fan(Integer(2))[Integer(0)], (-Integer(1),Integer(1))) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [0 1]
For the empty cone, this is always the whole vector space:
sage: V.E_intersection(fan(0)[0], (1,0)) Vector space of dimension 2 over Rational Field
>>> from sage.all import * >>> V.E_intersection(fan(Integer(0))[Integer(0)], (Integer(1),Integer(0))) Vector space of dimension 2 over Rational Field
- E_quotient(sigma, m)[source]#
Return the vector space quotient \(E_\sigma(m)\).
See [Kly1990], equation 4.1.
INPUT:
sigma
– a cone of the fan of the base toric variety.m
– tuple of integers or \(M\)-lattice point. A point in the dual lattice of the fan. Must be immutable.
OUTPUT: The subspace \(E_\sigma(m)\).
EXAMPLES:
sage: X = toric_varieties.P2() sage: fan = X.fan() sage: M = fan.dual_lattice() sage: cone = fan(1)[0] sage: V = X.sheaves.tangent_bundle() sage: m = M(1, 0) sage: m.set_immutable() sage: V.E_quotient(cone, m) Vector space quotient V/W of dimension 1 over Rational Field where V: Vector space of dimension 2 over Rational Field W: Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] sage: V.E_quotient(fan(2)[0], (-1,1)) Vector space quotient V/W of dimension 0 over Rational Field where V: Vector space of dimension 2 over Rational Field W: Vector space of degree 2 and dimension 2 over Rational Field Basis matrix: [1 0] [0 1]
>>> from sage.all import * >>> X = toric_varieties.P2() >>> fan = X.fan() >>> M = fan.dual_lattice() >>> cone = fan(Integer(1))[Integer(0)] >>> V = X.sheaves.tangent_bundle() >>> m = M(Integer(1), Integer(0)) >>> m.set_immutable() >>> V.E_quotient(cone, m) Vector space quotient V/W of dimension 1 over Rational Field where V: Vector space of dimension 2 over Rational Field W: Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] >>> V.E_quotient(fan(Integer(2))[Integer(0)], (-Integer(1),Integer(1))) Vector space quotient V/W of dimension 0 over Rational Field where V: Vector space of dimension 2 over Rational Field W: Vector space of degree 2 and dimension 2 over Rational Field Basis matrix: [1 0] [0 1]
- E_quotient_projection(sigma, tau, m)[source]#
Return the projection map \(E_\sigma(m) \to E_\tau(m)\) where \(\sigma\) is a face of \(\tau\).
INPUT:
sigma
– a cone of the fan of the base toric variety.tau
– a cone of the fan containingsigma
.m
– tuple of integers or \(M\)-lattice point. A point in the dual lattice of the fan. Must be immutable.
OUTPUT:
The restriction map
\[E_\sigma(m) \to E_\tau(m)\]EXAMPLES:
sage: P3 = toric_varieties.P(3) sage: rays = [(1,0,0), (0,1,0), (0,0,1)] sage: F1 = FilteredVectorSpace(rays, {0: [0], 1: [2], 2: [1]}) sage: F2 = FilteredVectorSpace(3, 0) sage: r = P3.fan().rays() sage: V = P3.sheaves.Klyachko({r[0]: F1, r[1]: F2, r[2]: F2, r[3]: F2}) sage: tau = Cone([(1,0,0), (0,1,0)]) sage: sigma = Cone([(1,0,0)]) sage: M = P3.fan().dual_lattice() sage: m = M(2,1,0) sage: m.set_immutable() sage: V.E_quotient(sigma, m) Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0] sage: V.E_quotient(tau, m) Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0] sage: V.E_quotient_projection(sigma, tau, m) Vector space morphism represented by the matrix: [1 0] [0 1] Domain: Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0] Codomain: Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0]
>>> from sage.all import * >>> P3 = toric_varieties.P(Integer(3)) >>> rays = [(Integer(1),Integer(0),Integer(0)), (Integer(0),Integer(1),Integer(0)), (Integer(0),Integer(0),Integer(1))] >>> F1 = FilteredVectorSpace(rays, {Integer(0): [Integer(0)], Integer(1): [Integer(2)], Integer(2): [Integer(1)]}) >>> F2 = FilteredVectorSpace(Integer(3), Integer(0)) >>> r = P3.fan().rays() >>> V = P3.sheaves.Klyachko({r[Integer(0)]: F1, r[Integer(1)]: F2, r[Integer(2)]: F2, r[Integer(3)]: F2}) >>> tau = Cone([(Integer(1),Integer(0),Integer(0)), (Integer(0),Integer(1),Integer(0))]) >>> sigma = Cone([(Integer(1),Integer(0),Integer(0))]) >>> M = P3.fan().dual_lattice() >>> m = M(Integer(2),Integer(1),Integer(0)) >>> m.set_immutable() >>> V.E_quotient(sigma, m) Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0] >>> V.E_quotient(tau, m) Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0] >>> V.E_quotient_projection(sigma, tau, m) Vector space morphism represented by the matrix: [1 0] [0 1] Domain: Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0] Codomain: Vector space quotient V/W of dimension 2 over Rational Field where V: Vector space of dimension 3 over Rational Field W: Vector space of degree 3 and dimension 1 over Rational Field Basis matrix: [0 1 0]
- base_ring()[source]#
Return the base field.
OUTPUT: A field.
EXAMPLES:
sage: T_P2 = toric_varieties.P2().sheaves.tangent_bundle() sage: T_P2.base_ring() Rational Field
>>> from sage.all import * >>> T_P2 = toric_varieties.P2().sheaves.tangent_bundle() >>> T_P2.base_ring() Rational Field
- cohomology(degree=None, weight=None, dim=False)[source]#
Return the bundle cohomology groups.
INPUT:
degree
–None
(default) or an integer. The degree of the cohomology group.weight
–None
(default) or a tuple of integers or a \(M\)-lattice point. A point in the dual lattice of the fan defining a torus character. The weight of the cohomology group.dim
– Boolean (default:False
). Whether to return vector spaces or only their dimension.
OUTPUT:
The cohomology group of given cohomological
degree
and torusweight
.If no
weight
is specified, the unweighted group (sum over all weights) is returned.If no
degree
is specified, a dictionary whose keys are integers and whose values are the cohomology groups is returned. If, in addition,dim=True
, then an integral vector of the dimensions is returned.
EXAMPLES:
sage: V = toric_varieties.P2().sheaves.tangent_bundle() sage: V.cohomology(degree=0, weight=(0,0)) Vector space of dimension 2 over Rational Field sage: V.cohomology(weight=(0,0), dim=True) (2, 0, 0) sage: for i,j in cartesian_product((list(range(-2,3)), list(range(-2,3)))): ....: HH = V.cohomology(weight=(i,j), dim=True) ....: if HH.is_zero(): continue ....: print('H^*i(P^2, TP^2)_M({}, {}) = {}'.format(i,j,HH)) H^*i(P^2, TP^2)_M(-1, 0) = (1, 0, 0) H^*i(P^2, TP^2)_M(-1, 1) = (1, 0, 0) H^*i(P^2, TP^2)_M(0, -1) = (1, 0, 0) H^*i(P^2, TP^2)_M(0, 0) = (2, 0, 0) H^*i(P^2, TP^2)_M(0, 1) = (1, 0, 0) H^*i(P^2, TP^2)_M(1, -1) = (1, 0, 0) H^*i(P^2, TP^2)_M(1, 0) = (1, 0, 0)
>>> from sage.all import * >>> V = toric_varieties.P2().sheaves.tangent_bundle() >>> V.cohomology(degree=Integer(0), weight=(Integer(0),Integer(0))) Vector space of dimension 2 over Rational Field >>> V.cohomology(weight=(Integer(0),Integer(0)), dim=True) (2, 0, 0) >>> for i,j in cartesian_product((list(range(-Integer(2),Integer(3))), list(range(-Integer(2),Integer(3))))): ... HH = V.cohomology(weight=(i,j), dim=True) ... if HH.is_zero(): continue ... print('H^*i(P^2, TP^2)_M({}, {}) = {}'.format(i,j,HH)) H^*i(P^2, TP^2)_M(-1, 0) = (1, 0, 0) H^*i(P^2, TP^2)_M(-1, 1) = (1, 0, 0) H^*i(P^2, TP^2)_M(0, -1) = (1, 0, 0) H^*i(P^2, TP^2)_M(0, 0) = (2, 0, 0) H^*i(P^2, TP^2)_M(0, 1) = (1, 0, 0) H^*i(P^2, TP^2)_M(1, -1) = (1, 0, 0) H^*i(P^2, TP^2)_M(1, 0) = (1, 0, 0)
- cohomology_complex(m)[source]#
Return the “cohomology complex” \(C^*(m)\)
See [Kly1990], equation 4.2.
INPUT:
m
– tuple of integers or \(M\)-lattice point. A point in the dual lattice of the fan. Must be immutable.
OUTPUT:
The “cohomology complex” as a chain complex over the
base_ring()
.EXAMPLES:
sage: P3 = toric_varieties.P(3) sage: rays = [(1,0,0), (0,1,0), (0,0,1)] sage: F1 = FilteredVectorSpace(rays, {0: [0], 1: [2], 2: [1]}) sage: F2 = FilteredVectorSpace(rays, {0: [1,2], 1: [0]}) sage: r = P3.fan().rays() sage: V = P3.sheaves.Klyachko({r[0]: F1, r[1]: F2, r[2]: F2, r[3]: F2}) sage: tau = Cone([(1,0,0), (0,1,0)]) sage: sigma = Cone([(1, 0, 0)]) sage: M = P3.fan().dual_lattice() sage: m = M(1, 1, 0); m.set_immutable() sage: V.cohomology_complex(m) Chain complex with at most 2 nonzero terms over Rational Field sage: F = CyclotomicField(3) sage: P3 = toric_varieties.P(3).change_ring(F) sage: V = P3.sheaves.Klyachko({r[0]: F1, r[1]: F2, r[2]: F2, r[3]: F2}) sage: V.cohomology_complex(m) Chain complex with at most 2 nonzero terms over Cyclotomic Field of order 3 and degree 2
>>> from sage.all import * >>> P3 = toric_varieties.P(Integer(3)) >>> rays = [(Integer(1),Integer(0),Integer(0)), (Integer(0),Integer(1),Integer(0)), (Integer(0),Integer(0),Integer(1))] >>> F1 = FilteredVectorSpace(rays, {Integer(0): [Integer(0)], Integer(1): [Integer(2)], Integer(2): [Integer(1)]}) >>> F2 = FilteredVectorSpace(rays, {Integer(0): [Integer(1),Integer(2)], Integer(1): [Integer(0)]}) >>> r = P3.fan().rays() >>> V = P3.sheaves.Klyachko({r[Integer(0)]: F1, r[Integer(1)]: F2, r[Integer(2)]: F2, r[Integer(3)]: F2}) >>> tau = Cone([(Integer(1),Integer(0),Integer(0)), (Integer(0),Integer(1),Integer(0))]) >>> sigma = Cone([(Integer(1), Integer(0), Integer(0))]) >>> M = P3.fan().dual_lattice() >>> m = M(Integer(1), Integer(1), Integer(0)); m.set_immutable() >>> V.cohomology_complex(m) Chain complex with at most 2 nonzero terms over Rational Field >>> F = CyclotomicField(Integer(3)) >>> P3 = toric_varieties.P(Integer(3)).change_ring(F) >>> V = P3.sheaves.Klyachko({r[Integer(0)]: F1, r[Integer(1)]: F2, r[Integer(2)]: F2, r[Integer(3)]: F2}) >>> V.cohomology_complex(m) Chain complex with at most 2 nonzero terms over Cyclotomic Field of order 3 and degree 2
- direct_sum(other)[source]#
Return the sum of two vector bundles.
INPUT:
other
– a Klyachko bundle over the same base.
OUTPUT: The direct sum as a new Klyachko bundle.
EXAMPLES:
sage: X = toric_varieties.P2() sage: V1 = X.sheaves.trivial_bundle(1) sage: V2 = X.sheaves.trivial_bundle(2) sage: V2.direct_sum(V1) Rank 3 bundle on 2-d CPR-Fano toric variety covered by 3 affine patches. sage: V1 = X.sheaves.trivial_bundle(1) sage: V2 = X.sheaves.trivial_bundle(2) sage: V2 == V1 + V1 True
>>> from sage.all import * >>> X = toric_varieties.P2() >>> V1 = X.sheaves.trivial_bundle(Integer(1)) >>> V2 = X.sheaves.trivial_bundle(Integer(2)) >>> V2.direct_sum(V1) Rank 3 bundle on 2-d CPR-Fano toric variety covered by 3 affine patches. >>> V1 = X.sheaves.trivial_bundle(Integer(1)) >>> V2 = X.sheaves.trivial_bundle(Integer(2)) >>> V2 == V1 + V1 True
- dual()[source]#
Return the dual bundle.
OUTPUT: The dual bundle as a new Klyachko bundle.
EXAMPLES:
sage: P1 = toric_varieties.P1() sage: H = P1.divisor(0) sage: L = P1.sheaves.line_bundle(H) sage: L.dual() Rank 1 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches. sage: L.dual() == P1.sheaves.line_bundle(-H) True
>>> from sage.all import * >>> P1 = toric_varieties.P1() >>> H = P1.divisor(Integer(0)) >>> L = P1.sheaves.line_bundle(H) >>> L.dual() Rank 1 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches. >>> L.dual() == P1.sheaves.line_bundle(-H) True
- exterior_power(n)[source]#
Return the \(n\)-th exterior power.
INPUT:
n
– integer.
OUTPUT:
The \(n\)-th exterior power \(\wedge_{i=1}^n V\) of the bundle \(V\) as a new Klyachko bundle.
EXAMPLES:
sage: X = toric_varieties.P2_123() sage: TX = X.sheaves.tangent_bundle() sage: antiK = X.sheaves.line_bundle(-X.K()) sage: TX.exterior_power(2) == antiK True sage: TX.wedge(2) == antiK # alias True
>>> from sage.all import * >>> X = toric_varieties.P2_123() >>> TX = X.sheaves.tangent_bundle() >>> antiK = X.sheaves.line_bundle(-X.K()) >>> TX.exterior_power(Integer(2)) == antiK True >>> TX.wedge(Integer(2)) == antiK # alias True
- fiber()[source]#
Return the generic fiber of the vector bundle.
OUTPUT: A vector space over
base_ring()
.EXAMPLES:
sage: T_P2 = toric_varieties.P2().sheaves.tangent_bundle() sage: T_P2.fiber() Vector space of dimension 2 over Rational Field
>>> from sage.all import * >>> T_P2 = toric_varieties.P2().sheaves.tangent_bundle() >>> T_P2.fiber() Vector space of dimension 2 over Rational Field
- filtration_intersection(sigma, i)[source]#
Return the intersection of the filtered subspaces.
INPUT:
sigma
– a cone of the fan of the base toric variety.i
– integer. The filtration degree.
OUTPUT:
Let the cone be spanned by the rays \(\sigma=\langle r_1,\dots, r_k\rangle\). This method returns the intersection
\[\bigcap_{r\in \{r_1,\dots,r_k\}} E^{r}(i)\]EXAMPLES:
sage: X = toric_varieties.P2() sage: fan = X.fan() sage: V = X.sheaves.tangent_bundle() sage: V.filtration_intersection(fan(1)[0], 1) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] sage: V.filtration_intersection(fan(2)[0], 1) Vector space of degree 2 and dimension 0 over Rational Field Basis matrix: []
>>> from sage.all import * >>> X = toric_varieties.P2() >>> fan = X.fan() >>> V = X.sheaves.tangent_bundle() >>> V.filtration_intersection(fan(Integer(1))[Integer(0)], Integer(1)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0] >>> V.filtration_intersection(fan(Integer(2))[Integer(0)], Integer(1)) Vector space of degree 2 and dimension 0 over Rational Field Basis matrix: []
- get_degree(ray, i)[source]#
Return the vector subspace
E^\alpha(i)
.ray
– Integer, a \(N\)-lattice point, a one-dimensional cone, orNone
(default). Specifies a ray of the fan of the toric variety, either via its index or its generator.i
– integer. The filtration degree.
OUTPUT:
A subspace of the
fiber()
vector space. The defining data of a Klyachko bundle.EXAMPLES:
sage: TX = toric_varieties.dP6().sheaves.tangent_bundle() sage: TX.get_degree(0, 1) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [0 1]
>>> from sage.all import * >>> TX = toric_varieties.dP6().sheaves.tangent_bundle() >>> TX.get_degree(Integer(0), Integer(1)) Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [0 1]
- get_filtration(ray=None)[source]#
Return the filtration associated to the
ray
.INPUT:
ray
– Integer, a \(N\)-lattice point, a one-dimensional cone, orNone
(default). Specifies a ray of the fan of the toric variety, either via its index or its generator.
OUTPUT:
The filtered vector space associated to the given
ray
. If no ray is specified, all filtrations are returned.EXAMPLES:
sage: TX = toric_varieties.dP6().sheaves.tangent_bundle() sage: TX.get_filtration(0) QQ^2 >= QQ^1 >= 0 sage: TX.get_filtration([-1, -1]) QQ^2 >= QQ^1 >= 0 sage: TX.get_filtration(TX.variety().fan(1)[0]) QQ^2 >= QQ^1 >= 0 sage: TX.get_filtration() Filtrations N(-1, -1): QQ^2 >= QQ^1 >= 0 N(-1, 0): QQ^2 >= QQ^1 >= 0 N(0, -1): QQ^2 >= QQ^1 >= 0 N(0, 1): QQ^2 >= QQ^1 >= 0 N(1, 0): QQ^2 >= QQ^1 >= 0 N(1, 1): QQ^2 >= QQ^1 >= 0
>>> from sage.all import * >>> TX = toric_varieties.dP6().sheaves.tangent_bundle() >>> TX.get_filtration(Integer(0)) QQ^2 >= QQ^1 >= 0 >>> TX.get_filtration([-Integer(1), -Integer(1)]) QQ^2 >= QQ^1 >= 0 >>> TX.get_filtration(TX.variety().fan(Integer(1))[Integer(0)]) QQ^2 >= QQ^1 >= 0 >>> TX.get_filtration() Filtrations N(-1, -1): QQ^2 >= QQ^1 >= 0 N(-1, 0): QQ^2 >= QQ^1 >= 0 N(0, -1): QQ^2 >= QQ^1 >= 0 N(0, 1): QQ^2 >= QQ^1 >= 0 N(1, 0): QQ^2 >= QQ^1 >= 0 N(1, 1): QQ^2 >= QQ^1 >= 0
- is_isomorphic(other)[source]#
Test whether two bundles are isomorphic.
INPUT:
other
– anything.
OUTPUT: A boolean.
EXAMPLES:
sage: X = toric_varieties.P2() sage: T_X = X.sheaves.tangent_bundle() sage: O_X = X.sheaves.trivial_bundle(1) sage: T_X + O_X == O_X + T_X False sage: (T_X + O_X).is_isomorphic(O_X + T_X) Traceback (most recent call last): ... NotImplementedError
>>> from sage.all import * >>> X = toric_varieties.P2() >>> T_X = X.sheaves.tangent_bundle() >>> O_X = X.sheaves.trivial_bundle(Integer(1)) >>> T_X + O_X == O_X + T_X False >>> (T_X + O_X).is_isomorphic(O_X + T_X) Traceback (most recent call last): ... NotImplementedError
- random_deformation(epsilon=None)[source]#
Return a generic torus-equivariant deformation of the bundle.
INPUT:
epsilon
– an element of the base ring. Scales the random deformation.
OUTPUT:
A new Klyachko bundle with randomly perturbed moduli. In particular, the same Chern classes.
EXAMPLES:
sage: P1 = toric_varieties.P1() sage: H = P1.divisor(0) sage: V = P1.sheaves.line_bundle(H) + P1.sheaves.line_bundle(-H) sage: V.cohomology(dim=True, weight=(0,)) (1, 0) sage: Vtilde = V.random_deformation() sage: Vtilde.cohomology(dim=True, weight=(0,)) # random failure (see #32773) (1, 0)
>>> from sage.all import * >>> P1 = toric_varieties.P1() >>> H = P1.divisor(Integer(0)) >>> V = P1.sheaves.line_bundle(H) + P1.sheaves.line_bundle(-H) >>> V.cohomology(dim=True, weight=(Integer(0),)) (1, 0) >>> Vtilde = V.random_deformation() >>> Vtilde.cohomology(dim=True, weight=(Integer(0),)) # random failure (see #32773) (1, 0)
- rank()[source]#
Return the rank of the vector bundle.
OUTPUT: An integer.
EXAMPLES:
sage: T_P2 = toric_varieties.P2().sheaves.tangent_bundle() sage: T_P2.rank() 2
>>> from sage.all import * >>> T_P2 = toric_varieties.P2().sheaves.tangent_bundle() >>> T_P2.rank() 2
- symmetric_power(n)[source]#
Return the \(n\)-th symmetric power.
INPUT:
n
– integer.
OUTPUT: The \(n\)-th symmetric power as a new Klyachko bundle.
EXAMPLES:
sage: P1 = toric_varieties.P1() sage: H = P1.divisor(0) sage: L = P1.sheaves.line_bundle(H) sage: (L + L).symmetric_power(2) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches. sage: (L + L).symmetric_power(2) == L*L + L*L + L*L True
>>> from sage.all import * >>> P1 = toric_varieties.P1() >>> H = P1.divisor(Integer(0)) >>> L = P1.sheaves.line_bundle(H) >>> (L + L).symmetric_power(Integer(2)) Rank 3 bundle on 1-d CPR-Fano toric variety covered by 2 affine patches. >>> (L + L).symmetric_power(Integer(2)) == L*L + L*L + L*L True
- tensor_product(other)[source]#
Return the sum of two vector bundles.
INPUT:
other
– a Klyachko bundle over the same base.
OUTPUT: The tensor product as a new Klyachko bundle.
EXAMPLES:
sage: X = toric_varieties.P2() sage: OX = X.sheaves.trivial_bundle(1) sage: X.sheaves.tangent_bundle().tensor_product(OX) Rank 2 bundle on 2-d CPR-Fano toric variety covered by 3 affine patches. sage: OX == OX * OX True
>>> from sage.all import * >>> X = toric_varieties.P2() >>> OX = X.sheaves.trivial_bundle(Integer(1)) >>> X.sheaves.tangent_bundle().tensor_product(OX) Rank 2 bundle on 2-d CPR-Fano toric variety covered by 3 affine patches. >>> OX == OX * OX True
- variety()[source]#
Return the base toric variety.
OUTPUT: A toric variety.
EXAMPLES:
sage: X = toric_varieties.P2() sage: V = X.sheaves.tangent_bundle(); V Rank 2 bundle on 2-d CPR-Fano toric variety covered by 3 affine patches. sage: V.variety() is X True
>>> from sage.all import * >>> X = toric_varieties.P2() >>> V = X.sheaves.tangent_bundle(); V Rank 2 bundle on 2-d CPR-Fano toric variety covered by 3 affine patches. >>> V.variety() is X True
- wedge(n)[source]#
Return the \(n\)-th exterior power.
INPUT:
n
– integer.
OUTPUT:
The \(n\)-th exterior power \(\wedge_{i=1}^n V\) of the bundle \(V\) as a new Klyachko bundle.
EXAMPLES:
sage: X = toric_varieties.P2_123() sage: TX = X.sheaves.tangent_bundle() sage: antiK = X.sheaves.line_bundle(-X.K()) sage: TX.exterior_power(2) == antiK True sage: TX.wedge(2) == antiK # alias True
>>> from sage.all import * >>> X = toric_varieties.P2_123() >>> TX = X.sheaves.tangent_bundle() >>> antiK = X.sheaves.line_bundle(-X.K()) >>> TX.exterior_power(Integer(2)) == antiK True >>> TX.wedge(Integer(2)) == antiK # alias True
- sage.schemes.toric.sheaf.klyachko.is_KlyachkoBundle(X)[source]#
Test whether
X
is a Klyachko bundleINPUT:
X
– anything.
OUTPUT: A boolean.
EXAMPLES:
sage: from sage.schemes.toric.sheaf.klyachko import is_KlyachkoBundle sage: is_KlyachkoBundle('test') doctest:warning... DeprecationWarning: The function is_KlyachkoBundle is deprecated; use 'isinstance(..., KlyachkoBundle_class)' instead. See https://github.com/sagemath/sage/issues/38022 for details. False
>>> from sage.all import * >>> from sage.schemes.toric.sheaf.klyachko import is_KlyachkoBundle >>> is_KlyachkoBundle('test') doctest:warning... DeprecationWarning: The function is_KlyachkoBundle is deprecated; use 'isinstance(..., KlyachkoBundle_class)' instead. See https://github.com/sagemath/sage/issues/38022 for details. False