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

polytope > 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.

polytope > @a = ();
polytope > $a[0] = cube(3);
polytope > $a[1] = simplex(3);
polytope > 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.

polytope > $a[0]->name = "my_cube";
polytope > $a[1]->name = "my_simplex";
polytope > 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

Restoring the array

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

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

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

polytope > @a=unpack_tarball("simple_polytopes.tgz","my_simplex.poly");
polytope > 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.

Packing archives outside polymake

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.

tutorial/tarballs.txt · Last modified: 2017/04/20 15:47 by oroehrig
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki