Source code for easyvvuq.encoders.copy_encoder

"""An encoder meant to simply copy a file to the input directory unchanged.
It is meant to be used in combination with MultiBuilder encoder and possibly
the DirectoryBuilder. It duplicates some functionality of the ApplyFixtures
encoder but can be useful for very simple cases.

Examples
--------
>>> multiencoder = uq.encoders.MultiEncoder(
      DirectoryBuilder(tree={"parent" : {"child1" : None, "child2" : None}}),
      CopyEncoder('/home/user/input1.conf', 'parent/child1/input1.conf')
      CopyEncoder('/home/user/input2.conf', 'parent/child1/input2.conf')
      CopyEncoder('/home/user/input3.conf', 'parent/child2/input3.conf')
      GenericEncoder(delimiter='$', template_fname='/home/user/template.in',
                     target_filename='parent/input.int'))
"""

import os
import shutil


[docs]class CopyEncoder: """An Encoder to copy an input file to a simulation. Parameters ---------- source_filename : str a full path to some file that a simulation needs target_filename : str a target filename inside the simulation directory """ def __init__(self, source_filename, target_filename): self.source_filename = source_filename self.target_filename = target_filename if not os.path.isfile(self.source_filename): raise RuntimeError("Specified source file does not exist:", source_filename)
[docs] def encode(self, params={}, target_dir=''): """Copy a file to target_dir. Parameters ---------- params : dict keep empty, has no effect target_dir : str target directory, full path """ if not os.path.isdir(target_dir): raise RuntimeError("Specified target directory does not exist:", target_dir) shutil.copyfile(self.source_filename, os.path.join(target_dir, self.target_filename))
[docs] def get_restart_dict(self): return {"source_filename": self.source_filename, "target_filename": self.target_filename}
[docs] def element_version(self): return "0.1"