pyCICY package

Submodules

pyCICY.pyCICY module

Created on Fri Jun 08 16:45:23 2018

pyCICY - A python CICY toolkit. It allows for computation of line bundle cohomologies over Complete Intersection Calabi Yau manifolds.

Further, it includes functions to determine various topological quantities, such as Chern classes, Hodge numbers and triple intersection numbers.

Authors

Magdalena Larfors (magdalena.larfors@physics.uu.se) Robin Schneider (robin.schneider@physics.uu.se)

Version

v0.01 - pyCICY toolkit made available - 29.5.2019.

class pyCICY.pyCICY.CICY(name, conf, doc=False, dir='~/Documents/data/CICY/')[source]

Bases: object

Leray(V, line=True)[source]

Determines the first instance, i=1, of a Leray table for a given vector bundle V.

\[\begin{align} E_{i+1}^{j,k} = \frac{\text{Ker}(d_i : E_{i}^{j,k} (\mathcal{V}) \rightarrow E_i^{j-1,k-1}(\mathcal{V}) )}{\text{Im}(d_i : E_{i}^{j+i-1,k+i} (\mathcal{V}) \rightarrow E_i^{j,k}(\mathcal{V}) )} \end{align}\]

V has to be in proper BBW notation, this is most easily achieved, by taking e.g. a line bundle L = [q_1 , … ,q_n] and

>>> V = M._line_to_BBW(L)
Parameters:
  • V (nested list) – A vector bundle in BBW notation.
  • line (bool, optional) – True, if the vector bundle is a line bundle, by default True.
Returns:

  • E (nested list) – The first Leray instance
  • origin (nested list) – The origin of each non trivial entry.

See also

line_co()
Line bundle cohomology of L.
_line_to_BBW()
Transforms a line bundle into BBW notation.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> V = M._line_to_BBW([3,-4])
>>> M.Leray()
([[0, 0, 0, [[3, 0]], 0, 0], [0, 0, 0, [[1, -1], [2, -3]], 0, 0], [0, 0, 0, [[0, -4]], 0, 0]],
 [[0, 0, 0, 0, 0, 0], [0, 0, 0, [(0,), (1,)], 0, 0], [0, 0, 0, [(0, 1)], 0, 0]])
def_poly()[source]

Returns the defining polynomials with (redundant) complex moduli as coefficients.

Returns:normal – A list of the normal sections in terms of monomials.
Return type:list/sympyexpr

Example

>>> M = CICY('quintic', [[4,5]])
>>> M.def_poly()
[45*x0**5 + 50*x0**4*x1 + ... + 40*x3*x4**4 + 30*x4**5]
drst(r, s, t, x=1)[source]

Determines the triple intersection number d_rst. We use:

\[\begin{align} d_{rst} = \int_X J_r \wedge J_s \wedge J_t = \int_A \mu \wedge J_r \wedge J_s \wedge J_t \end{align}\]

where mu is the top form

\[\begin{align} \mu = \bigwedge^K_{a=1} \left( \sum_{p=1}^{m} q_a^p J_p \right) \; . \end{align}\]
Parameters:
  • r (int) – index r.
  • s (int) – index s.
  • t (int) – index t.
  • x (int, optional) – Normalization for integral, by default 1.
Returns:

drst – Returns the triple intersection number drst.

Return type:

float

Raises:

Exception – Only defined for Calabi Yau threefolds.

See also

drstmatrix()
Determines all triple intersection numbers.
secondchernvector()
The second Chern class as a vector.
eulerc()
The eulercharacteristic.
drstu()
The quadruple intersection numbers for a four fold.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.drst(0,1,1)
7.0
drstmatrix()[source]

Determines all triple intersection numbers.

Returns:d – numpy array of all triple intersection numbers, d_rst.
Return type:array[nProj, nProj, nProj]

See also

drst()
Determines the triple intersection number d_rst.
secondchernvector()
The second Chern class as a vector.
eulerc()
The eulercharacteristic.
drstu()
The quadruple intersection numbers for a four fold.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.drstmatrix()
array([[[0., 3.],
        [3., 7.]],
       [[3., 7.],
        [7., 2.]]])
drstu(r, s, t, u, x=1)[source]

Determines the quadruple intersection numbers, d_rstu, for Calabi Yau four folds.

Parameters:
  • r (int) – the index r.
  • s (int) – the index s.
  • t (int) – the index t.
  • u (int) – the index u.
  • x (int, optional) – Normalization for integral, by default 1.
