overdesigned class to connect URLs, names, and classes of "official" archives.
The all archive name gets special treatment. The 'all'-archive is
currently needed in cocopp.main but could be dropped otherwise.
The class collects the "official" online data archives as attributes.
Each suite is also a different class inheriting from COCODataArchive.
The class may become the same for some or all suites in future.
cocopp.archives is an instance of OfficialArchives and contains as
archive attributes (at this point in time):
all: COCODataArchive, the list of all archived data from
all test suites.
bbob: COCOBBOBDataArchive, the list of archived data run on the
bbob test suite.
bbob_noisy: COCOBBOBNoisyDataArchive, ditto on the bbob_noisy
test suite.
bbob_biobj: COCOBBOBBiobjDataArchive, ditto...
The names property is a list of all "official" archive names available.
A Quick Guide
1) To list all available data:
>>> import cocopp >>> cocopp.archives.all # doctest:+ELLIPSIS,+SKIP, ['bbob/2009/AL...
2) To see all available data from a given test suite:
>>> cocopp.archives.bbob # doctest:+ELLIPSIS,+SKIP, ['2009/ALPS...
or
>>> cocopp.archives.bbob_biobj # doctest:+ELLIPSIS,+SKIP, ['2016/DEMO_Tusar...
or
>>> cocopp.archives.bbob_noisy # doctest:+ELLIPSIS,+SKIP, ['2009/ALPS...
3) We can extract a subset from any test suite (such as
cocopp.archives.all, cocopp.archives.bbob, ...) of the
archive by sub-string matching:
>>> cocopp.archives.bbob.find('bfgs') # doctest:+NORMALIZE_WHITESPACE,+ELLIPSIS,+SKIP ['2009/BFGS_ros_noiseless.tgz', '2012/DE-BFGS_voglis_noiseless.tgz', '2012/PSO-BFGS_voglis_noiseless.tgz', '2014-others/BFGS-scipy-Baudis.tgz', '2014-others/L-BFGS-B-scipy-Baudis.tgz'...
or by regex pattern matching:
>>> cocopp.archives.bbob.find('bfgs') == cocopp.archives.bbob.find('.*bfgs') True
but
>>> len(cocopp.archives.bbob.find('bfgs')) > len(cocopp.archives.bbob.find('bfgs.*')) True
The find method will not download data and is only for inspecting the
archives. If we want to actually process the data we need to use get,
get_all, get_extended or get_found, or use the same search string
in cocopp.main appending a * if more than one algorithm should be
processed:
4) When postprocessing data via `cocopp.main`, we can use the archive like
>>> cocopp.main(cocopp.archives.bbob.get_all('bfgs').as_string) # doctest:+SKIP
or the shortcut
>>> cocopp.main('bfgs*') # doctest:+SKIP
using the special meaning of the trailing * in this case (see below).
The get and get_extended methods are called on each argument given in a
string to main. We can do things like
>>> cocopp.main('bbob/2009/BIPOP DE-BFGS') # doctest:+SKIP
When a string has multiple matches, the postprocessing bails out. For
such cases, we can use the trailing symbols * (AKA take all matches)
and ! (AKA take the first match) which uses the get_extended method
under the hood:
>>> cocopp.main('BIPOP! 2012/DE*') # doctest:+SKIP
will expand to the following:
Post-processing (2+)
Using:
/.../.cocopp/data-.../bbob/2009/BIPOP-CMA-ES_hansen_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DE-AUTO_voglis_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DE-BFGS_voglis_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DE-ROLL_voglis_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DE-SIMPLEX_voglis_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DE_posik_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DEAE_posik_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DEb_posik_noiseless.tgz
/.../.cocopp/data-.../bbob/2012/DEctpb_posik_noiseless.tgz
Post-processing (2+)
loading data...
[...]
5) If we want to also pass other arguments to the postprocessing (e.g. the output folder) in case 3) above, string concatenation does the trick:
>>> cocopp.main('-o myoutputfolder ' + cocopp.archives.bbob.get_all('bfgs').as_string) # doctest:+SKIP
For case 4), this works directly:
>>> cocopp.main('-o myoutputfolder BIPOP! 2012/DE*') # doctest:+SKIP
| Method | __init__ |
all URLs and classes (optional) in one place. |
| Method | add |
Allow to use a new official archive. |
| Method | class_ |
class of archive named name when returned by get |
| Method | link |
Assign all archives as attribute of target except for 'test'. |
| Method | set |
Assign all archives as attribute of target except for 'test'. |
| Method | update |
update archive definition files from their remote location. |
| Method | url |
return url of "official" archive named name. |
| Instance Variable | all |
Undocumented |
| Property | names |
a list of valid key names |
| Property | urls |
a name->URL dictionary |
| Method | _get |
get j-th entry of name, where j==0 is the URL and j==1 is the class |
| Method | _make |
workaround to avoid bailing when www is not reachable during |
| Instance Variable | _base |
Undocumented |
| Instance Variable | _list |
Undocumented |
all URLs and classes (optional) in one place.
The archive names are identical with the last part of the URL. The only
exception is made for 'all', which is removed to get the URL.
Assign all archives as attribute of target except for 'test'.
target is by default self.
Details: This method can only be called when the class names and the module
attribute official_archives: OfficialArchive (used in get) are
available. It only creates links to the existing archives.
Assign all archives as attribute of target except for 'test'.
target is by default self.
Details: This method can only be called when the class names and
the module attribute official_archives: OfficialArchive (used in
get) are available. It creates new instances of the archives.
Depending on the implementation of get, it may download the
definition files on its first-ever call by/on any given
user/machine.
update archive definition files from their remote location.
The update is necessary to account for newly added data. This method requires www connectivity with only a few KB of transmitted data.