Difference between revisions of "HowTo:Contribute an ApCoCoA-2 Package"

From ApCoCoAWiki
(Created page with "There are three main steps to describe a new ApCoCoA package in this wiki: # Implementing the package functions. # Adding a manual, a version info and the copyright licence to...")
 
m (grammar)
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
There are three main steps to describe a new ApCoCoA package in this wiki:
+
This page describes how to contribute a package to ApCoCoA. There are three main steps for contributing an ApCoCoA Package:
# Implementing the package functions.
+
# Implementing the package functions, see [[HowTo:Implement an ApCoCoA-2 Package]],
# Adding a manual, a version info and the copyright licence to the package file
+
# Send your package to one of our [[Team|Team members]],
# Adding a global alias to the package '''meta.cpkg5'''
+
# Describe your package in this Wiki, see [[HowTo:Document an ApCoCoA-2 Package]].
# Describing the package in the ApCoCoA Wiki.
 
  
In the following description, words marked as <code><span style="color:red;"><<word>></span></code> are placeholders, i.e. you should replace this text after copying.
+
== Example for an ApCoCoA package ==
 
+
The file <code>sagbi.cpkg5</code> in the directory <code>apcocoa/</code> in the package directory starts with the following lines:
== Implementation ==
+
<div class="mw-collapsible mw-collapsed">
At the very first, you have to create a file <code><span style="color:red;"><<package name>></span>.cpkg5</code>. This is the package file and will later be located in the folder
+
<div style="font-weight:bold;line-height:1.6; padding:1em; border:1px solid #c8ccd1; background-color: #f8f9fa;">Source code of sagbi.cpkg5 (the relevant part)</div>
/plugins/apcocoa/lib/cocoa/packages/apcocoa/
+
<div class="mw-collapsible-content">
in the apcocoa directory. If the package is self-contained, you can first put it anywhere and load it in ApCoCoA or CoCoA-5 for testing the functions. Otherwise, we recommend putting it in the ApCoCoA package directory on your system and test it using ApCoCoA. The package can be reloaded for testing using the command
+
  <nowiki>--
Source MEMORY_ApCoCoA_Packages_Path + "<span style="color:red;"><<name>></span>.cpkg5";
 
 
 
The following is a minimal example for the package:
 
Package apcocoa/<span style="color:red;"><<package name>></span>
 
export skip;
 
 
EndPackage;
 
 
 
The linke <code>export skip;</code> is needed in order to tell CoCoA that this package does not export any functions. If you want to export functions, you can delete this line.
 
 
 
Afterwards you can now add the functions you want to have in the package. For instance, if you write
 
Package apcocoa/<span style="color:red;"><<package name>></span>
 
export skip;
 
 
Define Foo()
 
  PrintLn "Foo";
 
EndDefine; -- Foo
 
 
EndPackage;
 
 
 
you can call this function from CoCoA with <code>$apcocoa/<span style="color:red;"><<package name>></span>.foo();</code>.
 
 
 
== Adding package info ==
 
At first, add the following information at the top of the package file (above <code>Package apcocoa/<span style="color:red;"><<package name>></span></code>):
 
--
 
-- This file is part of the ApCoCoA package pool.
 
--
 
--  Copyright (c) ApCoCoA Project (Prof. Dr. Martin Kreuzer, Uni Passau)
 
--
 
--  Authors: <span style="color:red;"><<year>> <<author name>></span>
 
--
 
-- Visit <nowiki>http://apcocoa.org/</nowiki> for more information regarding ApCoCoA.
 
-- Visit <nowiki>http://www.apcocoa.org/wiki/ApCoCoA:KnownIssues</nowiki> for bugs, problems
 
-- and known issues.
 
--
 
-- The ApCoCoA package pool is free software; you can redistribute it and/or
 
-- modify it under the terms of the GNU General Public License (version 3 or
 
-- later) as published by the Free Software Foundation. A copy of the full
 
-- licence may be found in the file COPYING in this directory.
 
--
 
-- The ApCoCoA package pool is distributed in the hope that it will be useful,
 
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
 
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
-- GNU General Public License for more details.
 
--
 
-- You should have received a copy of the GNU General Public License
 
