GSoC is one week away from its midterm evaluation period (June 20-27). Progress for this algebraic curves project over the last two weeks has been to finish reviewing tickets #20676, #20697, #20698 which have now been merged into the Sage code base, and to work on implementing more of the basic algebraic curve functionality. The new tickets that have been opened to for this so far are #20774, #20790, and #20811. Another objective was added to #20697 to rename the curve classes so that plane curves would inherit from more general classes ProjectiveCurve, AffineCurve, which represent space curves, and to rename the folder “plane_curves” that the files for these classes reside in to just “curves” to accommodate the addition of functionality for more general curves. A discussion of this change can be found in the sage-devel forum thread here.
The aim of ticket #20774 is to implement functionality to analyze the singular points of a curve. The first objective here is to actually compute the set of singular points of a curve. This can be done by finding the rational points on the subscheme defined by the Jacobian ideal of the curve. For a curve in affine or projective space of dimension this is the ideal generated by the determinants of the minors of the Jacobian matrix of the curve. When the corresponding subscheme is zero-dimensional (which will be the case if the curve is irreducible/reduced), there are finitely many singular points, and we are able to find all of them. Once we can compute the set of singular points of a curve, we can implement functionality to classify them. An important tool for this classification is the multiplicity of a singular point. For a general affine variety , we can compute the multiplicity of a singular point of by computing the multiplicity of the local ring . This in turn is defined in terms of the Hilbert-Samuel polynomial corresponding to the local ring. To do this in Sage, I used the existing functionality in Singular for working with local rings. For projective varieties, a way to compute the multiplicity of a singular point is to compute the multiplicity of the corresponding point on any affine patch of the variety containing the point. For plane curves, we can also compute the tangents of the curves at points. These can be used to determine if a singular point is an ordinary singularity, which is defined to a be a singular point at which the tangents are distinct.
Ticket #20774 only implements singularity analysis functionality at the curve level. That is, all of the functions belong to the curve classes. So even if you have a point P that is on a curve C, things like P.is_singular() currently are not defined, but would be helpful to have. To address this, I opened ticket #20811 to create classes for points on curves, and to give objects of those classes access to the singularity functionality in #20774.
One of the main goals to complete before the midterm evaluation week is the implementation of functionality for computing plane curve models of space curves. This will allow us to reduce problems such as computing rational parameterizations (when they exist) of space curves to that of plane curves. This will be done in ticket #20790. So far, I have implemented a first attempt at projecting projective space curves into lower dimensional ambient spaces. My approach for doing this is to first pick a point not on the curve, then apply an automorphism of projective space that moves that point to , and then apply the projection map , which will be well-defined when the domain is restricted to the translated curve. The closure of the image of this map can then be computed via elimination theory.
This week my goal is to finish the plane curve model functionality, and implement that of computing the degree/arithmetic genus of general curves and intersection analysis.