# Path: sciquence/base.py
# class Processor(six.with_metaclass(ABCMeta, BaseEstimator)):
# 
#     '''
# 
#     Base class for parallel X and y transformations.
#     Cannot be used directly, you can use only the derived classes.
#     This class contains abstract methods
# 
#     '''
# 
#     _estimator_type = "processor"
# 
# 
#     def fit(self, X, y):
#         '''
# 
#         Check data characteristics
# 
#         Parameters
#         ----------
#         X : ndarray, shape (n_samples, n_features)
#             Matrix containing data being a sequence or a time series.
#         y : ndarray, shape (n_samples, )
#             Labels for samples in the matrix X.
# 
#         Returns
#         -------
#         self : object,
#             Return self.
# 
#         '''
#         return self
# 
#     def process(self, X, y):
#         '''
# 
#         Perform parallel transformation of X and y.
# 
#         Parameters
#         ----------
#         X : ndarray, shape (n_samples, n_features)
#             Matrix containing data being a sequence or a time series.
#         y : ndarray, shape (n_samples, )
#             Labels for samples in the matrix X.
# 
#         Returns
#         -------
#         X_new: ndarray, shape (new_n_samples, new_n_features)
#             Tranformed X matrix
#         y_new : ndarray, shape (new_n_samples, )
#             Labels for samples in the matrix the transformed matrix X.
# 
#         '''
#         return X, y
# 
# 
#     def fit_process(self, X, y):
#         '''
# 
#         Check data characteristics and
#         perform parallel transformation of X and y.
# 
#         Parameters
#         ----------
#         X : ndarray, shape (n_samples, n_features)
#             Matrix containing data being a sequence or a time series.
#         y : ndarray, shape (n_samples, )
#             Labels for samples in the matrix X.
# 
#         Returns
#         -------
#         X_new: ndarray, shape (new_n_samples, new_n_features)
#             Tranformed X matrix
#         y_new : ndarray, shape (new_n_samples, )
#             Labels for samples in the matrix the transformed matrix X.
# 
#         '''
# 
#         return self.fit(X, y).process(X, y)


from ..base import Processor
import numpy as np
# Transform
# Author: Krzysztof Joachimiak
#
# License: MIT




# TODO: optimize, tweak processor classes. Consider adding transformer classes.
#  Maybe functions should have arbitrary number of params
# TODO: REFACTOR!!!!

class RNNIput(Processor):

    def __init__(self, window_size, step=1, strategy='central'):
        self.window_size = window_size
        self.step = step
        self.strategy = strategy

    def fit_process(self, X, y):
        return super(RNNIput, self).fit_process(X, y)

    def fit(self, X, y):
        return super(RNNIput, self).fit(X, y)

    def process(self, X, y):
        return super(RNNIput, self).process(X, y)




# Path: sciquence/base.py
# class Processor(six.with_metaclass(ABCMeta, BaseEstimator)):
# 
#     '''
# 
#     Base class for parallel X and y transformations.
#     Cannot be used directly, you can use only the derived classes.
#     This class contains abstract methods
# 
#     '''
# 
#     _estimator_type = "processor"
# 
# 
#     def fit(self, X, y):
#         '''
# 
#         Check data characteristics
# 
#         Parameters
#         ----------
#         X : ndarray, shape (n_samples, n_features)
#             Matrix containing data being a sequence or a time series.
#         y : ndarray, shape (n_samples, )
#             Labels for samples in the matrix X.
# 
#         Returns
#         -------
#         self : object,
#             Return self.
# 
#         '''
#         return self
# 
#     def process(self, X, y):
#         '''
# 
#         Perform parallel transformation of X and y.
# 
#         Parameters
#         ----------
#         X : ndarray, shape (n_samples, n_features)
#             Matrix containing data being a sequence or a time series.
#         y : ndarray, shape (n_samples, )
#             Labels for samples in the matrix X.
# 
#         Returns
#         -------
#         X_new: ndarray, shape (new_n_samples, new_n_features)
#             Tranformed X matrix
#         y_new : ndarray, shape (new_n_samples, )
#             Labels for samples in the matrix the transformed matrix X.
# 
#         '''
#         return X, y
# 
# 
#     def fit_process(self, X, y):
#         '''
# 
#         Check data characteristics and
#         perform parallel transformation of X and y.
# 
#         Parameters
#         ----------
#         X : ndarray, shape (n_samples, n_features)
#             Matrix containing data being a sequence or a time series.
#         y : ndarray, shape (n_samples, )
#             Labels for samples in the matrix X.
# 
#         Returns
#         -------
#         X_new: ndarray, shape (new_n_samples, new_n_features)
#             Tranformed X matrix
#         y_new : ndarray, shape (new_n_samples, )
#             Labels for samples in the matrix the transformed matrix X.
# 
#         '''
# 
#         return self.fit(X, y).process(X, y)


# Path: sciquence/sequences/input.py
from ..base import Processor
import numpy as np

# Transform
# Author: Krzysztof Joachimiak
#
# License: MIT




# TODO: optimize, tweak processor classes. Consider adding transformer classes.
#  Maybe functions should have arbitrary number of params
# TODO: REFACTOR!!!!

class RNNIput(Processor):

    def __init__(self, window_size, step=1, strategy='central'):
        self.window_size = window_size
        self.step = step
        self.strategy = strategy

    def fit_process(self, X, y):
        return super(RNNIput, self).fit_process(X, y)

    def fit(self, X, y):
        return super(RNNIput, self).fit(X, y)

    def process(self, X, y):
        return super(RNNIput, self).process(X, y)




class Seq2SeqInput(Processor):