-- along with the ApCoCoA package pool; if not, write to the Free Software
 
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
 
 
Then create two functions:
 
 
 
Define About()
 
  PrintLn "    Topic  : <span style="color:red;"><<Topic name (single word)>></span>";
 
  PrintLn "    Keywords: <span style="color:red;"><<keywords>></span>";
 
  PrintLn "    Authors : <span style="color:red;"><<author name>></span>";
 
  PrintLn "    Version : <span style="color:red;"><<current CoCoA version>></span>";
 
  PrintLn "    Date    : <span style="color:red;"><<release date>></span>";
 
EndDefine; -- About
 
 
Define Man()
 
  PrintLn "Recommended Alias:";
 
  PrintLn "  alias <span style="color:red;"><<alias>></span> := $apcocoa/<span style="color:red;"><<package name>></span>;";
 
  PrintLn;
 
  ...
 
EndDefine; -- Man
 
 
 
The function <code>Man()</code> should contain a short description for every function contained in the package.
 
For a clearer description of <code>About()</code> see the example below.
 
 
 
== Adding a global alias ==
 
Global aliases are managed on top of the meta package <code>meta.cpkg5</code>. Just add the line
 
Alias <span style="color:red;"><<alias>></span> := $apcocoa/<span style="color:red;"><<package name>></span>
 
to the other global aliases.
 
 
 
== Wiki Description ==
 
Currently, the ApCoCoA help is exported from time to time from this wiki. For this to work properly, carefully proceed with the following steps:
 
# Create the page '''Category:Package <span style="color:red;"><<package name>></span>.
 
# Create the page '''Package <span style="color:red;"><<package name>></span>''' and add the code <code><nowiki>[[</nowiki>Category:Package <span style="color:red;"><<package name>></span><nowiki>]]</nowiki></code>. Here you can describe the package using all wiki tools including [https://www.mediawiki.org/wiki/Extension:Math latex].
 
# For every function in the package you want to describe, create a page '''Package <span style="color:red;"><<package name>></span>/<span style="color:red;"><<alias>></span>.<span style="color:red;"><<function name>></span>''', e.g. [[Package sagbi/SB.SAGBI]]
 
 
 
For the third step to work correctly, it is necessary to use the following template:
 
 
 
<!--------------------------------------------------------------------------------------------------------------------------->
 
 
 
<nowiki>{{Version|2}}
 
 
<command>
 
 
 
  <title></nowiki><span style="color:red;"><<alias>></span>.<span style="color:red;"><<function name>></span><nowiki></title>
 
  <short_description></nowiki><span style="color:red;">Function description in one sentence</span><nowiki></short_description>
 
 
 
  <syntax>
 
    </nowiki><span style="color:red;"><alias></span>.<span style="color:red;"><<function name>></span>(<span style="color:red;"><<input parameters and types>></span>):<span style="color:red;"><<output type>></span><nowiki>
 
  </syntax>
 
  <description>
 
    </nowiki><span style="color:red;"><nowiki><!-- Here comes a short description of the functions --></nowiki></span><nowiki>
 
    <itemize>
 
      </nowiki><span style="color:red;"><nowiki><!-- Describe every input parameter of the function --></nowiki></span><nowiki>
 
      <item>@param <em></nowiki><span style="color:red;"><nowiki><<parameter name>></nowiki></span><nowiki></em> </nowiki><span style="color:red;"><<parameter description>></span><nowiki></item>
 
      <item>@param <em></nowiki><span style="color:red;"><nowiki><<parameter name>></nowiki></span><nowiki></em> </nowiki><span style="color:red;"><<parameter description>></span><nowiki></item>
 
      <item>@return </nowiki><span style="color:red;"><nowiki><<description of the return value>></nowiki></span><nowiki></item>
 
    </itemize>
 
 
    </nowiki><span style="color:red;"><nowiki><!-- Examples here (also only one or more than two possible) --></nowiki></span><nowiki>
 
    </nowiki><span style="color:red;"><nowiki><!-- It is important to omit any indentation inside the example environment --></nowiki></span><nowiki>
 
    <example>
 
</nowiki><span style="color:red;"><nowiki><<first example>></nowiki></span><nowiki>
 
    </example>
 
    <example>
 
