Skip to content
malex984 edited this page Nov 16, 2014 · 24 revisions

Planning

Library and other prerequisites (desirable)

  • GMP
  • Flint
  • Readline
  • NTL
  • Singular
  • Factory
  • call C++ methods from Julia:
    • name mangling
    • exception handling, virtual methods are not necessary for Singular binding

Bugs encountered

  • Polymake configure option in Singular doesn't work
  • Julia CXX package requires Julia source build of 0.4-nightly
  • Powering test fails in Nemo with Julia-0.4 (now fixed)
  • https://github.com/Keno/Cxx.jl/issues/20 (workarounds exist)

Proof of concept for libsing

  • Does Julia's CXX interface work? Yes.

  • Does Julia's CXX require packages to be built with Clang? No.

  • Can we pass Julia types to C++? Currently no. Keno is working on it. (Issue 22)

  • Initialise path to Singular executable from libresources (feInitResources(const char*))

  • Make use of canonical form from libfactory (canonical form)

    • there is a global context encoding the base field: Zp, ZZ, QQ, which is set before constructing canonical forms
    • CF = either is a pointer to internal CF, immediate integers (small, Zp) or a pointer to big integer or QQ
    • CF is a sparse recursive polynomial over Zp, ZZ, QQ
  • Singular low level types (in libpolys):

    • element: intvec (no elementHandler)
    • element: number == void*, elementHandler: coeffs,
    • element: poly = pointer to Spolyrec, elementHandler: ring
    • all the types are pointers
    • elementHandlers pointer to separate classes with function pointers emulating "virtual method"s
    • arrays of elements:
      • numbermatrix, Handler: coeffs,
      • ideal = ideal/matrix/module/map?, Handler: ring
      • polyrec, resolution
  • Make use of polys and rings from libpolys (rDefault (int, int, char **) and p_One(const ring)).

  • Print ring with rWrite(ring, BOOLEAN), poly with printf p_String(poly,ring,ring).

First experiments are at Accessing Singular from Julia