Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/liepring/gap/   (GAP Algebra Version 4.15.1©)  Datei vom 11.5.2024 mit Größe 3 kB image not shown  

Quelle  singular.gi   Sprache: Shell

 

#############################################################################
##
## variables and polynomials are a problem - GAP is very slow in computing
## with polynomials and Singular is fast, but has bugs.
##

IsSingularAvailable_known:= false;

if not IsBound( StartSingular ) then
  # Avoid warnings about unbound global variables.
  StartSingular:= "dummy";
fi;

BindGlobal( "StartSingularIfAvailable", function()
  local IsExec, sing_exec;

  # Once we got a positive answer, we need not check.
  if IsSingularAvailable_known = true then
    return true;
  fi;

  # If the Singular package is not available
  # then we cannot use the Singular executable.
  if not IsPackageMarkedForLoading( "Singular", "" ) then
    return false;
  fi;

  # Use the code from Singular's
  # 'CheckSingularExecutableAndTempDir' in order to determine
  # whether a Singular executable will be found by the Singular package.
  # Note that the fact that the Singular package had been loaded
  # does not imply that a Singular executable will be found.
  IsExec:= path -> IsString( path ) and not IsDirectoryPath( path )
                   and IsExecutableFile( path );

  if IsBoundGlobal( "sing_exec" ) then
    # The Singular package has been loaded.
    sing_exec:= ValueGlobal( "sing_exec" );
    if not IsString( sing_exec ) then
      # This may happen after a failed 'StartSingular()' call.
      sing_exec:= "singular";
    fi;
  else
    # Use the default path.
    sing_exec:= "singular";
  fi;
  if IsDirectoryPath( sing_exec ) then
    sing_exec:= Filename( Directory( sing_exec ), "Singular" );
  elif not IsExecutableFile( sing_exec ) then
    sing_exec:= Filename( DirectoriesSystemPrograms(), sing_exec );
  fi;
  if not IsExec( sing_exec ) then
    sing_exec:= Filename( DirectoriesSystemPrograms(), "Singular" );
  fi;
  if IsExec( sing_exec ) then
    IsSingularAvailable_known:= true;
    StartSingular();
    return true;
  fi;
  return false;
end );

if IsString( StartSingular ) then
  Unbind( StartSingular );
fi;

StartSingularIfAvailable();
ORDER := MonomialGrlexOrdering();

if not IsBound( SINGULARGBASIS ) then
  SINGULARGBASIS:= "dummy";
fi;

BindGlobal( "CallGroebner", function( list )
    local oldvar, new;
    if Length(list) = 0 then return list; fi;
    if StartSingularIfAvailable() then
      # Use the Singular standalone.
      oldvar := GBASIS;
      GBASIS := SINGULARGBASIS;
      new := GroebnerBasis(list, ORDER);
      GBASIS := oldvar;
    else
      # Use GAP's implementation.
      new := GroebnerBasis(list, ORDER);
    fi;
    return ReducedGroebnerBasis(new, ORDER);
end );

if IsString( SINGULARGBASIS ) then
  Unbind( SINGULARGBASIS );
fi;

USE_GAP_FACS := false;

if not IsBound( SingularSetBaseRing ) then
  # Avoid warnings about unbound global variables.
  SingularSetBaseRing:= "dummy";
  FactorsUsingSingularNC:= "dummy";
fi;

BindGlobal( "MyFactors", function(pp, h)
    local R, k, w, q;

    if USE_GAP_FACS then return Factors(h); fi;
    if not StartSingularIfAvailable() then return Factors(h); fi;

    # singular is faster, but it has bugs ...
    w := IndeterminateByName("w");
    q := Concatenation(pp, [w]);
    R := PolynomialRing(Rationals, q);
    SingularSetBaseRing(R);
    k := FactorsUsingSingularNC(h);
    if Product(k) = h then return k{[2..Length(k)]}; fi;

    # fall back
    return Factors(h);
end );

if IsString( SingularSetBaseRing ) then
  Unbind( SingularSetBaseRing );
  Unbind( FactorsUsingSingularNC );
fi;

Messung
CHZG
8610010095

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.