</nowiki><span style="color:red;"><nowiki><<second example>></nowiki></span><nowiki>
 
    </example>
 
 
 
  </description>
 
 
 
  </nowiki><span style="color:red;"><nowiki><!-- Add related pages --></nowiki></span><nowiki>
 
  <seealso>
 
    <see></nowiki><span style="color:red;"><nowiki><<first page>></nowiki></span><nowiki></see>
 
    <see></nowiki><span style="color:red;"><nowiki><<second page>></nowiki></span><nowiki></see>
 
  </seealso>
 
 
 
  </nowiki><span style="color:red;"><nowiki><!-- I have no idea what this is meaning --></nowiki></span><nowiki>
 
  <types>
 
    <type></nowiki><span style="color:red;"><nowiki><<first type>></nowiki></span><nowiki></type>
 
    <type></nowiki><span style="color:red;"><nowiki><<second type>></nowiki></span><nowiki></type>
 
  </types>
 
 
 
  </nowiki><span style="color:red;"><nowiki><!-- Add keys here --></nowiki></span><nowiki>
 
  <key></nowiki><span style="color:red;">first key</span><nowiki></key>
 
  <key></nowiki><span style="color:red;">second key</span><nowiki></key>
 
 
 
  <wiki-category>Package </nowiki><span style="color:red;"><<package name>></span><nowiki></wiki-category>
 
 
 
</command>
 
</nowiki>
 
 
 
<!--------------------------------------------------------------------------------------------------------------------------->
 
 
 
Empty template:
 
<nowiki>{{Version|2}}
 
 
<command>
 
 
 
  <title> </title>
 
  <short_description> </short_description>
 
 
 
  <syntax>
 
   
 
  </syntax>
 
  <description>
 
    <itemize>
 
      <item>@param <em> </em>  </item>
 
      <item>@param <em> </em>  </item>
 
      <item>@return  </item>
 
    </itemize>
 
   
 
    <example>
 
 
 
    </example>
 
 
 
  </description>
 
 
 
  <seealso>
 
    <see> </see>
 
    <see> </see>
 
  </seealso>
 
 
 
  <types>
 
    <type> </type>
 
    <type> </type>
 
  </types>
 
 
 
  <key> </key>
 
  <key> </key>
 
 
 
  <wiki-category>Package </wiki-category>
 
 
 
</command>
 
</nowiki>
 
 
 
== Example ==
 
The file <code>sagbi.cpkg5</code> in the directory <apcocoa/> in the package directory:
 
<pre>
 
--
 
 
-- This file is part of the ApCoCoA package pool.
 
-- This file is part of the ApCoCoA package pool.
 
--
 
--
Line 232: Line 48:
 
Define Man()
 
Define Man()
 
   PrintLn "Recommended Alias:";
 
   PrintLn "Recommended Alias:";
   PrintLn "  alias SB := $apcocoa/sagbi;";
+
   PrintLn "  Alias SB := $apcocoa/sagbi;";
 
   PrintLn;
 
   PrintLn;
 
   PrintLn;
 
   PrintLn;
Line 283: Line 99:
  
 
EndPackage;
 
EndPackage;
 +
</nowiki>
 +
</div>
 +
 +
In this Wiki, we have the pages [[Package sagbi]], [[:Category:Package sagbi]] and function pages like [[Package sagbi/SB.SAGBI]]:
 +
<div class="mw-collapsible mw-collapsed">
 +
<div style="font-weight:bold;line-height:1.6; padding:1em; border:1px solid #c8ccd1; background-color: #f8f9fa;">Source code of the wiki page '''Package sagbi/SB.SAGBI'''</div>
 +
<div class="mw-collapsible-content">
 +
<pre>
 +
{{Version|2|[[ApCoCoA-1:SB.Sagbi]] and [[ApCoCoA-1:SB.ReducedSagbi]]}}
 +
<command>
 +
  <title>SB.SAGBI</title>
 +
  <short_description>Computes a finite SAGBI-basis of a subalgebra if existing.</short_description>
 +
 +
  <syntax>SB.SAGBI(G:LIST of POLY):LIST of POLY</syntax>
 +
  <description>
 +
