Writing and reading patterns and values from disk¶
Saving Folded Values with Patterns¶
Flattning makes it easy to save and load structured data to and from disk.
pattern = paragami.PatternDict()
pattern['num'] = paragami.NumericArrayPattern((1, 2))
pattern['mat'] = paragami.PSDSymmetricMatrixPattern(5)
val_folded = pattern.random()
extra = np.random.random(5)
outfile = tempfile.NamedTemporaryFile()
outfile_name = outfile.name
outfile.close()
paragami.save_folded(outfile_name, val_folded, pattern, extra=extra)
val_folded_loaded, pattern_loaded, data = \
paragami.load_folded(outfile_name + '.npz')
# The loaded values match the saved values.
assert pattern == pattern_loaded
assert np.all(val_folded['num'] == val_folded_loaded['num'])
assert np.all(val_folded['mat'] == val_folded_loaded['mat'])
assert np.all(data['extra'] == extra)
-
paragami.pattern_containers.
save_folded
(file, folded_val, pattern, **argk)¶ Save a folded value to a file with its pattern.
Flatten a folded value and save it with its pattern to a file using
numpy.savez
. Additional keyword arguments will also be saved to the file.Parameters: - file: String or file
Follows the conventions of
numpy.savez
. Note that thenpz
extension will be added if it is not present.- folded_val:
The folded value of a parameter.
- pattern:
A
paragami
pattern for the folded value.
-
paragami.pattern_containers.
load_folded
(file)¶ Load a folded value and its pattern from a file together with any additional data.
Note that
pattern
must be registered withregister_pattern_json
to useload_folded
.Parameters: - file: String or file
A file or filename of data saved with
save_folded
.
Returns: - folded_val:
The folded value of the saved parameter.
- pattern:
The
paragami
pattern of the saved parameter.- data:
The data as returned from
np.load
. Additional saved values will exist as keys ofdata
.
Saving patterns¶
You can convert a particular pattern class to and from JSON using the
to_json
and from_json
methods.
>>> pattern = paragami.NumericArrayPattern(shape=(2, 3))
>>>
>>> # ``pattern_json_string`` is a JSON string that can be written to a file.
>>> pattern_json_string = pattern.to_json()
>>>
>>> # ``same_pattern`` is identical to ``pattern``.
>>> same_pattern = paragami.NumericArrayPattern.from_json(pattern_json_string)
However, in order to use from_json
, you need to know which pattern
the JSON string was generated from. In order to decode generic JSON strings,
one can use get_pattern_from_json
.
>>> pattern_json_string = pattern.to_json()
>>> # ``same_pattern`` is identical to ``pattern``.
>>> same_pattern = paragami.get_pattern_from_json(pattern_json_string)
Before a pattern can be used with
get_pattern_from_json
, it needs to be registered with
register_pattern_json
. All the patterns in paragami
are automatically
registered, but if you define your own patterns they will have to
be registered before they can be used with get_pattern_from_json
.
-
paragami.pattern_containers.
get_pattern_from_json
(pattern_json)¶ Return the appropriate pattern from
pattern_json
.The pattern must have been registered using
register_pattern_json
.Parameters: - pattern_json: String
A JSON string as created with a pattern’s
to_json
method.
Returns: - The pattern instance encoded in the ``pattern_json`` string.
-
paragami.pattern_containers.
register_pattern_json
(pattern, allow_overwrite=False)¶ Register a pattern for automatic conversion from JSON.
Parameters: - pattern: A Pattern class
The pattern to register.
- allow_overwrite: Boolean
If true, allow overwriting already-registered patterns.
Examples
>>> class MyCustomPattern(paragami.Pattern): >>> ... definitions ... >>> >>> paragami.register_pattern_json(paragmi.MyCustomPattern) >>> >>> my_pattern = MyCustomPattern(...) >>> my_pattern_json = my_pattern.to_json() >>> >>> # ``my_pattern_from_json`` should be identical to ``my_pattern``. >>> my_pattern_from_json = paragami.get_pattern_from_json(my_pattern_json)