Changes
* __Physics Informed CAE method__
- reworked PICAE now adheres Sapsan's interface (sapsan/lib/estimators/picae.py)
- added PICAE example with random data
* Data loaders
- loaders are now consistent between pytorch and sklearn
- `train()` takes in loaders, instead of inputs & targets separately. Those can be either `Pytorch.Dataloader` or a list of inputs & targets (i.e `loaders = [x,y]`). This is done to accommodate Pytorch-based and sklearn-based models, which require the input of different formats.
- data can be loaded as a numpy array by calling `load_numpy()`, instead of load
- loaded numpy data can be converted to torch dataloader via `convert_to_torch([x, y])`
- alternatively, both of the steps can be combined by just calling `load()`
- cleaned up data_functions; added new methods: `flatten, split_by_batch, get_loader_shape`
- corrected split into train and valid datasets + enhanced with train_test_split function from sklearn
- added new params to data_loader: `train_fraction, shuffle`
- support for irregular input data shapes
* Examples
- added PICAE example with random data
- cleaned up examples further
* Estimators
- cleaned up CNN3d estimator, deleted legacy functions
- further generalized Pytorch estimator to be used as a backend for any PyTorch-based models
* Templates
- reflect the changes from above - streamlined
* Tests
- added PICAE related tests on push
* Misc
- further improvement to backend handling of data transformations
- minor bug fixes