<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def Save_Generic(obj, SaveName=None, Path='./', Mode='npz', compressed=False, Print=True):
 """ Save a ToFu object under file name SaveName, in folder Path ToFu provides built-in saving and loading functions for ToFu objects. There is now only one saving mode: - 'npz': saves a dict of key attributes using :meth:`numpy.savez` Good practices are: - save :class:`~tofu.geom.Ves` and :class:`~tofu.geom.Struct` - intermediate optics (:class:`~tofu.geom.Apert` and :class:`~tofu.geom.Lens`) generally do not need to be saved Indeed, they will be autoamtically included in larger objects like Detect or Cam objects Parameters SaveName : str The file name, if None (recommended) uses obj.Id.SaveName Path : str Path where to save the file Mode : str Flag specifying the saving mode - 'npz': Only mode currently available ('pck' deprecated) compressed : bool Indicate whether to use np.savez_compressed (slower but smaller files) """

    assert type(obj.__class__) is type
    if SaveName is not None:
        C = type(SaveName) is str and not (SaveName[-4]=='.')
        assert C, "SaveName should not include the extension !"
    assert Path is None or type(Path) is str
    assert Mode in ['npz']
    assert type(compressed) is bool
    assert type(Print) is bool
    if Path is None:
        Path = obj.Id.SavePath
    else:
        obj._Id._SavePath = Path
    if Mode=='npz':
        Ext = '.npz'
    if SaveName is None:
        SaveName = obj.Id.SaveName
    else:
        obj._Id.set_SaveName(SaveName)
    pathfileext = os.path.join(Path,SaveName+Ext)
    if Ext=='.npz':
        _save_np(obj, pathfileext, compressed=compressed)
    if Print:
        print("Saved in :  "+pathfileext)