import tensorflow as tf
import tensorflow.keras as keras

from nodeconfeu_watch.reader import AccelerationReader
from nodeconfeu_watch.visual import plot_history, classification_report
from nodeconfeu_watch.convert import ExportModel

tf.random.set_seed(1)

dataset = AccelerationReader(
    {"james": './data/james-v2'},
    test_ratio=0.2,
    validation_ratio=0.2,
    classnames=['swiperight', 'swipeleft', 'upup', 'waggle', 'clap2'])

model = keras.Sequential()
model.add(
    keras.Input(shape=(50, 1, 3),
                name='acceleration',
                dtype=dataset.train.x.dtype))
model.add(keras.layers.Conv2D(14, (5, 1), padding='valid', activation='relu'))
model.add(keras.layers.Dropout(0.2))
model.add(
    keras.layers.Conv2D(len(dataset.classnames), (5, 1),
                        padding='same',
                        dilation_rate=2,
                        activation='relu'))
model.add(keras.layers.Dropout(0.1))
model.add(keras.layers.MaxPool2D((46, 1)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(len(dataset.classnames), use_bias=False))
import tensorflow as tf
import tensorflow.keras as keras

from nodeconfeu_watch.reader import AccelerationReader

dataset = AccelerationReader(
    {
        "james": ['./data/james-v2'],
        "conor": ['./data/conor-v2']
    },
    test_ratio=0.2,
    validation_ratio=0.2,
    classnames=[
        'swiperight', 'swipeleft', 'upup', 'waggle', 'clap2', 'random'
    ])

dataset.dataframe().to_csv('./exports/dataset.csv', index=False)
import sklearn.metrics
import tensorflow as tf
import tensorflow.keras as keras

from nodeconfeu_watch.reader import AccelerationReader
from nodeconfeu_watch.layer import MaskLastFeature, DirectionFeatures, MaskedConv
from nodeconfeu_watch.visual import plot_history, classification_report

tf.random.set_seed(0)

dataset = AccelerationReader(
    {"gordon": './data/gordon-v1'},
    test_ratio=0,
    validation_ratio=0.25,
    classnames=['nothing', 'clap2', 'upup', 'swiperight', 'swipeleft'],
    input_shape='1d',
    mask_dimention=True)

model = keras.Sequential()
model.add(keras.Input(shape=(50, 4), name='acceleration'))
model.add(MaskLastFeature())
model.add(DirectionFeatures())

model.add(MaskedConv(25, 1, padding='same'))
model.add(keras.layers.Dropout(0.1))

model.add(keras.layers.LayerNormalization(scale=False))
model.add(keras.layers.Activation('relu'))
model.add(MaskedConv(25, 3, padding='same'))
model.add(keras.layers.Dropout(0.1))
import tensorflow as tf
import tensorflow.keras as keras

from nodeconfeu_watch.reader import AccelerationReader
from nodeconfeu_watch.visual import plot_history, classification_report
from nodeconfeu_watch.convert import ExportModel

tf.random.set_seed(1)

dataset = AccelerationReader({
        "james": ['./data/james-v2'],
        "conor": ['./data/conor-v2'],
        "extra": ['./data/extra-v2']
    },
    test_ratio=0.2, validation_ratio=0.2,
    classnames=['swiperight', 'swipeleft', 'swipeup', 'upup', 'waggle', 'clap2', 'random'])

model = keras.Sequential()
model.add(keras.Input(shape=(50, 1, 3), name='acceleration', dtype=dataset.train.x.dtype))
model.add(keras.layers.Conv2D(14, (5, 1), padding='valid', activation='relu'))
model.add(keras.layers.Dropout(0.2))
model.add(keras.layers.Conv2D(len(dataset.classnames), (5, 1), padding='same', dilation_rate=2, activation='relu'))
model.add(keras.layers.Dropout(0.1))
model.add(keras.layers.MaxPool2D((46, 1)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(len(dataset.classnames), use_bias=False))

model.compile(optimizer=keras.optimizers.Adam(),
              loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[keras.metrics.SparseCategoricalAccuracy()])