Ticket #12361: trac_12361_fix_toric_cohomology_ring.patch

File trac_12361_fix_toric_cohomology_ring.patch, 21.1 KB (added by Volker Braun, 11 years ago)

Updated patch

  • sage/schemes/generic/toric_chow_group.py

    # HG changeset patch
    # User Volker Braun <vbraun@stp.dias.ie>
    # Date 1333102321 -3600
    # Node ID abd365b60984ecf86c73f232971408f0e4f37ecc
    # Parent  295777678afafeb5341221b15043f5e608766937
    Trac #12361: Fix normalizations for cohomology classes
    
    diff --git a/sage/schemes/generic/toric_chow_group.py b/sage/schemes/generic/toric_chow_group.py
    a b  
    322322            5
    323323
    324324        In the case of a smooth complete toric variety, the Chow
    325         (homology) groups are Poincare dual to the cohomology
    326         groups. Then the number of points equals the integral of the
    327         dual cohomology class. But in general there is no Poincare
    328         duality. Here is a smooth example::
     325        (homology) groups are Poincare dual to the integral cohomology
     326        groups. Here is such a smooth example::
    329327
    330328            sage: D = P2.divisor(1)
    331329            sage: a = D.Chow_cycle()
     
    334332            1
    335333            sage: P2.integrate( aD.cohomology_class() )
    336334            1
     335
     336        For toric varieties with at most orbifold singularities, the
     337        isomorphism only holds over `\QQ`. But the normalization of
     338        the integral is still chosen such that the intersection
     339        numbers (which are potentially rational) computed both ways
     340        agree::
     341
     342            sage: P1xP1_Z2 = toric_varieties.P1xP1_Z2()
     343            sage: Dt = P1xP1_Z2.divisor(1);  Dt
     344            V(t)
     345            sage: Dy = P1xP1_Z2.divisor(3);  Dy
     346            V(y)
     347            sage: Dt.Chow_cycle(QQ).intersection_with_divisor(Dy).count_points()
     348            1/2
     349            sage: P1xP1_Z2.integrate( Dt.cohomology_class() * Dy.cohomology_class() )
     350            1/2
    337351        """
    338352        c0 = self.project_to_degree(0).lift()
    339353        return sum(c0)
     
    459473        cohomology classes perform intersection computations.
    460474
    461475        If the toric variety is compact and has at most orbifold
    462         singularities, Poincare duality holds for rational cohomology
    463         only. In this case, the associated cohomology class is
    464         rationally Poincare-dual to the Chow cycle. However, the
    465         normalization of integrals over the associated cohomology
    466         classes will not always match the (integral) intersection
    467         numbers of the torus orbits.
     476        singularities, the torsion parts in cohomology and the Chow
     477        group can differ. But they are still isomorphic as rings over
     478        the rationals. Moreover, the normalization of integration
     479        (:meth:`volume_class
     480        <sage.schemes.generic.toric_variety.ToricVariety_field.volume_class>`)
     481        and :meth:`count_points` are chosen to agree.
    468482
    469483        OUTPUT:
    470        
     484
    471485        The
    472486        :class:`~sage.schemes.generic.toric_variety.CohomologyClass`
    473487        which is associated to the Chow cycle.
     
    491505            [-w^2]
    492506
    493507        Here is an example of a toric variety with orbifold
    494         singularities, where Poincare duality holds only rationally::
     508        singularities, where we can also use the isomorphism with the
     509        rational cohomology ring::
    495510
    496511            sage: WP4 = toric_varieties.P4_11169()
    497512            sage: A = WP4.Chow_group()
    498513            sage: HH = WP4.cohomology_ring()
    499514            sage: cone3d = Cone([(0,0,1,0), (0,0,0,1), (-9,-6,-1,-1)])
     515            sage: A(cone3d)
     516            ( 0 | 1 | 0 | 0 | 0 )
     517            sage: HH(cone3d)
     518            [3*z4^3]
     519
    500520            sage: D = -WP4.K()  # the anticanonical divisor
     521            sage: A(D)
     522            ( 0 | 0 | 0 | 18 | 0 )
     523            sage: HH(D)
     524            [18*z4]
     525
    501526            sage: WP4.integrate( A(cone3d).cohomology_class() * D.cohomology_class() )
    502             1/3
     527            1
    503528            sage: WP4.integrate( HH(cone3d) * D.cohomology_class() )
    504             1/3
    505            
    506         The last two lines are the same integral. In either case, the
    507         integrand is the product of the cohomology class associated to
    508         the 3-dimensional cone times the cohomology class associated
    509         to the divisor ``D``. But the intersection number of the
    510         (real) 6-dimensional torus orbit corresponding to the 3-d cone
    511         with the divisor is of course not `\frac{1}{3}`. The actual
    512         intersection number is::
    513            
     529            1
    514530            sage: A(cone3d).intersection_with_divisor(D).count_points()
    515531            1
    516532        """
  • sage/schemes/generic/toric_variety.py

    diff --git a/sage/schemes/generic/toric_variety.py b/sage/schemes/generic/toric_variety.py
    a b  
    66See also :mod:`~sage.schemes.generic.fano_toric_variety` for a more
    77restrictive class of (weak) Fano toric varieties.
    88
    9 An **excellent reference on toric varieties** is the book "Toric Varieties" by
    10 David A. Cox, John B. Little, and Hal Schenck [CLS]_. Its draft **is freely
    11 available** at
    12 http://www.cs.amherst.edu/~dac/toric.html
    13 **but will be removed** from this site once it is published, so hurry up!
     9An **excellent reference on toric varieties** is the book "Toric
     10Varieties" by David A. Cox, John B. Little, and Hal Schenck
     11[CLS]_.
    1412
    1513The interface to this module is provided through functions
    16 :func:`AffineToricVariety` and :func:`ToricVariety`, although you may also be
    17 interested in :func:`normalize_names`.
     14:func:`AffineToricVariety` and :func:`ToricVariety`, although you may
     15also be interested in :func:`normalize_names`.
    1816
    1917.. NOTE::
    2018
     
    2927..  [CLS]
    3028    David A. Cox, John B. Little,  Hal Schenck,
    3129    "Toric Varieties", Graduate Studies in Mathematics,
    32     Amer. Math. Soc., Providence, RI, to appear.
     30    Amer. Math. Soc., Providence, RI, 2011
    3331
    3432AUTHORS:
    3533
     
    210208:func:`~sage.schemes.generic.fano_toric_variety.CPRFanoToricVariety`,
    211209which can construct some other "nice partial resolutions."
    212210
     211The intersection theory on toric varieties is very well understood,
     212and there are explicit algorithms to compute many quantities of
     213interest. The most important tools are the :class:`cohomology ring
     214<CohomologyRing>` and the :mod:`Chow group
     215<sage.schemes.generic.toric_chow_group>`. For `d`-dimensional compact
     216toric varieties with at most orbifold singularities, the rational
     217cohomology ring `H^*(X,\QQ)` and the rational Chow ring `A^*(X,\QQ) =
     218A_{d-*}(X)\otimes \QQ` are isomorphic except for a doubling in
     219degree. More precisely, the Chow group has the same rank
     220
     221  .. math::
     222
     223       A_{d-k}(X) \otimes \QQ \simeq H^{2k}(X,\QQ)
     224
     225and the intersection in of Chow cycles matches the cup product in
     226cohomology.
     227
     228In this case, you should work with the cohomology ring description
     229because it is much faster. For example, here is a weighted projective
     230space with a curve of `\ZZ_3`-orbifold singularities::
     231
     232    sage: P4_11133 = toric_varieties.P4_11133()
     233    sage: P4_11133.is_smooth(), P4_11133.is_orbifold()
     234    (False, True)
     235    sage: cone = P4_11133.fan(3)[8]
     236    sage: cone.is_smooth(), cone.is_simplicial()
     237    (False, True)
     238    sage: HH = P4_11133.cohomology_ring();  HH
     239    Rational cohomology ring of a 4-d CPR-Fano toric variety covered by 5 affine patches
     240    sage: P4_11133.cohomology_basis()
     241    (([1],), ([z4],), ([z4^2],), ([z4^3],), ([z4^4],))
     242
     243Every cone defines a torus orbit closure, and hence a (co)homology class::
     244
     245    sage: HH.gens()
     246    ([3*z4], [3*z4], [z4], [z4], [z4])
     247    sage: map(HH, P4_11133.fan(1))
     248    [[3*z4], [3*z4], [z4], [z4], [z4]]
     249    sage: map(HH, P4_11133.fan(4) )
     250    [[9*z4^4], [9*z4^4], [9*z4^4], [9*z4^4], [9*z4^4]]
     251    sage: HH(cone)
     252    [3*z4^3]
     253
     254We can compute intersection numbers by integrating top-dimensional
     255cohomology classes::
     256
     257    sage: D = P4_11133.divisor(0)
     258    sage: HH(D)
     259    [3*z4]
     260    sage: P4_11133.integrate( HH(D)^4 )
     261    9
     262    sage: P4_11133.integrate( HH(D) * HH(cone) )
     263    1
     264
     265Although computationally less efficient, we can do the same
     266computations with the rational Chow group::
     267
     268    sage: AA = P4_11133.Chow_group(QQ)
     269    sage: map(AA, P4_11133.fan(1))
     270    [( 0 | 0 | 0 | 3 | 0 ), ( 0 | 0 | 0 | 3 | 0 ), ( 0 | 0 | 0 | 1 | 0 ), ( 0 | 0 | 0 | 1 | 0 ), ( 0 | 0 | 0 | 1 | 0 )]
     271    sage: map(AA, P4_11133.fan(4))
     272    [( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 )]
     273    sage: AA(cone).intersection_with_divisor(D)
     274    ( 1 | 0 | 0 | 0 | 0 )
     275    sage: AA(cone).intersection_with_divisor(D).count_points()
     276    1
     277
     278The real advantage of the Chow group is that
     279
     280  * it works just as well over `\ZZ`, so torsion information is also
     281    easily available, and
     282
     283  * its combinatorial description also works over worse-than-orbifold
     284    singularities. By contrast, the cohomology groups can become very
     285    complicated to compute in this case, and one usually only has a
     286    spectral sequence but no toric algorithm.
     287
    213288Below you will find detailed descriptions of available functions. If you are
    214289familiar with toric geometry, you will likely see that many important objects
    215290and operations are unavailable. However, this module is under active
     
    12971372        r"""
    12981373        Check if ``self`` has only quotient singularities.
    12991374
     1375        A toric variety with at most orbifold singularities (in this
     1376        sense) is often called a simplicial toric variety. In this
     1377        package, we generally try to avoid this term since it mixes up
     1378        differential geometry and cone terminology.
     1379
    13001380        OUTPUT:
    13011381
    13021382        - ``True`` if ``self`` has at most quotient singularities by
     
    18261906              torsion-free, so in this case there is no loss of
    18271907              information when going to rational coefficients.
    18281908
    1829             - ``self.cohomology_ring().gen(i)`` is the divisor class generated by
     1909            - ``self.cohomology_ring().gen(i)`` is the divisor class corresponding to
    18301910              the ``i``-th ray of the fan.
    18311911     
    18321912        EXAMPLES::
     
    18971977        return self._cohomology_basis
    18981978
    18991979    def volume_class(self):
    1900         """
     1980        r"""
    19011981        Return the cohomology class of the volume form on the toric
    19021982        variety.
    19031983
    1904         If the variety is non-compact: Note that we are using
    1905         cohomology with compact supports. This is dual to homology
    1906         without any support condition. In particular, for non-compact
     1984        Note that we are using cohomology with compact supports. If
     1985        the variety is non-compact this is dual to homology without
     1986        any support condition. In particular, for non-compact
    19071987        varieties the volume form `\mathrm{dVol}=\wedge_i(dx_i \wedge
    1908         dy_i)` does not define a cohomology class.
     1988        dy_i)` does not define a (non-zero) cohomology class.
    19091989
    19101990        OUTPUT:
    19111991
     
    19131993        the (properly normalized) volume form, that is, it is the
    19141994        Poincare dual of a single point. If it does not exist, a
    19151995        ``ValueError`` is raised.
    1916        
     1996
    19171997        EXAMPLES::
    19181998
    19191999            sage: P2 = toric_varieties.P2()
    19202000            sage: P2.volume_class()
    19212001            [z^2]
     2002
    19222003            sage: A2_Z2 = toric_varieties.A2_Z2()
    19232004            sage: A2_Z2.volume_class()
    19242005            Traceback (most recent call last):
    19252006            ...
    19262007            ValueError: Volume class does not exist.
     2008
     2009        If none of the maximal cones is smooth things get more
     2010        tricky. In this case no torus-fixed point is smooth. If we
     2011        want to count an ordinary point as `1`, then a `G`-orbifold
     2012        point needs to count as `\frac{1}{|G|}`. For example, take
     2013        `\mathbb{P}^1\times\mathbb{P}^1` with inhomogeneous
     2014        coordinates `(t,y)`. Take the quotient by the action
     2015        `(t,y)\mapsto (-t,-y)`. The `\ZZ_2`-invariant Weil divisors
     2016        `\{t=0\}` and `\{y=0\}` intersect in a `\ZZ_2`-fixed point, so
     2017        they ought to have intersection number `\frac{1}{2}`. This
     2018        means that the cohomology class `[t] \cap [y]` should be
     2019        `\frac{1}{2}` times the volume class. Note that this is
     2020        different from the volume normalization chosen in
     2021        [Schubert]_::
     2022
     2023            sage: P1xP1_Z2 = toric_varieties.P1xP1_Z2()
     2024            sage: Dt = P1xP1_Z2.divisor(1);  Dt
     2025            V(t)
     2026            sage: Dy = P1xP1_Z2.divisor(3);  Dy
     2027            V(y)
     2028            sage: P1xP1_Z2.volume_class()
     2029            [2*t*y]
     2030
     2031            sage: HH = P1xP1_Z2.cohomology_ring()
     2032            sage: HH(Dt) * HH(Dy) == 1/2 * P1xP1_Z2.volume_class()
     2033            True
     2034
     2035        The fractional coefficients are also necessary to match the
     2036        normalization in the rational Chow group for simplicial toric
     2037        varieties::
     2038
     2039            sage: A = P1xP1_Z2.Chow_group(QQ)
     2040            sage: A(Dt).intersection_with_divisor(Dy).count_points()
     2041            1/2
     2042
     2043        REFERENCES:
     2044
     2045        ..  [Schubert]
     2046            Sheldon Katz and Stein Arild Stromme,
     2047            A Maple package for intersection theory and enumerative geometry.
    19272048        """
    19282049        if "_volume_class" not in self.__dict__:
    19292050            if not self.is_orbifold():
    19302051                raise NotImplementedError('Cohomology computations are only '
    19312052                                          'implemented for orbifolds.')
    1932             def V(cone): return abs(cone.ray_matrix().determinant())
    1933             min_cone = min( self._fan.generating_cones(), key=V)
    1934             self._volume_class = self.cohomology_ring()(min_cone) / V(min_cone)
     2053            HH = self.cohomology_ring()
     2054            dim = self.dimension_relative()
     2055            self._volume_class = HH(self.fan().generating_cone(0)).part_of_degree(dim)
    19352056        if self._volume_class.is_zero():
    19362057            raise ValueError, 'Volume class does not exist.'
    19372058        return self._volume_class
     
    19712092            [ 0  0  1 -1  1  0]
    19722093            [ 0  0  0  1 -1  1]
    19732094            [ 1  0  0  0  1 -1]
     2095
     2096        If the toric variety is an orbifold, the intersection numbers
     2097        are usually fractional::
     2098       
     2099            sage: P2_123 = toric_varieties.P2_123()
     2100            sage: HH = P2_123.cohomology_ring()
     2101            sage: D = [ HH(c) for c in P2_123.fan(dim=1) ]
     2102            sage: matrix([ [ P2_123.integrate(D[i]*D[j]) for i in range(0,3) ] for j in range(0,3) ])
     2103            [2/3   1 1/3]
     2104            [  1 3/2 1/2]
     2105            [1/3 1/2 1/6]
     2106            sage: A = P2_123.Chow_group(QQ)
     2107            sage: matrix([ [ A(P2_123.divisor(i))
     2108            ...              .intersection_with_divisor(P2_123.divisor(j))
     2109            ...              .count_points() for i in range(0,3) ] for j in range(0,3) ])
     2110            [2/3   1 1/3]
     2111            [  1 3/2 1/2]
     2112            [1/3 1/2 1/6]
    19742113        """
    19752114        assert self.is_complete(), "Can only integrate over compact varieties."
    19762115        top_form = cohomology_class.part_of_degree(self.dimension())
     
    28933032          be converted into a polynomial in the homogeneous
    28943033          coordinates.
    28953034
     3035        OUTPUT:
     3036
     3037        The :class:`CohomologyClass` defined by ``x``.
     3038
    28963039        EXAMPLES::
    28973040         
    28983041            sage: dP6 = toric_varieties.dP6()
     
    29063049            sage: H( dP6.fan(0)[0] )   # trivial cone
    29073050            [1]
    29083051
     3052        Non-smooth cones are a bit tricky. For such a cone, the
     3053        intersection of the divisors corresponding to the rays is
     3054        still proportional to the product of the variables, but the
     3055        coefficient is a multiple depending on the orbifold
     3056        singularity. See also [CLS]_, Lemma 12.5.2::
     3057
     3058            sage: P2_123 = toric_varieties.P2_123()
     3059            sage: HH = P2_123.cohomology_ring()
     3060            sage: HH(Cone([(1,0)])) * HH(Cone([(-2,-3)]))
     3061            [2*z2^2]
     3062            sage: HH(Cone([(1,0), (-2,-3)]))
     3063            [6*z2^2]
     3064            sage: [ HH(c) for c in P2_123.fan().generating_cones() ]
     3065            [[6*z2^2], [6*z2^2], [6*z2^2]]
     3066            sage: P2_123.volume_class()
     3067            [6*z2^2]
     3068            sage: [ HH(c.facets()[0]) * HH(c.facets()[1]) for c in P2_123.fan().generating_cones() ]
     3069            [[6*z2^2], [3*z2^2], [2*z2^2]]
    29093070
    29103071        Numbers will be converted into the ring::
    29113072           
     
    29303091        elif is_Cone(x):
    29313092            cone = fan.embed(x)
    29323093            assert cone.ambient() is fan
     3094            mult = cone.ray_matrix().index_in_saturation()
    29333095            x = prod((self.cover_ring().gen(i) for i in cone.ambient_ray_indices()),
    2934                      z=self.cover_ring().one())
     3096                     z=self.cover_ring().one()) * mult
    29353097        else:
    29363098            try:
    29373099                # divisor, for example, know how to compute their own cohomology class
  • sage/schemes/generic/toric_variety_library.py

    diff --git a/sage/schemes/generic/toric_variety_library.py b/sage/schemes/generic/toric_variety_library.py
    a b  
    6464    'P1xP1':[
    6565        [(1, 0), (-1, 0), (0, 1), (0, -1)],
    6666        [[0,2],[2,1],[1,3],[3,0]] ],
     67    'P1xP1_Z2':[
     68        [(1, 1), (-1, -1), (-1, 1), (1, -1)],
     69        [[0,2],[2,1],[1,3],[3,0]] ],
    6770    'P1':[
    6871        [(1,), (-1,)],
    6972        [[0],[1]] ],
     
    158161    'P4_11169_resolved':[
    159162        [(1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (-9, -6, -1, -1), (-3, -2, 0, 0)],
    160163        [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 2, 4], [1, 3, 4, 5], [0, 3, 4, 5],
     164         [1, 2, 4, 5], [0, 2, 4, 5], [1, 2, 3, 5], [0, 2, 3, 5]] ],
     165    'P4_11133':[
     166        [(1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (-3, -3, -1, -1)],
     167        [[0,1,2,3],[0,1,2,4],[0,1,3,4],[0,2,3,4],[1,2,3,4]] ],
     168    'P4_11133_resolved':[
     169        [(1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (-3, -3, -1, -1), (-1, -1, 0, 0)],
     170        [[0, 1, 2, 3], [0, 1, 3, 4], [0, 1, 2, 4], [1, 3, 4, 5], [0, 3, 4, 5],
    161171         [1, 2, 4, 5], [0, 2, 4, 5], [1, 2, 3, 5], [0, 2, 3, 5]] ]
    162172}
    163173
     
    376386        """
    377387        return self._make_CPRFanoToricVariety('P1xP1', names)
    378388
     389    def P1xP1_Z2(self, names='s t x y'):
     390        r"""
     391        Construct the toric `\mathbb{Z}_2`-orbifold of the del Pezzo
     392        surface `\mathbb{P}^1 \times \mathbb{P}^1` as a toric variety.
     393       
     394        INPUT:
     395       
     396        - ``names`` -- string. Names for the homogeneous
     397          coordinates. See
     398          :func:`~sage.schemes.generic.toric_variety.normalize_names`
     399          for acceptable formats.
     400
     401        OUTPUT:
     402
     403        A :class:`CPR-Fano toric variety
     404        <sage.schemes.generic.fano_toric_variety.CPRFanoToricVariety_field>`.
     405
     406        EXAMPLES::
     407
     408            sage: P1xP1_Z2 = toric_varieties.P1xP1_Z2()
     409            sage: P1xP1_Z2
     410            2-d CPR-Fano toric variety covered by 4 affine patches
     411            sage: P1xP1_Z2.fan().ray_matrix()
     412            [ 1 -1 -1  1]
     413            [ 1 -1  1 -1]
     414            sage: P1xP1_Z2.gens()
     415            (s, t, x, y)
     416            sage: P1xP1_Z2.Chow_group().degree(1)
     417            C2 x Z^2
     418        """
     419        return self._make_CPRFanoToricVariety('P1xP1_Z2', names)
     420
    379421    def P1(self, names='s t'):
    380422        r"""
    381423        Construct the projective line `\mathbb{P}^1` as a toric
     
    10841126        """
    10851127        return self._make_CPRFanoToricVariety('P4_11169_resolved', names)
    10861128
     1129    def P4_11133(self, names='z+'):
     1130        """
     1131        Construct the weighted projective space
     1132        `\mathbb{P}^4(1,1,1,3,3)`.
     1133       
     1134        INPUT:
     1135       
     1136        - ``names`` -- string. Names for the homogeneous
     1137          coordinates. See
     1138          :func:`~sage.schemes.generic.toric_variety.normalize_names`
     1139          for acceptable formats.
     1140
     1141        OUTPUT:
     1142
     1143        A :class:`CPR-Fano toric variety
     1144        <sage.schemes.generic.fano_toric_variety.CPRFanoToricVariety_field>`.
     1145
     1146        EXAMPLES::
     1147       
     1148            sage: P4_11133 = toric_varieties.P4_11133()
     1149            sage: P4_11133
     1150            4-d CPR-Fano toric variety covered by 5 affine patches
     1151            sage: P4_11133.fan().ray_matrix()
     1152            [ 1  0  0  0 -3]
     1153            [ 0  1  0  0 -3]
     1154            [ 0  0  1  0 -1]
     1155            [ 0  0  0  1 -1]
     1156            sage: P4_11133.gens()
     1157            (z0, z1, z2, z3, z4)
     1158        """
     1159        return self._make_CPRFanoToricVariety('P4_11133', names)
     1160
     1161    def P4_11133_resolved(self, names='z+'):
     1162        """
     1163        Construct the weighted projective space
     1164        `\mathbb{P}^4(1,1,1,3,3)`.
     1165       
     1166        INPUT:
     1167       
     1168        - ``names`` -- string. Names for the homogeneous
     1169          coordinates. See
     1170          :func:`~sage.schemes.generic.toric_variety.normalize_names`
     1171          for acceptable formats.
     1172
     1173        OUTPUT:
     1174
     1175        A :class:`CPR-Fano toric variety
     1176        <sage.schemes.generic.fano_toric_variety.CPRFanoToricVariety_field>`.
     1177
     1178        EXAMPLES::
     1179       
     1180            sage: P4_11133_resolved = toric_varieties.P4_11133_resolved()
     1181            sage: P4_11133_resolved
     1182            4-d CPR-Fano toric variety covered by 9 affine patches
     1183            sage: P4_11133_resolved.fan().ray_matrix()
     1184            [ 1  0  0  0 -3 -1]
     1185            [ 0  1  0  0 -3 -1]
     1186            [ 0  0  1  0 -1  0]
     1187            [ 0  0  0  1 -1  0]
     1188            sage: P4_11133_resolved.gens()
     1189            (z0, z1, z2, z3, z4, z5)
     1190        """
     1191        return self._make_CPRFanoToricVariety('P4_11133_resolved', names)
     1192       
    10871193
    10881194toric_varieties = ToricVarietyFactory()