digraph IncludesInSingular4
{
  compound=true;
  edge [ arrowhead=open ];
  graph [
//    rankdir=TB;
  ];
  pack = 0 ;
  packMode = "graph" ;
  subgraph "clusterlibpolys"
  {
      label="libpolys: math. data structures";
      color = lightgray;
      style = filled;
      node [ fillcolor = white, style = filled, color = black, fontcolor=black];
      { rank=same;  misc ; reporter ; };
      { rank=same; coeffs ; polys };
  } ;
  subgraph "clusterlibSingular"
  {
        rank="max" ;
        label="libSingular:";
        color = lightgray;
        style = filled;
        node [ fillcolor = white, style = filled, color = black, fontcolor=black];
        interpreter [] ;
        subgraph "clusterMOD"
        {
	          rank="min" ;
		  label="Modules: dynamic and built-ins";
		  color = gray;
//        	  style = filled;
  		  node [ fillcolor = white, style = filled, color = black, fontcolor=black];
		  { rank=same; pyobject [color = gray]; gfanlib [color = gray]; polymake [color = gray]; singmathic [color = gray]; };
		  { rank=same; syzextra; bigintm; staticdemo; };
        }
        subgraph "clusterMath"
        {
	          rank="min" ;
		  label="kernel: math. high level algorithms";
		  color = gray;
//        	  style = filled;
  		  node [ fillcolor = white, style = filled, color = black, fontcolor=black];
		  { rank=same; fglm; numeric; maps; kernelCommon; combinatorics; };
		  { rank=same; linear_algebra; spectrum; groebner_walk; GBEngine;};
		  oswrapper [color = gray];
         }
  } ;
  subgraph "clusterinternals"
  {
    label="Supporting libraries:";
    { rank=same;
      omalloc [ fillcolor=lightgrey, fontcolor=darkgreen, style=filled, color = black, shape=box ] ;
      libresources [ fillcolor=lightgrey, style=filled, color = black, shape=box ]  ;
    } ;
    { rank=same;
      Gfanlib [ fillcolor=lightgrey, fontcolor=blue, style=filled, color = black, shape=box ] ;
      factory [ fillcolor=lightgrey, fontcolor=blue, style=filled, color = black, shape=box ] ;
    } ;
   subgraph "clusterexternals"
   {
    rank="min" ;
    node [ color=blue, fillcolor=lightgrey, fontcolor=blue, style=filled, shape=box ];
    label="Externals:";
    color=blue;
    { rank=same; GMP_OR_MPIR []; MPFR [] ; } ;
    { rank=same; NTL ; FLINT ;  PolyMakeRTL; };
    { rank=same; mathicgb; cddlib; Python2RTL; };
   } ;
  } ;
  NTL -> GMP_OR_MPIR [style = "dotted"];
  FLINT -> GMP_OR_MPIR [style = "dotted"];
  cddlib -> GMP_OR_MPIR [style = "dotted"];
  FLINT -> MPFR [style = "dotted"];
MPFR -> GMP_OR_MPIR [style = "dotted"];
factory -> FLINT [];
  factory -> GMP_OR_MPIR [];
  factory -> NTL [];
  factory -> omalloc;
  factory -> libresources;
  Singular -> interpreter [];
  interpreter -> numeric [lhead="clusterMath"];
//  interpreter -> "..." [lhead="clusterMath"];
  interpreter -> "syzextra" [dir=both, arrowtail="open", arrowhead="open", lhead="clusterMOD"];
  syzextra -> kernelCommon [lhead="clusterMath", ltail="clusterMOD"];
  polymake -> gfanlib [];
  gfanlib -> Gfanlib [];
  Gfanlib -> cddlib [];
  singmathic -> mathicgb [];
  pyobject -> Python2RTL [];
  polymake -> PolyMakeRTL [];
  kernelCommon -> polys [ltail="clusterlibSingular", lhead="clusterlibpolys"];
  kernelCommon -> factory [ltail="clusterlibSingular"];
  combinatorics -> kernelCommon [];
  GBEngine -> combinatorics [];
  fglm -> kernelCommon [];
  GBEngine -> kernelCommon [];
  groebner_walk -> kernelCommon [];
  linear_algebra -> kernelCommon [];
  maps -> kernelCommon [];
  numeric -> kernelCommon [];
  spectrum -> kernelCommon [];
  oswrapper -> kernelCommon [];
  polys -> coeffs [dir=both, arrowtail="open", arrowhead="open"] ;
  polys -> misc;
  polys -> reporter;
  polys -> factory [];
  reporter -> misc [dir=both, arrowtail="open", arrowhead="open"] ;
  coeffs -> NTL [];
  coeffs -> factory [];
  coeffs -> misc;
  coeffs -> reporter;
  misc -> libresources [ltail="clusterlibpolys"];
  misc -> omalloc [ltail="clusterlibpolys"];
  misc -> GMP_OR_MPIR [ltail="clusterlibpolys"];
}
// dot -Tpng -o D.png Includes.dot
// boxed = third party
// filled = external
// blue = math
