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 of MultiFilteredVectorSpace() 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 – a MultiFilteredVectorSpace() 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 containing sigma.

  • 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:

  • degreeNone (default) or an integer. The degree of the cohomology group.

  • weightNone (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 torus weight.

  • 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, or None (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, or None (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 bundle

INPUT:

  • 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