Returns:

drstu – The quadruple intersection number d_rstu.

Return type:

float

Raises:

Exception – If the Calabi Yau is smaller than a four fold.

See also

drst()
Determines the triple intersection number d_rst.
eulerc()
The eulercharacteristic.
drstumatrix()
All quadruple intersection numbers of a four fold.

Example

>>> M = CICY('4fold', [[2,3],[2,3],[1,2]])
>>> M.drstu(0,1,1,2)
3

References

[1]All CICY four-folds, by J. Gray, A. Haupt and A. Lukas. https://arxiv.org/pdf/1303.1832.pdf
drstumatrix()[source]

Determines all quadruple intersection numbers.

Returns:d – numpy array of all quadruple intersection numbers, d_rstu.
Return type:array[nProj, nProj, nProj, nProj]

See also

drst()
Determines the triple intersection number d_rst.
eulerc()
The eulercharacteristic.
drst()
The quadruple intersection number d_rstu for a four fold.

Example

>>> M = CICY('4fold', [[2,3],[2,3],[1,2]])
>>> M.drstu(0,1,1,2)
array([[[[0., 0., 0.],
         [0., 2., 3.],
         [0., 3., 0.]],
            ...
        [[0., 0., 0.],
         [0., 0., 0.],
         [0., 0., 0.]]]])
eulerc()[source]

Determines the Euler characteristic via integration of the Chern class. Take e.g. n=3

\[\begin{align} \chi = \frac{1}{2} \int_X c_3 \; . \end{align}\]
Returns:e – The euler characteristic.
Return type:float

See also

drst()
Determines the triple intersection number d_rst.
thirdchern()
The third Chern class of J_r, J_s, J_t.
drstu()
The quadruple intersection number d_rstu for a four fold.
fourthchern()
The fourth Chern class of J_r, J_s, J_t, J_u.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.eulerc()
-114.0
firstchern(r)[source]

Determines the first Chern class corresponding to J_r, via

\[\begin{align} c_1^r &= \bigg[ n_r +1 - \sum_{a=1}^{K} q_a^r \bigg]. \end{align}\]
Parameters:r (int) – the index of J_r.
Returns:c1 – The first Chern class corresponding to J_r.
Return type:int

See also

firstchernvector()
All first Chern classes.
secondchern()
Second Chern class of J_r, J_s.
thirdchern()
Third Chern class of J_r, J_s, J_t.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.firstchern(0)
0
firstchernvector()[source]

Determines the full first Chern class.

Returns:vector – The full firt Chern class for all J_r.
Return type:array[nProj]

See also

firstchern()
First Chern class of J_r.
secondchern()
Second Chern class of J_r, J_s.
thirdchern()
Third Chern class of J_r, J_s, J_t.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.firstchernvector()
[0,0]
fourthchern(r, s, t, u)[source]

Determines the fourth Chern class J_r, J_s, J_t, J_u for Calabi Yau four folds

\[\begin{align} c_4^{rstu} = \frac{1}{4} \bigg[ - \delta^{rstu} (n_r + 1 ) + \sum_{a=1}^{K} q_a^r q_a^s q_a^t q_a^u + 2 c_2^{rs} c_2^{tu} \bigg]. \end{align}\]
Parameters:
  • r (int) – the index of J_r.
  • s (int) – the index of J_s.
  • t (int) – the index of J_t.
  • u (int) – the index of J_u.
Returns:

c4 – The fourth Chern class corresponding to J_r, J_s, J_t, J_u.

Return type:

float

Raises:

Exception – If the Calabi Yau is smaller than a four fold.

See also

firstchern()
First Chern class of J_r.
secondchern()
Second Chern class of J_r, J_s.
thirdchern()
Third Chern class of J_r, J_s, J_t.
fourthchernall()
All fourth Chern classes.

Example

>>> M = CICY('4fold', [[2,3],[2,3],[1,2]])
>>> M.fourthchern(0,1,1,2)
20.25

References

[1]All CICY four-folds, by J. Gray, A. Haupt and A. Lukas. https://arxiv.org/pdf/1303.1832.pdf
fourthchernall()[source]

Determines all fourth Chern classes in a nested list.

Returns:matrix – The full fourth Chern class.
Return type:array[nProj, nProj, nProj, nProj]

See also

firstchern()
First Chern class of J_r.
secondchern()
Second Chern class of J_r, J_s.
thirdchern()
Third Chern class of J_r, J_s, J_t.
fourthchern()
Foruth Chern class of J_r, J_s, J_t, J_u.

