code: def save(self, path, group = None):
          
  
          ext = _os.path.splitext(path)[1]
          if ext == '.npy':
              output = _numpy.vstack((self.sample_times.numpy(), self.numpy())).T
              _numpy.save(path, output)
          elif ext == '.txt':
              if self.kind == 'real':
                  output = _numpy.vstack((self.sample_times.numpy(),
                                          self.numpy())).T
              elif self.kind == 'complex':
                  output = _numpy.vstack((self.sample_times.numpy(),
                                          self.numpy().real,
                                          self.numpy().imag)).T
              _numpy.savetxt(path, output)
          elif ext =='.hdf':
              key = 'data' if group is None else group
              f = h5py.File(path)
              ds = f.create_dataset(key, data=self.numpy(), compression='gzip',
                                    compression_opts=9, shuffle=True)
              ds.attrs['start_time'] = float(self.start_time)
              ds.attrs['delta_t'] = float(self.delta_t)
          else:
              raise ValueError('Path must end with .npy, .txt or .hdf')
docs: Save time series to a Numpy .npy, hdf, or text file. The first column
          contains the sample times, the second contains the values.
          In the case of a complex time series saved as text, the imaginary
          part is written as a third column. When using hdf format, the data is stored
          as a single vector, along with relevant attributes.
  
          Parameters
          ----------
          path: string
              Destination file path. Must end with either .hdf, .npy or .txt.
  
          group: string
              Additional name for internal storage use. Ex. hdf storage uses
              this as the key value.
  
          Raises
          ------
          ValueError
              If path does not end in .npy or .txt.