I'm trying to understand the (pretty undocumented) method `.sigma()`

method for formal groups of elliptic curves, as listed here. The source code looks like this:

```
def sigma(self, prec=10):
"""
EXAMPLES::
sage: E = EllipticCurve('14a')
sage: F = E.formal_group()
sage: F.sigma(5)
t + 1/2*t^2 + (1/2*c + 1/3)*t^3 + (3/4*c + 3/4)*t^4 + O(t^5)
"""
a1,a2,a3,a4,a6 = self.curve().ainvs()
k = self.curve().base_ring()
fl = self.log(prec)
R = rings.PolynomialRing(k,'c'); c = R.gen()
F = fl.reverse()
S = rings.LaurentSeriesRing(R,'z')
c = S(c)
z = S.gen()
F = F(z + O(z**prec))
wp = self.x()(F)
e2 = 12*c - a1**2 - 4*a2
g = (1/z**2 - wp + e2/12).power_series()
h = g.integral().integral()
sigma_of_z = z.power_series() * h.exp()
T = rings.PowerSeriesRing(R,'t')
fl = fl(T.gen()+O(T.gen()**prec))
sigma_of_t = sigma_of_z(fl)
return sigma_of_t
```

For context, an elliptic curve object in Sage is specified by an actual Weierstrass form $$y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6$$ with paramaters $[a_1,a_2,\ldots, a_6]$, and not just an isomorphism class. The only really important part of the above code is the second to last stanza, as the rest is just converting between the parameter $z$ (from the complex uniformization) and the customary formal group parameter $t=-x/y$.

**Mathematical context**

Anyway, this code is apparently supposed to return some form of the Weierstrass $\sigma$-function, or more accurately I think it's supposed to return something like the $p$-adic $\sigma$-function as studied by Mazur and Tate in their paper of that name (and many others since). Recall that the classical Weierstrass $\sigma$-function satisfies (among many other identities) $$d(d\log \sigma(z;\Lambda)) = - \wp(z;\Lambda).$$ where $\Lambda$ is the (fixed, for our purposes) auxiliary data of a lattice in $\mathbb{C}$, equivalently a rigidified elliptic curve.

The $p$-adic $\sigma$-function according to Mazur and Tate is usually put in terms of the formal parameter $t$, but for our purposes, we'll just write it in terms of $z$. In that case it can be given by $$\sigma_p(z;\Lambda) := \exp(-E^{(p)}_2(\Lambda)z^2/24)\sigma(z;\Lambda)$$ where $E^{(p)}$ is the $p$-stabilized Eisenstein series of weight $2$, normalized to have residue $1$ at the cusp at infinity. In particular, by taking the second log derivative of both sides we get $d(d\log\sigma_p(z)) = -\wp -E^{(p)}_2(\Lambda)/12$.

(Compare this to the formula $X-\wp = E^{(p)}_2(\Lambda)/12$ on page 2 of the Mazur-Tate article.)

**The source of my confusion**

The code above *almost*, but not quite, looks like it does this. Indeed, we have the Weierstrass $\wp$-function initialized as its power series in terms of $z$

```
wp = self.x()(F)
```

using the fact that the $x$-coordinate in Weierstrass form is said function. This is followed by this mysterious line:

```
e2 = 12*c - a1**2 - 4*a2
```

which appears to say that we should have something like "$E_2^{(p)}(\Lambda) = 12c -a_1^2-4a_2$" (probably up to a scalar since e2 might be normalized differently), where $c$ is a free variable whose "meaning" is not clear to me.

The rest of the relevant code does this:

```
g = (1/z**2 - wp + e2/12).power_series()
h = g.integral().integral()
sigma_of_z = z.power_series() * h.exp()
```

which is all very much as expected: indeed, if we apply $d\circ d\log$ to the equation in the last line, we get

$$ d(d\log \text{"sigma of z"}(z)) = -\frac{1}{z^2}+ d(d\text{"h"}) = -\frac{1}{z^2}+\text{"g"} = -\wp + \frac{\text{"e2"}}{12}$$

This makes it indeed look like `e2`

is some form of $E_2^{(p)}$, but it appears to be off by a factor of $-2$. Could just be a weird normalization, or (as likely) a mistake on my part.

(One thing which suggests that it's not a mistake and in fact is just a different of a factor of $-2$ is that in the case that $a_1=a_2=0$, e.g. reduced Weierstrass form), `c`

is then $-\frac{1}{24}E_2^{(p)}$, which is a pretty standard normalization often denoted $G_2^{(p)}$.)

So my question generally is, **what's going on here?** More specifically,

Am I correct that this is supposed to be something like the $p$-adic $\sigma$-function? (It has to be somewhat more subtle that that, I guess, since it's not like it can be all of them for different $p$ at the same time, but I'm failing to see how it works.)

What's going on with the

`e2`

variable and its relationship to the`c`

variable? What precise relationship is the former supposed to have to $E_2^{(p)}$ as above? What are you supposed to ``plug in'' for`c`

to actually get particular values of $\sigma_p$ for different $p$? Can you use this variable to evaluate it at a different rigidification (i.e. choice of invariant differential) without changing the isomorphism class of the elliptic curve? And how does this relate to the weird equation`e2 = 12*c - a1**2 - 4*a2`

?