Example

>>> M = CICY('4fold', [[2,3],[2,3],[1,2]])
>>> M.fourthchernall()
[[[[24.0, 27.0, 18.0], [27.0, 24.75, 18.0], [18.0, 18.0, 10.5]], ... , [[10.5, 11.25, 7.5], [11.25, 10.5, 7.5], [7.5, 7.5, 4.0]]]]
help()[source]

Prints an incomplete list of supported functions into the console.

hodge_data()[source]

Determines the hodge numbers of the CICY. Based on Euler and adjunction sequence. I checked the results for all three folds against the ones found in the CICYlist. The computation of the four fold hodge numbers, however, has only been checked for some selected examples. Hence, the results should be taken with care and compared to the literature.

Returns:h – hodge numbers of the CICY.
Return type:array[nfold+1]
Raises:Exception – Only implemented for 2,3 and 4 folds.

See also

eulerc()
Determines the euler characteristic

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.hodge_data()
[0, 59, 2.0, 0]

References

[1]CY - The Bestiary, T. Hubsch http://inspirehep.net/record/338506?ln=en
hodge_numbers()[source]

Prints the hodge numbers into the console, only supported for 2,3,4 folds.

info()[source]

Prints a broad overview of the geometric properties into the console. Includes: Configuration matrix, Hodge diamond, triple intersection numbers, Chern classes, Euler characteristic and defining Polynomials.

is_directproduct()[source]

Determines if a CICY is a direct product.

Returns:
  • direct (bool) – True if direct product, else False.
  • product (list) – If direct == False, contains the components of the direct product and their position, else an empty list.
Raises:Exception – If the configuration matrix contains a mistake.

See also

is_favourable()
Determines if the CICY is favourable.

Examples

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.is_directproduct()
(False, [])
>>> D = CICY('TxK3', [[2,3,0],[3,0,4]])
>>> D.is_directproduct()
(True, [['T', [0]], ['K3', [1]]])
is_favourable()[source]

Determines if the CICY is favourable, i.e. h^{1,1} = number of projective spaces.

Returns:self.fav – True for favourable CICYs, False for non.
Return type:bool

See also

is_directproduct()
Determines if the CICY is a direct product.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.is_favourable()
True
l_slope(line, dual=False)[source]

Determines the zero slope condition of a line bundle on a favourable CICY

\[\begin{align} \mu (L) = c_1^i (L) d_{ijk} t^j t^k = 0 \; . \end{align}\]
Parameters:
  • line (array[nProj]) – The line bundle L.
  • dual (bool, optional) – If true, uses dual coordinates k_i = d_{ijk} t^j t^k, by default False.
Returns:

  • slope (bool) – True, if it can be satisfied somewhere in the Kähler cone.
  • solution (sympyexpr) – The slope condition.

See also

line_slope()
Returns the slope in terms of general charges.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.l_slope([-4,3])
(True, [9.0*t0**2 + 18.0*t0*t1 - 22.0*t1**2])
line_co(L, space=False, short=True)[source]

The main function of this CICY toolkit. It determines the cohomology of a line bundle over the CY. Based on the Leray spectral sequence and Bott-Borel-Weil theorem. Makes use of the index and vanishing theorem to shorten computation time.

Parameters:
  • L (array[nProj]) – The line bundle L.
  • space (bool, optional) – If True returns the cohomology in term of maps, rather than the dimension, by default False.
  • short (bool, optional) – If False, calculates the rank of all maps and does not make use of simplifications, by default True.
Returns:

  • hodge (array[nfold+1]) – hodge numbers of the line bundle L.
  • hspace (nested list, optional) – If space, then also a nested list of maps is returned.

See also

line_co_euler()
Returns the index of a line bundle

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.line_co([-4,3])
[0,46,0,0]

References

[1]CY - The Bestiary, T. Hubsch http://inspirehep.net/record/338506?ln=en
[2]Heterotic and M-theory Compactifications for String Phenomenology, L. Anderson https://arxiv.org/abs/0808.3621
line_co_euler(L, Leray=False)[source]

Determines the index of a line bundle L.

Parameters:
  • L (array[nProj]) – The line bundle L as a simple list.
  • Leray (bool, optional) – If True, uses the Leray table to determine the index, by default False. For n=/=3 folds automatically falls back to the Leray table.
Returns:

euler – The index of L.

Return type:

float

See also

