Klyachko bundles and sheaves - Schemes

Skip to content
Back to top
View this page
Edit this page

# 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

    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)

Python

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

- [Kly1990]

- [BIP]

sage.schemes.toric.sheaf.klyachko.Bundle(toric_variety, multi_filtration, check=True)

  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

      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

  Python

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

      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.

  [Python]

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

      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.

  Python

      >>> 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)

  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

      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.

  Python

      >>> 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)

    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

        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]

    Python

        >>> 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)

    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

        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]

    Python

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

        sage: V.E_intersection(fan(0)[0], (1,0))
        Vector space of dimension 2 over Rational Field

    [Python]

        >>> 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)

    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

        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]

    Python

        >>> 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)

    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

        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]

    Python

        >>> 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()

    Return the base field.

    OUTPUT: a field

    EXAMPLES:

    Sage

        sage: T_P2 = toric_varieties.P2().sheaves.tangent_bundle()
        sage: T_P2.base_ring()
        Rational Field

    Python

        >>> 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)

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

        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)

    Python

        >>> 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)

    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

        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

    Python

        >>> 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)

    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

        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

    Python

        >>> 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()

    Return the dual bundle.

    OUTPUT: the dual bundle as a new Klyachko bundle

    EXAMPLES:

    Sage

        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

    Python

        >>> 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)

    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

        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

    Python

        >>> 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()

    Return the generic fiber of the vector bundle.

    OUTPUT: a vector space over `base_ring()`

    EXAMPLES:

    Sage

        sage: T_P2 = toric_varieties.P2().sheaves.tangent_bundle()
        sage: T_P2.fiber()
        Vector space of dimension 2 over Rational Field

    Python

        >>> 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)

    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

        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: []

    Python

        >>> 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)

    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

        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]

    Python

        >>> 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)

    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

        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

    Python

        >>> 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)

    Test whether two bundles are isomorphic.

    INPUT:

    - `other` – anything

    OUTPUT: boolean

    EXAMPLES:

    Sage

        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

    Python

        >>> 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)

    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

        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)

    Python

        >>> 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()

    Return the rank of the vector bundle.

    OUTPUT: integer

    EXAMPLES:

    Sage

        sage: T_P2 = toric_varieties.P2().sheaves.tangent_bundle()
        sage: T_P2.rank()
        2

    Python

        >>> from sage.all import *
        >>> T_P2 = toric_varieties.P2().sheaves.tangent_bundle()
        >>> T_P2.rank()
        2

  symmetric_power(n)

    Return the \(n\)-th symmetric power.

    INPUT:

    - `n` – integer

    OUTPUT: the \(n\)-th symmetric power as a new Klyachko bundle

    EXAMPLES:

    Sage

        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

    Python

        >>> 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)

    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

        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

    Python

        >>> 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()

    Return the base toric variety.

    OUTPUT: a toric variety

    EXAMPLES:

    Sage

        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

    Python

        >>> 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)

    alias of `exterior_power()`.