This function computes a finite SAGBI-basis of a subalgebra <tt>S</tt> generated by the polynomials of the list <tt>G</tt>, if a finite SAGBI-basis of <tt>S</tt> exists. Then a list of polynomials is returned which form a SAGBI-basis of <tt>S</tt>. Otherwise the computation runs until it is interrupted.
 +
    <itemize>
 +
      <item>@param <em>G</em> A list of polynomials which generates a subalgebra.</item>
 +
      <item>@return A list of polynomials which form a finite SAGBI-basis of the subalgebra generated by <tt>G</tt>.</item>
 +
    </itemize>
 +
 +
    <example>
 +
Use QQ[x,y,z], DegRevLex;
 +
S := SB.SAGBI([x^2 -z^2,  x*y +z^2,  y^2 -2*z^2]);
 +
indent(S);
 +
-- [
 +
--  y^2 -2*z^2,
 +
--  x*y +z^2,
 +
--  x^2 -z^2,
 +
--  x^2*z^2 +x*y*z^2 +(1/2)*y^2*z^2 +(-1/2)*z^4
 +
-- ]</example>
 +
  </description>
 +
 +
  <seealso>
 +
    <see>Package sagbi/SB.TruncSAGBI</see>
 +
    <see>Package sagbi/SB.SAGBITimeout</see>
 +
    <see>Package sagbi/SB.IsSAGBIOf</see>
 +
    <see>Package sagbi/SB.GetSAGBI</see>
 +
    <see>Package sagbi/SB.GetTruncSAGBI</see>
 +
  </seealso>
 +
 +
  <types>
 +
    <type>sagbi</type>
 +
    <type>poly</type>
 +
  </types>
 +
 +
  <key>SAGBI</key>
 +
  <key>SB.SAGBI</key>
 +
  <key>apcocoa/sagbi.SAGBI</key>
 +
 +
  <wiki-category>Package sagbi</wiki-category>
 +
</command>
 
</pre>
 
</pre>
 +
</div>
  
In this Wiki, we have the pages [[Package sagbi]], [[Category:Package sagbi]] and function pages like [[Package sagbi/SB.SAGBI]].
+
which produces
 +
 
 +
<div class="mw-collapsible mw-collapsed">
 +
<div style="font-weight:bold;line-height:1.6; padding:1em; border:1px solid #c8ccd1; background-color: #f8f9fa;">Page '''Package sagbi/SB.SAGBI'''</div>
 +
<div class="mw-collapsible-content" style="padding:1em; border:1px solid #c8ccd1;>
 +
{{Version|2|[[ApCoCoA-1:SB.Sagbi]] and [[ApCoCoA-1:SB.ReducedSagbi]]|NOCATEGORY=true}}
 +
<command>
 +
  <title>SB.SAGBI</title>
 +
  <short_description>Computes a finite SAGBI-basis of a subalgebra if existing.</short_description>
  
 +
  <syntax>SB.SAGBI(G:LIST of POLY):LIST of POLY</syntax>
 +
  <description>
 +
This function computes a finite SAGBI-basis of a subalgebra <tt>S</tt> generated by the polynomials of the list <tt>G</tt>, if a finite SAGBI-basis of <tt>S</tt> is existing. Then a list of polynomials is returned which form a SAGBI-basis of <tt>S</tt>. Otherwise the computation runs until it is interrupted.
 +
    <itemize>
 +
      <item>@param <em>G</em> A list of polynomials which generates a subalgebra.</item>
 +
      <item>@return A list of polynomials which form a finite SAGBI-basis of the subalgebra generated by <tt>G</tt>.</item>
 +
    </itemize>
 +
 +
    <example>
 +
Use QQ[x,y,z], DegRevLex;
 +
S := SB.SAGBI([x^2 -z^2,  x*y +z^2,  y^2 -2*z^2]);
 +
indent(S);
 +
-- [
 +
--  y^2 -2*z^2,
 +
--  x*y +z^2,
 +
--  x^2 -z^2,
 +
--  x^2*z^2 +x*y*z^2 +(1/2)*y^2*z^2 +(-1/2)*z^4
 +
-- ]</example>
 +
  </description>
 +
 +
  <seealso>
 +
    <see>Package sagbi/SB.TruncSAGBI</see>
 +
    <see>Package sagbi/SB.SAGBITimeout</see>
 +
    <see>Package sagbi/SB.IsSAGBIOf</see>
 +
    <see>Package sagbi/SB.GetSAGBI</see>
 +
    <see>Package sagbi/SB.GetTruncSAGBI</see>
 +
  </seealso><types><type>sagbi</type><type>poly</type></types><key>SAGBI</key><key>SB.SAGBI</key><key>apcocoa/sagbi.SAGBI</key></command>
 +
