D = linearSeries Dplus
D = linearSeries (Dplus, Dminus)
D = linearSeries (DplusList, Ring)
D = linearSeries (DplusList, DminusList, Ring)
Given C, a (possibly singular) irreducible plane curve, this routine computes the complete linear series of a given divisor on the normalization C' of C by computations using data from the plane curve together with the conductor ideal $cond =ann_C(C/C)$, which can be computed by Macaulay or supplied by the user using the optional argument Conductor => cond.
If D0' and Dinf' are effective divisors on C' whose ideals, as schemes, are pulled back from ideals D0 and Dinf of C, then
ell = linearSeries(D0,Dinf)
returns a onerow matrix ell whose entries span a linear series with fixed point locus B on C' (including the conductor scheme) and form a basis of D0'Dinf'+B.
As an example, consider a quintic plane curve with an ordinary triple point and two more marked points:









Since the delta invariant of a triple point is 3, the geometric genus of C is 3 less than the arithmetic genus computed natively, and the conductor is the square of the maximal ideal:



As another example, we compute the complete linear series m*p_2e*p1 for values of m from 3 to 12. In the following chart, each column represents one value of the degree, m2. The first row gives the degree, the second row gives the value of the Euler characteristic
$\chi {\mathcal O}_C(m*p2  2*p1)$
as computed by the RiemannRoch Theorem, and the last row gives the dimension of the complete linear series as computed by this program. Since the linear series is general The last two rows agree starting in degree since the series is nonspecial from there on.


"The Practic of Algebraic Curves" by David Eisenbud and Joe Harris
A bit slower in characteristic 0
The object linearSeries is a method function with options.