line_index()
Determines the index in terms of general charges.
line_co()
Determines the line bundle cohomology of L.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.line_co_euler([-4,3])
-46.0
line_index()[source]

Determines the index of a general line bundle in terms of the charges m_i. Currently only implemented for three folds, where

\[\begin{align} \text{ind}(L) = \sum_{q=0}^{n} (-1)^q h^q(X,L) = \frac{1}{6} d_{rst} m^r m^s m^t + \frac{1}{12} c_2^r m_r \; . \end{align}\]
Returns:euler – A polynomial in the line bundle charges
Return type:sympyexpr

See also

line_co_euler()
Determines the index of a specific line bundle.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.line_index()
1.5*m0**2*m1 + 3.5*m0*m1**2 + 3.0*m0 + 0.333333333333333*m1**3 + 3.66666666666667*m1
line_slope()[source]

Determines the slope of a general line bundle over a favourable CY.

Returns:constraint – Sympyexpression of the slope.
Return type:sympyexpr

See also

l_slope()
The zero slope condition of a line bundle L.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.line_slope()
6.0*m0*t0*t1 + 7.0*m0*t1**2 + 3.0*m1*t0**2 + 14.0*m1*t0*t1 + 2.0*m1*t1**2
secondchern(r, s)[source]

Determines the second Chern class corresponding to J_r, J_s, via

\[\begin{align} c_2^{rs} =\frac{1}{2} \bigg[ - \delta^{rs} (n_r + 1 ) + \sum_{a=1}^{K} q_a^r q_a^s \bigg]. \end{align}\]
Parameters:
  • r (int) – the index of J_r.
  • s (int) – the index of J_s.
Returns:

c2 – The second Chern class corresponding to J_r, J_s.

Return type:

float

See also

firstchern()
First Chern class of J_r.
secondchernmatrix()
All second Chern classes.
secondchernvector()
Second Chern class as a vector using triple intersection numbers.
thirdchern()
Third Chern class of J_r, J_s, J_t.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.secondchern(0,1)
2.5
secondchernmatrix()[source]

Determines all second Chern classes in a matrix.

Returns:matrix – The full second Chern class.
Return type:array[nProj, nProj]

See also

firstchern()
First Chern class of J_r.
secondchern()
Second Chern class of J_r, J_s.
secondchernvector()
Second Chern class as a vector using triple intersection numbers.
thirdchern()
Third Chern class of J_r, J_s, J_t.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.secondchernmatrix()
[[1.0, 2.5], [2.5, 3.0]]
secondchernvector()[source]

Uses the triple intersection numbers to contract the second chern matrix to a vector:

\[\begin{align} c_{2;t} = d_{rst} c_2^{rs}. \end{align}\]
Returns:chern – The second Chern class as a vector.
Return type:array[nProj]

See also

drst()
Determines the triple intersection number d_rst.
secondchern()
The second Chern class of J_r, J_s.
secondchernmatrix()
All second Chern classes.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.secondchernvector()
[36.0, 44.0]
thirdchern(r, s, t)[source]

Determines the third Chern class corresponding to J_r, J_s, J_t, via

\[\begin{align} c_3^{rst} = \frac{1}{3} \bigg[ \delta^{rst} (n_r + 1 ) - \sum_{a=1}^{K} q_a^r q_a^s q_a^t \bigg]. \end{align}\]
Parameters:
  • r (int) – the index of J_r.
  • s (int) – the index of J_s.
  • t (int) – the index of J_t.
Returns:

c3 – The third Chern class corresponding to J_r, J_s, J_t.

Return type:

float

See also

firstchern()
First Chern class of J_r.
secondchern()
Second Chern class of J_r, J_s.
thirdchernarray()
Complete third Chern class.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.thirdchern(0,1,1)
-3.6666666666666665
thirdchernarray()[source]

Determines all third Chern classes in a nested list.

Returns:matrix – The full third Chern class.
Return type:array[nProj, nProj, nProj]

See also

firstchern()
First Chern class of J_r.
secondchern()
Second Chern class of J_r, J_s.
thirdchern()
Third Chern class of J_r, J_s, J_t.

Example

>>> M = CICY('7833', [[2,2,1],[3,1,3]])
>>> M.thirdchernarray()
[[[-2.0, -2.3333333333333335], [-2.3333333333333335, -3.6666666666666665]], [[-2.3333333333333335, -3.6666666666666665], [-3.6666666666666665, -8.0]]]
pyCICY.pyCICY.apoly(n, deg)[source]

Module contents