</div>
  
[[Category:ApCoCoA Packages]]
+
[[Category:ApCoCoA Manual]]
 +
[[Category:HowTo]]

Latest revision as of 15:56, 9 February 2021

This page describes how to contribute a package to ApCoCoA. There are three main steps for contributing an ApCoCoA Package:

  1. Implementing the package functions, see HowTo:Implement an ApCoCoA-2 Package,
  2. Send your package to one of our Team members,
  3. Describe your package in this Wiki, see HowTo:Document an ApCoCoA-2 Package.

Example for an ApCoCoA package

The file sagbi.cpkg5 in the directory apcocoa/ in the package directory starts with the following lines:

Source code of sagbi.cpkg5 (the relevant part)
--
-- This file is part of the ApCoCoA package pool.
--
--   Copyright (c) ApCoCoA Project (Prof. Dr. Martin Kreuzer, Uni Passau)
--
--   Authors: 2020 Bernhard Andraschko
--
-- Visit http://apcocoa.org/ for more information regarding ApCoCoA.
-- Visit http://www.apcocoa.org/wiki/ApCoCoA:KnownIssues for bugs, problems 
-- and known issues.
--
-- The ApCoCoA package pool is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License (version 3 or
-- later) as published by the Free Software Foundation. A copy of the full
-- licence may be found in the file COPYING in this directory.
--
-- The ApCoCoA package pool is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with the ApCoCoA package pool; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Package $apcocoa/sagbi

export skip;
  
Define About()
  PrintLn "    	Topic   : Subalgebras";
  PrintLn "    	Keywords: Subalgebra, SAGBI bases";
  PrintLn "    	Authors : B. Andraschko";
  PrintLn "    	Version : CoCoA 5.3.2";
  PrintLn "    	Date    : 7 September 2020";
EndDefine; -- About

Define Man()
  PrintLn "Recommended Alias:";
  PrintLn "   Alias SB := $apcocoa/sagbi;";
  PrintLn;
  PrintLn;
  PrintLn "Description:";
  PrintLn "   Contains basic functions for subalgebras of polynomial rings, e.g.";
  PrintLn "   Hilbert series, SAGBI bases of testing for subalgebra membership.";
  PrintLn "   In our context, a subalgebra is a tagged record containing all";
  PrintLn "   informations about the subalgebra as e.g. a unique ID, the base ring,";
  PrintLn "   generators, etc.";
  PrintLn "   To get these informations, one can use the getter methods described";
  PrintLn "   below. For Details about the record fields see the description of the";
  PrintLn "   function Subalgebra(...).";
  PrintLn;
  PrintLn;
  PrintLn "Function Description:";
  PrintLn "   Note: we write short \"SUBALGEBRA\" for \"TAGGED(\"$sagbi.Subalgebra\")\"";
  PrintLn "   For a short function list type in";
  PrintLn "     SB.FnList();";
  PrintLn;
  PrintLn " Main functions:";
  PrintLn;
  PrintLn "   Subalgebra(R: RING, fs: LIST) : SUBALGEBRA";
  PrintLn "     Input: a polynomial ring R and a list fs of polynomials in R";
  PrintLn "     Output: a tagged record S containing the following fields:";
  PrintLn "       ID: A unique ID";
  PrintLn "       CoeffRing: the coefficient ring K of R";
  PrintLn "       Ring: the super ring of S, i.e. R";
  PrintLn "       gens: a list of generators of the subalgebra, i.e. S = K[fs]";
  PrintLn "       SAGBI: a storage field for a (truncated) SAGBI basis of S";
  PrintLn "              - initially []";
  PrintLn "       trunc: the truncation degree of the currently computed truncated";
  PrintLn "              SAGBI basis - initially 0. If SAGBI is a complete SAGBI basis,";
  PrintLn "              then trunc is set to -1.";
  PrintLn "       HS: Hilbert Series of S - initially 0.";
  PrintLn "     Note: Assumes R is standard-graded ring";
  PrintLn;
  PrintLn "   SAGBI(G: LIST): LIST";
  PrintLn "     Input: a list of polynomials G";
  PrintLn "     Output: a SAGBI basis of K[G]";
  ...
