This tutorial is probably also available as a Jupyter notebook in the demo folder in the polymake source and on github.

Different versions of this tutorial: latest release, release 4.6, release 4.5, release 4.4, release 4.3, release 4.2, release 4.1, release 4.0, release 3.6, nightly master

Saving and Restoring an Array of Polytopes

If you want to deal with a whole family of polytopes at the same time, it will sometimes be convenient to save and restore them to a single file. polymake has a simple mechanism for this, storing your array of polytopes into a single tarball.

The necessary functions for this are contained in the script “tarballs” that you can load into your polymake session by calling

> script("tarballs");

It provides the two functions pack_tarball and unpack_tarball.

Here is a simple example, where we create an array @a containing a cube and a simplex and save this to a file.

> @a = ();
> $a[0] = cube(3);
> $a[1] = simplex(3);
> pack_tarball("simple_polytopes.tgz",@a);

This creates a file simple_polytopes.tgz in the current directory that is a tarred (and gzipped) archive containing two polymake files. polymake detects whether you want the archive gzipped or not from the supplied file extension (*.tar.gz or *.tgz). You can verify this by calling tar tvfz simple_polytopes.tgz from the command line:

[nightingale]:~/temp>tar tvfz simple_polytopes.tgz 
-rw------- xxx/yyy 1468 2009-07-01 17:20 1.poly
-rw------- xxx/yyy  854 2009-07-01 17:20 2.poly

If you want to get more descriptive names for your polymake files then you have to set a name for each polytope first.

> $a[0]->name = "my_cube";
> $a[1]->name = "my_simplex";
> pack_tarball("simple_polytopes.tgz",@a);

sets the names of the files in the tarball to my_cube.poly and my_simplex.poly:

[nightingale]:~/temp>tar tvfz simple_polytopes.tgz 
-rw------- xxx/yyy  952 2009-07-01 17:21 my_cube.poly
-rw------- xxx/yyy  650 2009-07-01 17:21 my_simplex.poly

You can restore your saved array by using the function unpack_tarball:

> @a=unpack_tarball("simple_polytopes.tgz");
> print $a[0]->name;

If you just want a specific polytope from your tarball, then you can supply its name in the command:

> @a=unpack_tarball("simple_polytopes.tgz","my_simplex.poly");
> print $a[0]->name;

You may supply more than one filename. However, wildcards are not supported. Note that changes in the files are not automatically stored in the archive, you have to call pack_tarball to update the files.

You can of course apply tar to your favorite family of polymake files to create a tarball without using polymake. It can be read by polymake as long as the files are at the root of the archive (i.e. don't pack a whole directory tree). The archive also may not contain non-polymake files.

  • user_guide/tutorials/tarballs.txt
  • Last modified: 2019/02/11 16:45
  • by oroehrig