Todo - BrentBaccala/Singular GitHub Wiki

Further separation of sub-packages within kernel

Note: It is recommended to start with 3 commits':

  1. separate sources:
  2. create a new directory (e.g. /kernel/somepackage) in kernel for your sub-package
  3. move the necessary sources there with git mv (NOTE: please don't change them!)
  4. update SOURCES in /kernel/Makefile.am (i.e. remove moved sources from the list)
  5. copy /kernel/sample/Makefile.am and adapt it: * replace sample with your sub-package name (e.g. libsample with libsomepackage) * update libsomepackage_la_SOURCES list * git add this new Makefile.am
  6. change /configure.ac and /kernel/Makefile.am similar to SAMPLE (NOTE: use your sub-package name somepackage instead of sample)
  7. commit and test it on TC
  8. separate headers
  9. move the necessary headers to your sub-package directory with git mv (NOTE: please don't change them!)
  10. update KERNELHEADERS in /kernel/Makefile.am (i.e. remove moved headers from the list)
  11. update libsomepackage_la_include_HEADERS and libsomepackage_la_includedir
  12. commit
  13. adapt all the includes (e.g. change #include <kernel/someheader.h> to #include <kernel/somepackage/someheader.h> in /kernel/*, /Singular/*.{c,cc,h} and /dyn_modules//.{cc,h}
  14. commit and test it on TC

Possible sub-packages (higher level mathematical algorithms):

  • Numeric (O: done)
    • mpr_{base,inout,numeric}.{cc,h}
  • FGLM (O: done with d3e2512fa2f04365279bc6ac289aceafdd3ceff6 and 066288456fa8bd509318f0501d9d2f78256ddda3)
    • fglmgauss.h fglm.h fglmvec.h fglmcomb.cc fglmgauss.cc fglmhom.cc fglmvec.cc fglmzero.cc
  • Maps (Done by Adi):
    • fast_maps.{cc,h}
  • Spectrum (Done by Adi):
    • {semic,spectrum,splist}.{cc,h},
    • GMPrat.cc (due toHAVE_SPECTRUM), KMatrix.h,
    • {npolygon,multicnt}.{h,cc}
  • Combinatorics with hilb, vdim (Done by Adi):
    • {hdegree,hilb}.cc
    • hutil.{cc,h}
  • Linear algebra (Done by Adi):
    • eigenval.{h,cc}, linearAlgebra.{cc,h}
    • {Minor,MinorInterface,MinorProcessor}.{h,cc}
    • Cache.h, CacheImplementation.h,
    • interpolation.*
    • minpoly.*
  • Groebner walks: {walkMain,walkProc,walkSupport}.{cc,h} (Done by Adi)
  • GBEngine with GB + syzygies, resolutions, ratgbring, sba (aka F5) and slimgb (aka F4 and tgb) (Done by Adi):
    • F4.cc F4.h f5c.cc f5c.h f5data.cc f5data.h f5gb.cc f5gb.h f5lists.cc f5lists.h
    • gr_kstd2.cc, nc.*, sca.cc, shiftgb.{cc,h}
    • khstd.{h,cc}, kInline.h, kpolys.cc, kspoly.cc
    • kstd1.cc kstd1.h kstd2.cc kstdfac.cc kstdfac.h
    • kutil.{cc,h}, stairc.h
    • ratgring.{cc,h} (TODO HAVE_RATGRING seems to be forgotten)
    • syz0.cc syz1.cc syz2.cc syz3.cc syz.cc syz.h
    • tgb.cc tgbgauss.cc tgbgauss.h tgb.h tgb_internal.h
    • units.{cc,h} (??)
    • janet.{cc,h}
  • misc -- candidates for kernelCommon or to be moved into /Singular or /libpolys (TODO!):
    • common headers: mod2.h, structs.h
    • polys.cc,h, ideals.cc,h (to be moved to libpolys?)
    • fast_mult.cc,h,
    • preimage.cc,h - (high level algorithm?! which package?)
    • digitech.cc,h
    • tmult.cc
    • timer.cc,h (to be moved to /Singular/?)
    • febase.cc,h, feread.cc
    • misc.cc
    • unused at the moment in /old: IIntvec.h, old.*

These sub-packages are to be placed instead of ... under libSingular/kernel on the Singular4 diagram below.

O: Moved the following files from /Singular/ to /kernel/:

  • Cache.h, CacheImplementation.h, Minor*, interpolation., minpoly.
  • janet.*

O: Moved the following from /kernel/ to /Singular/:

  • for Windows: htmlhelp.{h,lib}

Plan:

  1. find related files/parts of code for each package
  2. assign people
  3. separate packages:
  • one-by-one
  • keep Singular functional all the time
  • simplest (most independent) first
  1. the left-overs (kernelUtils) should not contain significant mathematical parts (at the end):
  • polys.{h,cc} (with ring currRing)

Current Singular4 package/library inclusion/usage diagram:

S4 Diagramm

Show diaram