EndDefine; -- Man

SubalgebraID := 0;

Define Subalgebra(R,fs)
  ...
EndDefine;

...

EndPackage;

In this Wiki, we have the pages Package sagbi, Category:Package sagbi and function pages like Package sagbi/SB.SAGBI:

Source code of the wiki page Package sagbi/SB.SAGBI
{{Version|2|[[ApCoCoA-1:SB.Sagbi]] and [[ApCoCoA-1:SB.ReducedSagbi]]}}
<command>
  <title>SB.SAGBI</title>
  <short_description>Computes a finite SAGBI-basis of a subalgebra if existing.</short_description>

  <syntax>SB.SAGBI(G:LIST of POLY):LIST of POLY</syntax>
  <description>
This function computes a finite SAGBI-basis of a subalgebra <tt>S</tt> generated by the polynomials of the list <tt>G</tt>, if a finite SAGBI-basis of <tt>S</tt> exists. Then a list of polynomials is returned which form a SAGBI-basis of <tt>S</tt>. Otherwise the computation runs until it is interrupted.
    <itemize>
      <item>@param <em>G</em> A list of polynomials which generates a subalgebra.</item>
      <item>@return A list of polynomials which form a finite SAGBI-basis of the subalgebra generated by <tt>G</tt>.</item>
    </itemize>

    <example>
Use QQ[x,y,z], DegRevLex;
S := SB.SAGBI([x^2 -z^2,  x*y +z^2,  y^2 -2*z^2]);
indent(S);
-- [
--   y^2 -2*z^2,
--   x*y +z^2,
--   x^2 -z^2,
--   x^2*z^2 +x*y*z^2 +(1/2)*y^2*z^2 +(-1/2)*z^4
-- ]</example>
  </description>

  <seealso>
    <see>Package sagbi/SB.TruncSAGBI</see>
    <see>Package sagbi/SB.SAGBITimeout</see>
    <see>Package sagbi/SB.IsSAGBIOf</see>
    <see>Package sagbi/SB.GetSAGBI</see>
    <see>Package sagbi/SB.GetTruncSAGBI</see>
  </seealso>

  <types>
    <type>sagbi</type>
    <type>poly</type>
  </types>

  <key>SAGBI</key>
  <key>SB.SAGBI</key>
  <key>apcocoa/sagbi.SAGBI</key>

  <wiki-category>Package sagbi</wiki-category>
</command>

which produces

Page Package sagbi/SB.SAGBI
This article is about a function from ApCoCoA-2. If you are looking for the ApCoCoA-1 version of it, see ApCoCoA-1:SB.Sagbi and ApCoCoA-1:SB.ReducedSagbi.

SB.SAGBI

Computes a finite SAGBI-basis of a subalgebra if existing.

Syntax

SB.SAGBI(G:LIST of POLY):LIST of POLY

Description

This function computes a finite SAGBI-basis of a subalgebra S generated by the polynomials of the list G, if a finite SAGBI-basis of S is existing. Then a list of polynomials is returned which form a SAGBI-basis of S. Otherwise the computation runs until it is interrupted.

  • @param G A list of polynomials which generates a subalgebra.

  • @return A list of polynomials which form a finite SAGBI-basis of the subalgebra generated by G.

Example

Use QQ[x,y,z], DegRevLex;
S := SB.SAGBI([x^2 -z^2,  x*y +z^2,  y^2 -2*z^2]);
indent(S);
-- [
--   y^2 -2*z^2,
--   x*y +z^2,
--   x^2 -z^2,
--   x^2*z^2 +x*y*z^2 +(1/2)*y^2*z^2 +(-1/2)*z^4
-- ]

See also

Package sagbi/SB.TruncSAGBI

Package sagbi/SB.SAGBITimeout

Package sagbi/SB.IsSAGBIOf

Package sagbi/SB.GetSAGBI

Package sagbi/SB.GetTruncSAGBI