diff --git a/.artifacts/archive/nn/neural/Cargo.toml b/.artifacts/archive/neural/Cargo.toml similarity index 100% rename from .artifacts/archive/nn/neural/Cargo.toml rename to .artifacts/archive/neural/Cargo.toml diff --git a/.artifacts/archive/nn/neural/src/errors/error.rs b/.artifacts/archive/neural/src/errors/error.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/errors/error.rs rename to .artifacts/archive/neural/src/errors/error.rs diff --git a/.artifacts/archive/nn/neural/src/errors/mod.rs b/.artifacts/archive/neural/src/errors/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/errors/mod.rs rename to .artifacts/archive/neural/src/errors/mod.rs diff --git a/.artifacts/archive/nn/neural/src/exp/layers/config.rs b/.artifacts/archive/neural/src/exp/layers/config.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/layers/config.rs rename to .artifacts/archive/neural/src/exp/layers/config.rs diff --git a/.artifacts/archive/nn/neural/src/exp/layers/mod.rs b/.artifacts/archive/neural/src/exp/layers/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/layers/mod.rs rename to .artifacts/archive/neural/src/exp/layers/mod.rs diff --git a/.artifacts/archive/nn/neural/src/exp/layers/sublayer.rs b/.artifacts/archive/neural/src/exp/layers/sublayer.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/layers/sublayer.rs rename to .artifacts/archive/neural/src/exp/layers/sublayer.rs diff --git a/.artifacts/archive/nn/neural/src/exp/layers/wrapper.rs b/.artifacts/archive/neural/src/exp/layers/wrapper.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/layers/wrapper.rs rename to .artifacts/archive/neural/src/exp/layers/wrapper.rs diff --git a/.artifacts/archive/nn/neural/src/exp/mod.rs b/.artifacts/archive/neural/src/exp/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/mod.rs rename to .artifacts/archive/neural/src/exp/mod.rs diff --git a/.artifacts/archive/nn/neural/src/exp/models/mod.rs b/.artifacts/archive/neural/src/exp/models/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/models/mod.rs rename to .artifacts/archive/neural/src/exp/models/mod.rs diff --git a/.artifacts/archive/nn/neural/src/exp/models/modules.rs b/.artifacts/archive/neural/src/exp/models/modules.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/models/modules.rs rename to .artifacts/archive/neural/src/exp/models/modules.rs diff --git a/.artifacts/archive/nn/neural/src/exp/models/store.rs b/.artifacts/archive/neural/src/exp/models/store.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/exp/models/store.rs rename to .artifacts/archive/neural/src/exp/models/store.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/activator.rs b/.artifacts/archive/neural/src/func/activate/activator.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/activator.rs rename to .artifacts/archive/neural/src/func/activate/activator.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/binary.rs b/.artifacts/archive/neural/src/func/activate/binary.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/binary.rs rename to .artifacts/archive/neural/src/func/activate/binary.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/linear.rs b/.artifacts/archive/neural/src/func/activate/linear.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/linear.rs rename to .artifacts/archive/neural/src/func/activate/linear.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/mod.rs b/.artifacts/archive/neural/src/func/activate/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/mod.rs rename to .artifacts/archive/neural/src/func/activate/mod.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/nl/mod.rs b/.artifacts/archive/neural/src/func/activate/nl/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/nl/mod.rs rename to .artifacts/archive/neural/src/func/activate/nl/mod.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/nl/relu.rs b/.artifacts/archive/neural/src/func/activate/nl/relu.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/nl/relu.rs rename to .artifacts/archive/neural/src/func/activate/nl/relu.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/nl/sigmoid.rs b/.artifacts/archive/neural/src/func/activate/nl/sigmoid.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/nl/sigmoid.rs rename to .artifacts/archive/neural/src/func/activate/nl/sigmoid.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/nl/softmax.rs b/.artifacts/archive/neural/src/func/activate/nl/softmax.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/nl/softmax.rs rename to .artifacts/archive/neural/src/func/activate/nl/softmax.rs diff --git a/.artifacts/archive/nn/neural/src/func/activate/nl/tanh.rs b/.artifacts/archive/neural/src/func/activate/nl/tanh.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/activate/nl/tanh.rs rename to .artifacts/archive/neural/src/func/activate/nl/tanh.rs diff --git a/.artifacts/archive/nn/neural/src/func/loss/kinds.rs b/.artifacts/archive/neural/src/func/loss/kinds.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/loss/kinds.rs rename to .artifacts/archive/neural/src/func/loss/kinds.rs diff --git a/.artifacts/archive/nn/neural/src/func/loss/mod.rs b/.artifacts/archive/neural/src/func/loss/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/loss/mod.rs rename to .artifacts/archive/neural/src/func/loss/mod.rs diff --git a/.artifacts/archive/nn/neural/src/func/loss/reg/huber.rs b/.artifacts/archive/neural/src/func/loss/reg/huber.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/loss/reg/huber.rs rename to .artifacts/archive/neural/src/func/loss/reg/huber.rs diff --git a/.artifacts/archive/nn/neural/src/func/loss/reg/mae.rs b/.artifacts/archive/neural/src/func/loss/reg/mae.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/loss/reg/mae.rs rename to .artifacts/archive/neural/src/func/loss/reg/mae.rs diff --git a/.artifacts/archive/nn/neural/src/func/loss/reg/mod.rs b/.artifacts/archive/neural/src/func/loss/reg/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/loss/reg/mod.rs rename to .artifacts/archive/neural/src/func/loss/reg/mod.rs diff --git a/.artifacts/archive/nn/neural/src/func/loss/reg/mse.rs b/.artifacts/archive/neural/src/func/loss/reg/mse.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/loss/reg/mse.rs rename to .artifacts/archive/neural/src/func/loss/reg/mse.rs diff --git a/.artifacts/archive/nn/neural/src/func/mod.rs b/.artifacts/archive/neural/src/func/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/mod.rs rename to .artifacts/archive/neural/src/func/mod.rs diff --git a/.artifacts/archive/nn/neural/src/func/rms.rs b/.artifacts/archive/neural/src/func/rms.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/func/rms.rs rename to .artifacts/archive/neural/src/func/rms.rs diff --git a/.artifacts/archive/nn/neural/src/layers/cmp/features.rs b/.artifacts/archive/neural/src/layers/cmp/features.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/cmp/features.rs rename to .artifacts/archive/neural/src/layers/cmp/features.rs diff --git a/.artifacts/archive/nn/neural/src/layers/cmp/kinds.rs b/.artifacts/archive/neural/src/layers/cmp/kinds.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/cmp/kinds.rs rename to .artifacts/archive/neural/src/layers/cmp/kinds.rs diff --git a/.artifacts/archive/nn/neural/src/layers/cmp/mod.rs b/.artifacts/archive/neural/src/layers/cmp/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/cmp/mod.rs rename to .artifacts/archive/neural/src/layers/cmp/mod.rs diff --git a/.artifacts/archive/nn/neural/src/layers/layer.rs b/.artifacts/archive/neural/src/layers/layer.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/layer.rs rename to .artifacts/archive/neural/src/layers/layer.rs diff --git a/.artifacts/archive/nn/neural/src/layers/mod.rs b/.artifacts/archive/neural/src/layers/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/mod.rs rename to .artifacts/archive/neural/src/layers/mod.rs diff --git a/.artifacts/archive/nn/neural/src/layers/params.rs b/.artifacts/archive/neural/src/layers/params.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/params.rs rename to .artifacts/archive/neural/src/layers/params.rs diff --git a/.artifacts/archive/nn/neural/src/layers/seq/mod.rs b/.artifacts/archive/neural/src/layers/seq/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/seq/mod.rs rename to .artifacts/archive/neural/src/layers/seq/mod.rs diff --git a/.artifacts/archive/nn/neural/src/layers/seq/sequential.rs b/.artifacts/archive/neural/src/layers/seq/sequential.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/layers/seq/sequential.rs rename to .artifacts/archive/neural/src/layers/seq/sequential.rs diff --git a/.artifacts/archive/nn/neural/src/lib.rs b/.artifacts/archive/neural/src/lib.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/lib.rs rename to .artifacts/archive/neural/src/lib.rs diff --git a/.artifacts/archive/nn/neural/src/models/config.rs b/.artifacts/archive/neural/src/models/config.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/models/config.rs rename to .artifacts/archive/neural/src/models/config.rs diff --git a/.artifacts/archive/nn/neural/src/models/mod.rs b/.artifacts/archive/neural/src/models/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/models/mod.rs rename to .artifacts/archive/neural/src/models/mod.rs diff --git a/.artifacts/archive/nn/neural/src/models/model.rs b/.artifacts/archive/neural/src/models/model.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/models/model.rs rename to .artifacts/archive/neural/src/models/model.rs diff --git a/.artifacts/archive/nn/neural/src/models/modes.rs b/.artifacts/archive/neural/src/models/modes.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/models/modes.rs rename to .artifacts/archive/neural/src/models/modes.rs diff --git a/.artifacts/archive/nn/neural/src/models/params.rs b/.artifacts/archive/neural/src/models/params.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/models/params.rs rename to .artifacts/archive/neural/src/models/params.rs diff --git a/.artifacts/archive/nn/neural/src/neurons/mod.rs b/.artifacts/archive/neural/src/neurons/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/neurons/mod.rs rename to .artifacts/archive/neural/src/neurons/mod.rs diff --git a/.artifacts/archive/nn/neural/src/neurons/node.rs b/.artifacts/archive/neural/src/neurons/node.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/neurons/node.rs rename to .artifacts/archive/neural/src/neurons/node.rs diff --git a/.artifacts/archive/nn/neural/src/neurons/perceptron.rs b/.artifacts/archive/neural/src/neurons/perceptron.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/neurons/perceptron.rs rename to .artifacts/archive/neural/src/neurons/perceptron.rs diff --git a/.artifacts/archive/nn/neural/src/neurons/synapse.rs b/.artifacts/archive/neural/src/neurons/synapse.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/neurons/synapse.rs rename to .artifacts/archive/neural/src/neurons/synapse.rs diff --git a/.artifacts/archive/nn/neural/src/nn/gnn/mod.rs b/.artifacts/archive/neural/src/nn/gnn/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/nn/gnn/mod.rs rename to .artifacts/archive/neural/src/nn/gnn/mod.rs diff --git a/.artifacts/archive/nn/neural/src/nn/gnn/model.rs b/.artifacts/archive/neural/src/nn/gnn/model.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/nn/gnn/model.rs rename to .artifacts/archive/neural/src/nn/gnn/model.rs diff --git a/.artifacts/archive/nn/neural/src/nn/gnn/tasks.rs b/.artifacts/archive/neural/src/nn/gnn/tasks.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/nn/gnn/tasks.rs rename to .artifacts/archive/neural/src/nn/gnn/tasks.rs diff --git a/.artifacts/archive/nn/neural/src/nn/kinds.rs b/.artifacts/archive/neural/src/nn/kinds.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/nn/kinds.rs rename to .artifacts/archive/neural/src/nn/kinds.rs diff --git a/.artifacts/archive/nn/neural/src/nn/mod.rs b/.artifacts/archive/neural/src/nn/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/nn/mod.rs rename to .artifacts/archive/neural/src/nn/mod.rs diff --git a/.artifacts/archive/nn/neural/src/nn/position.rs b/.artifacts/archive/neural/src/nn/position.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/nn/position.rs rename to .artifacts/archive/neural/src/nn/position.rs diff --git a/.artifacts/archive/nn/neural/src/ops/compile.rs b/.artifacts/archive/neural/src/ops/compile.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/ops/compile.rs rename to .artifacts/archive/neural/src/ops/compile.rs diff --git a/.artifacts/archive/nn/neural/src/ops/dropout.rs b/.artifacts/archive/neural/src/ops/dropout.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/ops/dropout.rs rename to .artifacts/archive/neural/src/ops/dropout.rs diff --git a/.artifacts/archive/nn/neural/src/ops/mod.rs b/.artifacts/archive/neural/src/ops/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/ops/mod.rs rename to .artifacts/archive/neural/src/ops/mod.rs diff --git a/.artifacts/archive/nn/neural/src/ops/norm.rs b/.artifacts/archive/neural/src/ops/norm.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/ops/norm.rs rename to .artifacts/archive/neural/src/ops/norm.rs diff --git a/.artifacts/archive/nn/neural/src/ops/predict.rs b/.artifacts/archive/neural/src/ops/predict.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/ops/predict.rs rename to .artifacts/archive/neural/src/ops/predict.rs diff --git a/.artifacts/archive/nn/neural/src/ops/train.rs b/.artifacts/archive/neural/src/ops/train.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/ops/train.rs rename to .artifacts/archive/neural/src/ops/train.rs diff --git a/.artifacts/archive/nn/neural/src/params/iter.rs b/.artifacts/archive/neural/src/params/iter.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/iter.rs rename to .artifacts/archive/neural/src/params/iter.rs diff --git a/.artifacts/archive/nn/neural/src/params/kinds.rs b/.artifacts/archive/neural/src/params/kinds.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/kinds.rs rename to .artifacts/archive/neural/src/params/kinds.rs diff --git a/.artifacts/archive/nn/neural/src/params/masks/mask.rs b/.artifacts/archive/neural/src/params/masks/mask.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/masks/mask.rs rename to .artifacts/archive/neural/src/params/masks/mask.rs diff --git a/.artifacts/archive/nn/neural/src/params/masks/mod.rs b/.artifacts/archive/neural/src/params/masks/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/masks/mod.rs rename to .artifacts/archive/neural/src/params/masks/mod.rs diff --git a/.artifacts/archive/nn/neural/src/params/mod.rs b/.artifacts/archive/neural/src/params/mod.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/mod.rs rename to .artifacts/archive/neural/src/params/mod.rs diff --git a/.artifacts/archive/nn/neural/src/params/param.rs b/.artifacts/archive/neural/src/params/param.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/param.rs rename to .artifacts/archive/neural/src/params/param.rs diff --git a/.artifacts/archive/nn/neural/src/params/store.rs b/.artifacts/archive/neural/src/params/store.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/store.rs rename to .artifacts/archive/neural/src/params/store.rs diff --git a/.artifacts/archive/nn/neural/src/params/store/group.rs b/.artifacts/archive/neural/src/params/store/group.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/store/group.rs rename to .artifacts/archive/neural/src/params/store/group.rs diff --git a/.artifacts/archive/nn/neural/src/params/variable.rs b/.artifacts/archive/neural/src/params/variable.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/params/variable.rs rename to .artifacts/archive/neural/src/params/variable.rs diff --git a/.artifacts/archive/nn/neural/src/primitives.rs b/.artifacts/archive/neural/src/primitives.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/primitives.rs rename to .artifacts/archive/neural/src/primitives.rs diff --git a/.artifacts/archive/nn/neural/src/specs.rs b/.artifacts/archive/neural/src/specs.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/specs.rs rename to .artifacts/archive/neural/src/specs.rs diff --git a/.artifacts/archive/nn/neural/src/utils.rs b/.artifacts/archive/neural/src/utils.rs similarity index 100% rename from .artifacts/archive/nn/neural/src/utils.rs rename to .artifacts/archive/neural/src/utils.rs diff --git a/.artifacts/archive/nn/neural/tests/default.rs b/.artifacts/archive/neural/tests/default.rs similarity index 100% rename from .artifacts/archive/nn/neural/tests/default.rs rename to .artifacts/archive/neural/tests/default.rs diff --git a/.artifacts/archive/nn/nlp/Cargo.toml b/.artifacts/archive/nlp/Cargo.toml similarity index 100% rename from .artifacts/archive/nn/nlp/Cargo.toml rename to .artifacts/archive/nlp/Cargo.toml diff --git a/.artifacts/archive/nn/nlp/src/embed/context/mod.rs b/.artifacts/archive/nlp/src/embed/context/mod.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/embed/context/mod.rs rename to .artifacts/archive/nlp/src/embed/context/mod.rs diff --git a/.artifacts/archive/nn/nlp/src/embed/embedding.rs b/.artifacts/archive/nlp/src/embed/embedding.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/embed/embedding.rs rename to .artifacts/archive/nlp/src/embed/embedding.rs diff --git a/.artifacts/archive/nn/nlp/src/embed/mod.rs b/.artifacts/archive/nlp/src/embed/mod.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/embed/mod.rs rename to .artifacts/archive/nlp/src/embed/mod.rs diff --git a/.artifacts/archive/nn/nlp/src/embed/words/mod.rs b/.artifacts/archive/nlp/src/embed/words/mod.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/embed/words/mod.rs rename to .artifacts/archive/nlp/src/embed/words/mod.rs diff --git a/.artifacts/archive/nn/nlp/src/embed/words/word2vec.rs b/.artifacts/archive/nlp/src/embed/words/word2vec.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/embed/words/word2vec.rs rename to .artifacts/archive/nlp/src/embed/words/word2vec.rs diff --git a/.artifacts/archive/nn/nlp/src/encode/mod.rs b/.artifacts/archive/nlp/src/encode/mod.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/encode/mod.rs rename to .artifacts/archive/nlp/src/encode/mod.rs diff --git a/.artifacts/archive/nn/nlp/src/encode/positional.rs b/.artifacts/archive/nlp/src/encode/positional.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/encode/positional.rs rename to .artifacts/archive/nlp/src/encode/positional.rs diff --git a/.artifacts/archive/nn/nlp/src/lib.rs b/.artifacts/archive/nlp/src/lib.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/lib.rs rename to .artifacts/archive/nlp/src/lib.rs diff --git a/.artifacts/archive/nn/nlp/src/primitives.rs b/.artifacts/archive/nlp/src/primitives.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/primitives.rs rename to .artifacts/archive/nlp/src/primitives.rs diff --git a/.artifacts/archive/nn/nlp/src/specs.rs b/.artifacts/archive/nlp/src/specs.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/specs.rs rename to .artifacts/archive/nlp/src/specs.rs diff --git a/.artifacts/archive/nn/nlp/src/utils.rs b/.artifacts/archive/nlp/src/utils.rs similarity index 100% rename from .artifacts/archive/nn/nlp/src/utils.rs rename to .artifacts/archive/nlp/src/utils.rs diff --git a/.artifacts/archive/nn/nlp/tests/default.rs b/.artifacts/archive/nlp/tests/default.rs similarity index 100% rename from .artifacts/archive/nn/nlp/tests/default.rs rename to .artifacts/archive/nlp/tests/default.rs diff --git a/.artifacts/archive/nn/Cargo.toml b/.artifacts/archive/nn/Cargo.toml index 5034285b..f6daa451 100644 --- a/.artifacts/archive/nn/Cargo.toml +++ b/.artifacts/archive/nn/Cargo.toml @@ -100,17 +100,17 @@ test = false [build-dependencies] [dependencies] -concision-neural = { path = "./neural", version = "0.1.12" } -concision-nlp = { optional = true, path = "./nlp", version = "0.1.12" } -concision-optim = { optional = true, path = "./optim", version = "0.1.12" } -concision-s4 = { optional = true, path = "./s4", version = "0.1.12" } -transformers = { optional = true, path = "./transformers", version = "0.1.12" } +concision-neural = { path = "../neural", version = "0.1.12" } +concision-nlp = { optional = true, path = "../nlp", version = "0.1.12" } +concision-optim = { optional = true, path = "../optim", version = "0.1.12" } +concision-s4 = { optional = true, path = "../s4", version = "0.1.12" } +transformers = { optional = true, path = "../transformers", version = "0.1.12" } [dev-dependencies] anyhow = "1" approx = "0.5" -concision = { path = "../../concision" } +concision = { path = "../../../concision" } ndarray = { features = ["approx-0_5", "serde-1"], version = "0.15" } [package.metadata.docs.rs] diff --git a/.artifacts/archive/nn/optim/Cargo.toml b/.artifacts/archive/optim/Cargo.toml similarity index 100% rename from .artifacts/archive/nn/optim/Cargo.toml rename to .artifacts/archive/optim/Cargo.toml diff --git a/.artifacts/archive/nn/optim/examples/norm.rs b/.artifacts/archive/optim/examples/norm.rs similarity index 100% rename from .artifacts/archive/nn/optim/examples/norm.rs rename to .artifacts/archive/optim/examples/norm.rs diff --git a/.artifacts/archive/nn/optim/examples/sgd.rs b/.artifacts/archive/optim/examples/sgd.rs similarity index 100% rename from .artifacts/archive/nn/optim/examples/sgd.rs rename to .artifacts/archive/optim/examples/sgd.rs diff --git a/.artifacts/archive/nn/optim/src/grad/adam.rs b/.artifacts/archive/optim/src/grad/adam.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/grad/adam.rs rename to .artifacts/archive/optim/src/grad/adam.rs diff --git a/.artifacts/archive/nn/optim/src/grad/descent.rs b/.artifacts/archive/optim/src/grad/descent.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/grad/descent.rs rename to .artifacts/archive/optim/src/grad/descent.rs diff --git a/.artifacts/archive/nn/optim/src/grad/gradient.rs b/.artifacts/archive/optim/src/grad/gradient.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/grad/gradient.rs rename to .artifacts/archive/optim/src/grad/gradient.rs diff --git a/.artifacts/archive/nn/optim/src/grad/mod.rs b/.artifacts/archive/optim/src/grad/mod.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/grad/mod.rs rename to .artifacts/archive/optim/src/grad/mod.rs diff --git a/.artifacts/archive/nn/optim/src/grad/modes.rs b/.artifacts/archive/optim/src/grad/modes.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/grad/modes.rs rename to .artifacts/archive/optim/src/grad/modes.rs diff --git a/.artifacts/archive/nn/optim/src/grad/sgd.rs b/.artifacts/archive/optim/src/grad/sgd.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/grad/sgd.rs rename to .artifacts/archive/optim/src/grad/sgd.rs diff --git a/.artifacts/archive/nn/optim/src/lib.rs b/.artifacts/archive/optim/src/lib.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/lib.rs rename to .artifacts/archive/optim/src/lib.rs diff --git a/.artifacts/archive/nn/optim/src/norm/kinds.rs b/.artifacts/archive/optim/src/norm/kinds.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/norm/kinds.rs rename to .artifacts/archive/optim/src/norm/kinds.rs diff --git a/.artifacts/archive/nn/optim/src/norm/mod.rs b/.artifacts/archive/optim/src/norm/mod.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/norm/mod.rs rename to .artifacts/archive/optim/src/norm/mod.rs diff --git a/.artifacts/archive/nn/optim/src/norm/normalizer.rs b/.artifacts/archive/optim/src/norm/normalizer.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/norm/normalizer.rs rename to .artifacts/archive/optim/src/norm/normalizer.rs diff --git a/.artifacts/archive/nn/optim/src/optimizer.rs b/.artifacts/archive/optim/src/optimizer.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/optimizer.rs rename to .artifacts/archive/optim/src/optimizer.rs diff --git a/.artifacts/archive/nn/optim/src/params/mod.rs b/.artifacts/archive/optim/src/params/mod.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/params/mod.rs rename to .artifacts/archive/optim/src/params/mod.rs diff --git a/.artifacts/archive/nn/optim/src/primitives.rs b/.artifacts/archive/optim/src/primitives.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/primitives.rs rename to .artifacts/archive/optim/src/primitives.rs diff --git a/.artifacts/archive/nn/optim/src/specs.rs b/.artifacts/archive/optim/src/specs.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/specs.rs rename to .artifacts/archive/optim/src/specs.rs diff --git a/.artifacts/archive/nn/optim/src/utils.rs b/.artifacts/archive/optim/src/utils.rs similarity index 100% rename from .artifacts/archive/nn/optim/src/utils.rs rename to .artifacts/archive/optim/src/utils.rs diff --git a/.artifacts/archive/nn/optim/tests/default.rs b/.artifacts/archive/optim/tests/default.rs similarity index 100% rename from .artifacts/archive/nn/optim/tests/default.rs rename to .artifacts/archive/optim/tests/default.rs diff --git a/.artifacts/archive/nn/s4/Cargo.toml b/.artifacts/archive/s4/Cargo.toml similarity index 100% rename from .artifacts/archive/nn/s4/Cargo.toml rename to .artifacts/archive/s4/Cargo.toml diff --git a/.artifacts/archive/nn/s4/examples/s4.rs b/.artifacts/archive/s4/examples/s4.rs similarity index 100% rename from .artifacts/archive/nn/s4/examples/s4.rs rename to .artifacts/archive/s4/examples/s4.rs diff --git a/.artifacts/archive/nn/s4/examples/ssm.rs b/.artifacts/archive/s4/examples/ssm.rs similarity index 100% rename from .artifacts/archive/nn/s4/examples/ssm.rs rename to .artifacts/archive/s4/examples/ssm.rs diff --git a/.artifacts/archive/nn/s4/src/cmp/cache.rs b/.artifacts/archive/s4/src/cmp/cache.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/cmp/cache.rs rename to .artifacts/archive/s4/src/cmp/cache.rs diff --git a/.artifacts/archive/nn/s4/src/cmp/kernel.rs b/.artifacts/archive/s4/src/cmp/kernel.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/cmp/kernel.rs rename to .artifacts/archive/s4/src/cmp/kernel.rs diff --git a/.artifacts/archive/nn/s4/src/cmp/mod.rs b/.artifacts/archive/s4/src/cmp/mod.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/cmp/mod.rs rename to .artifacts/archive/s4/src/cmp/mod.rs diff --git a/.artifacts/archive/nn/s4/src/hippo/dplr.rs b/.artifacts/archive/s4/src/hippo/dplr.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/hippo/dplr.rs rename to .artifacts/archive/s4/src/hippo/dplr.rs diff --git a/.artifacts/archive/nn/s4/src/hippo/hippo.rs b/.artifacts/archive/s4/src/hippo/hippo.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/hippo/hippo.rs rename to .artifacts/archive/s4/src/hippo/hippo.rs diff --git a/.artifacts/archive/nn/s4/src/hippo/kinds.rs b/.artifacts/archive/s4/src/hippo/kinds.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/hippo/kinds.rs rename to .artifacts/archive/s4/src/hippo/kinds.rs diff --git a/.artifacts/archive/nn/s4/src/hippo/mod.rs b/.artifacts/archive/s4/src/hippo/mod.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/hippo/mod.rs rename to .artifacts/archive/s4/src/hippo/mod.rs diff --git a/.artifacts/archive/nn/s4/src/hippo/nplr.rs b/.artifacts/archive/s4/src/hippo/nplr.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/hippo/nplr.rs rename to .artifacts/archive/s4/src/hippo/nplr.rs diff --git a/.artifacts/archive/nn/s4/src/lib.rs b/.artifacts/archive/s4/src/lib.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/lib.rs rename to .artifacts/archive/s4/src/lib.rs diff --git a/.artifacts/archive/nn/s4/src/model/config.rs b/.artifacts/archive/s4/src/model/config.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/model/config.rs rename to .artifacts/archive/s4/src/model/config.rs diff --git a/.artifacts/archive/nn/s4/src/model/mod.rs b/.artifacts/archive/s4/src/model/mod.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/model/mod.rs rename to .artifacts/archive/s4/src/model/mod.rs diff --git a/.artifacts/archive/nn/s4/src/model/module.rs b/.artifacts/archive/s4/src/model/module.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/model/module.rs rename to .artifacts/archive/s4/src/model/module.rs diff --git a/.artifacts/archive/nn/s4/src/model/params.rs b/.artifacts/archive/s4/src/model/params.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/model/params.rs rename to .artifacts/archive/s4/src/model/params.rs diff --git a/.artifacts/archive/nn/s4/src/ops/convolve.rs b/.artifacts/archive/s4/src/ops/convolve.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ops/convolve.rs rename to .artifacts/archive/s4/src/ops/convolve.rs diff --git a/.artifacts/archive/nn/s4/src/ops/discretize.rs b/.artifacts/archive/s4/src/ops/discretize.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ops/discretize.rs rename to .artifacts/archive/s4/src/ops/discretize.rs diff --git a/.artifacts/archive/nn/s4/src/ops/gen.rs b/.artifacts/archive/s4/src/ops/gen.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ops/gen.rs rename to .artifacts/archive/s4/src/ops/gen.rs diff --git a/.artifacts/archive/nn/s4/src/ops/mod.rs b/.artifacts/archive/s4/src/ops/mod.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ops/mod.rs rename to .artifacts/archive/s4/src/ops/mod.rs diff --git a/.artifacts/archive/nn/s4/src/ops/scan.rs b/.artifacts/archive/s4/src/ops/scan.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ops/scan.rs rename to .artifacts/archive/s4/src/ops/scan.rs diff --git a/.artifacts/archive/nn/s4/src/params/dplr.rs b/.artifacts/archive/s4/src/params/dplr.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/params/dplr.rs rename to .artifacts/archive/s4/src/params/dplr.rs diff --git a/.artifacts/archive/nn/s4/src/params/kinds.rs b/.artifacts/archive/s4/src/params/kinds.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/params/kinds.rs rename to .artifacts/archive/s4/src/params/kinds.rs diff --git a/.artifacts/archive/nn/s4/src/params/mod.rs b/.artifacts/archive/s4/src/params/mod.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/params/mod.rs rename to .artifacts/archive/s4/src/params/mod.rs diff --git a/.artifacts/archive/nn/s4/src/params/store.rs b/.artifacts/archive/s4/src/params/store.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/params/store.rs rename to .artifacts/archive/s4/src/params/store.rs diff --git a/.artifacts/archive/nn/s4/src/primitives.rs b/.artifacts/archive/s4/src/primitives.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/primitives.rs rename to .artifacts/archive/s4/src/primitives.rs diff --git a/.artifacts/archive/nn/s4/src/specs.rs b/.artifacts/archive/s4/src/specs.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/specs.rs rename to .artifacts/archive/s4/src/specs.rs diff --git a/.artifacts/archive/nn/s4/src/ssm/config.rs b/.artifacts/archive/s4/src/ssm/config.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ssm/config.rs rename to .artifacts/archive/s4/src/ssm/config.rs diff --git a/.artifacts/archive/nn/s4/src/ssm/mod.rs b/.artifacts/archive/s4/src/ssm/mod.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ssm/mod.rs rename to .artifacts/archive/s4/src/ssm/mod.rs diff --git a/.artifacts/archive/nn/s4/src/ssm/model.rs b/.artifacts/archive/s4/src/ssm/model.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/ssm/model.rs rename to .artifacts/archive/s4/src/ssm/model.rs diff --git a/.artifacts/archive/nn/s4/src/utils.rs b/.artifacts/archive/s4/src/utils.rs similarity index 100% rename from .artifacts/archive/nn/s4/src/utils.rs rename to .artifacts/archive/s4/src/utils.rs diff --git a/.artifacts/archive/nn/s4/tests/blas.rs b/.artifacts/archive/s4/tests/blas.rs similarity index 100% rename from .artifacts/archive/nn/s4/tests/blas.rs rename to .artifacts/archive/s4/tests/blas.rs diff --git a/.artifacts/archive/nn/s4/tests/conversion.rs b/.artifacts/archive/s4/tests/conversion.rs similarity index 100% rename from .artifacts/archive/nn/s4/tests/conversion.rs rename to .artifacts/archive/s4/tests/conversion.rs diff --git a/.artifacts/archive/nn/s4/tests/default.rs b/.artifacts/archive/s4/tests/default.rs similarity index 100% rename from .artifacts/archive/nn/s4/tests/default.rs rename to .artifacts/archive/s4/tests/default.rs diff --git a/.artifacts/archive/nn/s4/tests/dplr.rs b/.artifacts/archive/s4/tests/dplr.rs similarity index 100% rename from .artifacts/archive/nn/s4/tests/dplr.rs rename to .artifacts/archive/s4/tests/dplr.rs diff --git a/.artifacts/archive/nn/transformers/Cargo.toml b/.artifacts/archive/transformers/Cargo.toml similarity index 100% rename from .artifacts/archive/nn/transformers/Cargo.toml rename to .artifacts/archive/transformers/Cargo.toml diff --git a/.artifacts/archive/nn/transformers/src/attention/head.rs b/.artifacts/archive/transformers/src/attention/head.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/head.rs rename to .artifacts/archive/transformers/src/attention/head.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/mod.rs b/.artifacts/archive/transformers/src/attention/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/mod.rs rename to .artifacts/archive/transformers/src/attention/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/multi/attention.rs b/.artifacts/archive/transformers/src/attention/multi/attention.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/multi/attention.rs rename to .artifacts/archive/transformers/src/attention/multi/attention.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/multi/mod.rs b/.artifacts/archive/transformers/src/attention/multi/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/multi/mod.rs rename to .artifacts/archive/transformers/src/attention/multi/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/multi/params.rs b/.artifacts/archive/transformers/src/attention/multi/params.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/multi/params.rs rename to .artifacts/archive/transformers/src/attention/multi/params.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/params/dim.rs b/.artifacts/archive/transformers/src/attention/params/dim.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/params/dim.rs rename to .artifacts/archive/transformers/src/attention/params/dim.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/params/hyperparams.rs b/.artifacts/archive/transformers/src/attention/params/hyperparams.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/params/hyperparams.rs rename to .artifacts/archive/transformers/src/attention/params/hyperparams.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/params/mod.rs b/.artifacts/archive/transformers/src/attention/params/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/params/mod.rs rename to .artifacts/archive/transformers/src/attention/params/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/params/qkv.rs b/.artifacts/archive/transformers/src/attention/params/qkv.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/params/qkv.rs rename to .artifacts/archive/transformers/src/attention/params/qkv.rs diff --git a/.artifacts/archive/nn/transformers/src/attention/weights.rs b/.artifacts/archive/transformers/src/attention/weights.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/attention/weights.rs rename to .artifacts/archive/transformers/src/attention/weights.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/decode/decoder.rs b/.artifacts/archive/transformers/src/codec/decode/decoder.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/decode/decoder.rs rename to .artifacts/archive/transformers/src/codec/decode/decoder.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/decode/mod.rs b/.artifacts/archive/transformers/src/codec/decode/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/decode/mod.rs rename to .artifacts/archive/transformers/src/codec/decode/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/decode/params.rs b/.artifacts/archive/transformers/src/codec/decode/params.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/decode/params.rs rename to .artifacts/archive/transformers/src/codec/decode/params.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/encode/encoder.rs b/.artifacts/archive/transformers/src/codec/encode/encoder.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/encode/encoder.rs rename to .artifacts/archive/transformers/src/codec/encode/encoder.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/encode/mod.rs b/.artifacts/archive/transformers/src/codec/encode/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/encode/mod.rs rename to .artifacts/archive/transformers/src/codec/encode/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/encode/params.rs b/.artifacts/archive/transformers/src/codec/encode/params.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/encode/params.rs rename to .artifacts/archive/transformers/src/codec/encode/params.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/encode/stack.rs b/.artifacts/archive/transformers/src/codec/encode/stack.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/encode/stack.rs rename to .artifacts/archive/transformers/src/codec/encode/stack.rs diff --git a/.artifacts/archive/nn/transformers/src/codec/mod.rs b/.artifacts/archive/transformers/src/codec/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/codec/mod.rs rename to .artifacts/archive/transformers/src/codec/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/ffn/mod.rs b/.artifacts/archive/transformers/src/ffn/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/ffn/mod.rs rename to .artifacts/archive/transformers/src/ffn/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/ffn/network.rs b/.artifacts/archive/transformers/src/ffn/network.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/ffn/network.rs rename to .artifacts/archive/transformers/src/ffn/network.rs diff --git a/.artifacts/archive/nn/transformers/src/ffn/params.rs b/.artifacts/archive/transformers/src/ffn/params.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/ffn/params.rs rename to .artifacts/archive/transformers/src/ffn/params.rs diff --git a/.artifacts/archive/nn/transformers/src/lib.rs b/.artifacts/archive/transformers/src/lib.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/lib.rs rename to .artifacts/archive/transformers/src/lib.rs diff --git a/.artifacts/archive/nn/transformers/src/ops/merge.rs b/.artifacts/archive/transformers/src/ops/merge.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/ops/merge.rs rename to .artifacts/archive/transformers/src/ops/merge.rs diff --git a/.artifacts/archive/nn/transformers/src/ops/mod.rs b/.artifacts/archive/transformers/src/ops/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/ops/mod.rs rename to .artifacts/archive/transformers/src/ops/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/ops/split.rs b/.artifacts/archive/transformers/src/ops/split.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/ops/split.rs rename to .artifacts/archive/transformers/src/ops/split.rs diff --git a/.artifacts/archive/nn/transformers/src/primitives.rs b/.artifacts/archive/transformers/src/primitives.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/primitives.rs rename to .artifacts/archive/transformers/src/primitives.rs diff --git a/.artifacts/archive/nn/transformers/src/specs.rs b/.artifacts/archive/transformers/src/specs.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/specs.rs rename to .artifacts/archive/transformers/src/specs.rs diff --git a/.artifacts/archive/nn/transformers/src/transform/config.rs b/.artifacts/archive/transformers/src/transform/config.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/transform/config.rs rename to .artifacts/archive/transformers/src/transform/config.rs diff --git a/.artifacts/archive/nn/transformers/src/transform/mod.rs b/.artifacts/archive/transformers/src/transform/mod.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/transform/mod.rs rename to .artifacts/archive/transformers/src/transform/mod.rs diff --git a/.artifacts/archive/nn/transformers/src/transform/transformer.rs b/.artifacts/archive/transformers/src/transform/transformer.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/transform/transformer.rs rename to .artifacts/archive/transformers/src/transform/transformer.rs diff --git a/.artifacts/archive/nn/transformers/src/utils.rs b/.artifacts/archive/transformers/src/utils.rs similarity index 100% rename from .artifacts/archive/nn/transformers/src/utils.rs rename to .artifacts/archive/transformers/src/utils.rs diff --git a/.artifacts/archive/nn/transformers/tests/default.rs b/.artifacts/archive/transformers/tests/default.rs similarity index 100% rename from .artifacts/archive/nn/transformers/tests/default.rs rename to .artifacts/archive/transformers/tests/default.rs diff --git a/Cargo.toml b/Cargo.toml index 265fba0d..87b42c15 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,8 +19,8 @@ approx = "0.5" itertools = "0.12" lazy_static = "1" ndarray = { default-features = false, version = "0.15" } - num = { default-features = false, version = "0.4" } +paste = "1" smart-default = "0.7" strum = { default-features = false, features = ["derive"], version = "0.26" } diff --git a/core/src/traits/arr/ops.rs b/core/src/traits/arr/ops.rs index 3a2601eb..60d829f7 100644 --- a/core/src/traits/arr/ops.rs +++ b/core/src/traits/arr/ops.rs @@ -21,7 +21,7 @@ pub trait Inverse { pub trait Matmul { type Output; - fn matmul(&self, rhs: Rhs) -> Self::Output; + fn matmul(&self, rhs: &Rhs) -> Self::Output; } pub trait Matpow { @@ -56,14 +56,14 @@ where } } -impl Matmul for S +impl Matmul for S where S: Dot, { type Output = Y; - fn matmul(&self, rhs: X) -> Self::Output { - self.dot(&rhs) + fn matmul(&self, rhs: &X) -> Self::Output { + self.dot(rhs) } } diff --git a/models/gnn/Cargo.toml b/models/gnn/Cargo.toml index 48d15a99..6cb2b8be 100644 --- a/models/gnn/Cargo.toml +++ b/models/gnn/Cargo.toml @@ -69,7 +69,7 @@ std = [ "concision-core/std", "ndarray/std", "num/std", - "serde/std", + "serde?/std", "strum/std", ] diff --git a/models/kan/Cargo.toml b/models/kan/Cargo.toml index 6c80b778..087950e8 100644 --- a/models/kan/Cargo.toml +++ b/models/kan/Cargo.toml @@ -66,7 +66,7 @@ std = [ "concision-core/std", "ndarray/std", "num/std", - "serde/std", + "serde?/std", "strum/std", ] diff --git a/models/transformers/Cargo copy.toml b/models/transformers/Cargo copy.toml deleted file mode 100644 index 6c80b778..00000000 --- a/models/transformers/Cargo copy.toml +++ /dev/null @@ -1,123 +0,0 @@ -[package] -authors.workspace = true -build = "build.rs" -categories.workspace = true -description.workspace = true -edition.workspace = true -homepage.workspace = true -keywords.workspace = true -license.workspace = true -name = "concision-kan" -readme.workspace = true -repository.workspace = true -version.workspace = true - -[features] -default = [ - "std", -] - -full = [ - "default", - "approx", - "rand", - "serde", -] - -# ********* [FF] Dependencies ********* - -alloc = [ - "concision-core/alloc", -] - -approx = [ - "dep:approx", - "concision-core/approx", - "ndarray/approx-0_5", -] - -blas = [ - "concision-core/blas", - "ndarray/blas", -] - -rand = [ - "concision-core/rand", - "num/rand" -] - -serde = [ - "serde-1", - "concision-core/serde", - "ndarray/serde-1", - "num/serde" -] - -serde-1 = [ - "dep:serde", -] - -tracing = [ - "dep:tracing", -] - -# ********* [FF] Environments ********* -std = [ - "concision-core/std", - "ndarray/std", - "num/std", - "serde/std", - "strum/std", -] - -wasm = [ - "concision-core/wasm", -] - -wasi = [ - "concision-core/wasi", -] - -[lib] -bench = false -crate-type = ["lib"] -doctest = true -test = true - -[build-dependencies] - -[dependencies] -ndarray.workspace = true -num.workspace = true -smart-default.workspace = true -strum.workspace = true - -[dependencies.approx] -optional = true -version = "0.5" - -[dependencies.concision-core] -default-features = false -path = "../../core" -version = "0.1.14" - -[dependencies.serde] -default-features = false -features = ["derive"] -optional = true -version = "1" - -[dependencies.tracing] -optional = true -version = "0.1" - -[dev-dependencies] -lazy_static.workspace = true - -[package.metadata.docs.rs] -all-features = true -rustc-args = ["--cfg", "docsrs"] - -[target.wasm32-unknown-unknown] - -[target.wasm32-wasi] diff --git a/models/transformers/Cargo.toml b/models/transformers/Cargo.toml index 250538e6..34782d1c 100644 --- a/models/transformers/Cargo.toml +++ b/models/transformers/Cargo.toml @@ -66,7 +66,7 @@ std = [ "concision-core/std", "ndarray/std", "num/std", - "serde/std", + "serde?/std", "strum/std", ] @@ -89,6 +89,7 @@ test = true [dependencies] ndarray.workspace = true num.workspace = true +paste.workspace = true smart-default.workspace = true strum.workspace = true diff --git a/models/transformers/src/attention/head.rs b/models/transformers/src/attention/head.rs new file mode 100644 index 00000000..c85523bb --- /dev/null +++ b/models/transformers/src/attention/head.rs @@ -0,0 +1,45 @@ +/* + Appellation: head + Contrib: FL03 +*/ +use crate::params::QKVBase; +use nd::*; + +pub struct AttentionHead, D = Ix2> +where + D: Dimension, + S: RawData, +{ + params: QKVBase, +} + +impl AttentionHead +where + D: Dimension, + S: RawData, +{ + pub fn from_params(params: QKVBase) -> Self { + Self { params } + } + + pub fn builder(shape: Sh, builder: F) -> Self + where + F: Fn(D) -> ArrayBase, + Sh: ShapeBuilder, + { + Self::from_params(QKVBase::builder(shape, builder)) + } + + pub fn params(&self) -> &QKVBase { + &self.params + } + + pub fn params_mut(&mut self) -> &mut QKVBase { + &mut self.params + } + + access!(params::); + fwd_builder!(new.default where A: Default, S: DataOwned); + fwd_builder!(ones.ones where A: Clone + num::One, S: DataOwned); + fwd_builder!(zeros.zeros where A: Clone + num::Zero, S: DataOwned); +} diff --git a/models/transformers/src/attention/mod.rs b/models/transformers/src/attention/mod.rs index b885ac96..f449f39e 100644 --- a/models/transformers/src/attention/mod.rs +++ b/models/transformers/src/attention/mod.rs @@ -2,3 +2,12 @@ Appellation: attention Contrib: FL03 */ +pub use self::head::AttentionHead; + +pub(crate) mod head; + +pub mod multi; + +pub(crate) mod prelude { + pub use super::head::AttentionHead; +} diff --git a/models/transformers/src/attention/multi/mod.rs b/models/transformers/src/attention/multi/mod.rs new file mode 100644 index 00000000..014e29b9 --- /dev/null +++ b/models/transformers/src/attention/multi/mod.rs @@ -0,0 +1,10 @@ +/* + Appellation: multi + Contrib: FL03 +*/ +//! # Multi-Head Attention +//! +//! +pub use self::multi_head::*; + +pub(crate) mod multi_head; diff --git a/models/transformers/src/attention/multi/multi_head.rs b/models/transformers/src/attention/multi/multi_head.rs new file mode 100644 index 00000000..ad36fe45 --- /dev/null +++ b/models/transformers/src/attention/multi/multi_head.rs @@ -0,0 +1,6 @@ +/* + Appellation: multi_head + Contrib: FL03 +*/ + +pub struct MultiHeadAttention; diff --git a/models/transformers/src/impls/impl_head.rs b/models/transformers/src/impls/impl_head.rs new file mode 100644 index 00000000..ee5eaf10 --- /dev/null +++ b/models/transformers/src/impls/impl_head.rs @@ -0,0 +1,19 @@ +/* + Appellation: impl_head + Contrib: FL03 +*/ +use crate::attention::AttentionHead; +use crate::params::QKVBase; +use nd::prelude::*; +use nd::DataOwned; + +impl Default for AttentionHead +where + A: Default, + D: Dimension, + S: DataOwned, +{ + fn default() -> Self { + Self::from_params(QKVBase::default()) + } +} diff --git a/models/transformers/src/impls/impl_linalg.rs b/models/transformers/src/impls/impl_linalg.rs new file mode 100644 index 00000000..4440ec34 --- /dev/null +++ b/models/transformers/src/impls/impl_linalg.rs @@ -0,0 +1,50 @@ +/* + Appellation: impl_linalg + Contrib: FL03 +*/ +use crate::params::{QKVBase, QKV}; +use concision::Matmul; +use nd::linalg::Dot; +use nd::*; + +impl Matmul> for QKVBase +where + A: LinalgScalar, + D: Dimension, + E: Dimension, + F: Dimension, + S: Data, + T: Data, + ArrayBase: Dot, Output = Array>, +{ + type Output = QKV; + + fn matmul(&self, rhs: &QKVBase) -> Self::Output { + QKVBase { + q: self.q().dot(rhs.q()), + k: self.k().dot(rhs.k()), + v: self.v().dot(rhs.v()), + } + } +} + +impl Matmul> for QKVBase +where + A: LinalgScalar, + D: Dimension, + E: Dimension, + F: Dimension, + S: Data, + T: Data, + ArrayBase: Dot, Output = Array>, +{ + type Output = QKV; + + fn matmul(&self, rhs: &ArrayBase) -> Self::Output { + QKVBase { + q: self.q().dot(rhs), + k: self.k().dot(rhs), + v: self.v().dot(rhs), + } + } +} diff --git a/models/transformers/src/impls/impl_params.rs b/models/transformers/src/impls/impl_params.rs new file mode 100644 index 00000000..ad79e30d --- /dev/null +++ b/models/transformers/src/impls/impl_params.rs @@ -0,0 +1,69 @@ +/* + Appellation: impl_params + Contrib: FL03 +*/ +use crate::params::QKVBase; +use nd::prelude::*; +use nd::{Data, DataOwned, RawDataClone}; + +impl Clone for QKVBase +where + D: Dimension, + S: RawDataClone, +{ + fn clone(&self) -> Self { + Self { + q: self.q.clone(), + k: self.k.clone(), + v: self.v.clone(), + } + } +} + +impl Copy for QKVBase +where + D: Copy + Dimension, + S: Copy + RawDataClone, +{ +} + +impl Default for QKVBase +where + D: Dimension, + S: DataOwned, + S::Elem: Default, +{ + fn default() -> Self { + Self { + q: Default::default(), + k: Default::default(), + v: Default::default(), + } + } +} + +impl PartialEq for QKVBase +where + A: PartialEq, + D: Dimension, + S: Data, +{ + fn eq(&self, other: &Self) -> bool { + self.q == *other.q() && self.k == *other.k() && self.v == *other.v() + } +} + +impl PartialEq> for QKVBase +where + A: PartialEq, + B: PartialEq, + D: Dimension, + S: Data, + S2: Data, + D2: Dimension, + ArrayBase: PartialEq>, +{ + fn eq(&self, other: &ArrayBase) -> bool { + self.q == *other && self.k == *other && self.v == *other + } +} diff --git a/models/transformers/src/lib.rs b/models/transformers/src/lib.rs index ee0ed4a8..e39da023 100644 --- a/models/transformers/src/lib.rs +++ b/models/transformers/src/lib.rs @@ -16,10 +16,25 @@ extern crate alloc; extern crate concision_core as concision; extern crate ndarray as nd; +pub use self::attention::AttentionHead; +pub use self::params::QKV; pub use self::transformer::Transformer; +#[macro_use] +pub(crate) mod macros; pub(crate) mod transformer; pub mod attention; +pub mod params; -pub mod prelude {} +pub(crate) mod impls { + pub mod impl_head; + pub mod impl_linalg; + pub mod impl_params; +} + +pub mod prelude { + pub use super::attention::prelude::*; + pub use super::params::prelude::*; + pub use super::Transformer; +} diff --git a/models/transformers/src/macros.rs b/models/transformers/src/macros.rs new file mode 100644 index 00000000..d7b352d0 --- /dev/null +++ b/models/transformers/src/macros.rs @@ -0,0 +1,98 @@ +/* + Appellation: macros + Contrib: FL03 +*/ + +macro_rules! access { + ($($var:ident),* $(,)?) => { + $(access!(@impl $var);)* + }; + ($via:ident::<$($var:ident),* $(,)?>) => { + $(access!(@impl $via::$var);)* + }; + (@impl $var:ident) => { + pub fn $var(&self) -> &ArrayBase { + &self.$var + } + paste::paste! { + pub fn [< $var _mut>](&mut self) -> &mut ArrayBase { + &mut self.$var + } + } + }; + (@impl $via:ident::$var:ident) => { + pub fn $var(&self) -> &ArrayBase { + &self.$via.$var + } + paste::paste! { + pub fn [< $var _mut>](&mut self) -> &mut ArrayBase { + &mut self.$via.$var + } + } + }; +} + +macro_rules! fwd_builder { + ($method:ident.$call:ident where $($rest:tt)*) => { + pub fn $method(shape: Sh) -> Self + where + Sh: ndarray::ShapeBuilder, + $($rest)* + { + Self::builder(shape, ArrayBase::$call) + } + }; +} + +macro_rules! param_views { + ($method:ident::$($rest:tt)*) => { + param_views!(@impl $method.$method::$($rest)*); + }; + ($method:ident.$call:ident::$($rest:tt)*) => { + param_views!(@impl $method.$call::$($rest)*); + }; + (@impl $method:ident.$call:ident::<$view:ident>(self) where $($rest:tt)*) => { + pub fn $method(self) -> QKVBase<$view, D> + where + $($rest)* + { + param_views!(@apply $call(self)) + } + }; + (@impl $method:ident.$call:ident::<$view:ident>(&self) where $($rest:tt)*) => { + pub fn $method(&self) -> QKVBase<$view, D> + where + $($rest)* + { + param_views!(@apply $call(self)) + } + }; + (@impl $method:ident.$call:ident::<'a, $view:ident>(&self) where $($rest:tt)*) => { + pub fn $method(&self) -> QKVBase<$view<&'_ A>, D> + where + $($rest)* + { + param_views!(@apply $call(self)) + } + }; + (@apply $call:ident($self:expr)) => { + $crate::params::QKVBase { + q: $self.q.$call(), + k: $self.k.$call(), + v: $self.v.$call(), + } + }; +} + +macro_rules! qkv_builder { + + ($method:ident.$call:ident where $($rest:tt)*) => { + pub fn $method(shape: Sh) -> Self + where + Sh: ndarray::ShapeBuilder, + $($rest)* + { + Self::builder(shape, ArrayBase::$call) + } + }; +} diff --git a/models/transformers/src/params/mod.rs b/models/transformers/src/params/mod.rs new file mode 100644 index 00000000..b4baf401 --- /dev/null +++ b/models/transformers/src/params/mod.rs @@ -0,0 +1,32 @@ +/* + Appellation: params + Contrib: FL03 +*/ +pub use self::qkv::QKVBase; + +mod qkv; + +macro_rules! params_ty { + ($target:ident: [$($name:ident<$(&$lt:lifetime)?$repr:ident>),* $(,)?]) => { + $(params_ty!(@impl $target: $name<$(&$lt)? $repr>);)* + }; + (@impl $target:ident: $name:ident<$repr:ident>) => { + pub type $name = $target, D>; + }; + (@impl $target:ident: $name:ident<&'a $repr:ident>) => { + pub type $name<'a, A = f64, D = ndarray::Ix2> = $target, D>; + }; +} + +params_ty!( + QKVBase: [ + QKV, + ArcQKV, + ViewQKV<&'a ViewRepr>, + ] +); + +pub(crate) mod prelude { + pub use super::QKVBase; + pub use super::{ArcQKV, QKV}; +} diff --git a/models/transformers/src/params/qkv.rs b/models/transformers/src/params/qkv.rs new file mode 100644 index 00000000..231f48d9 --- /dev/null +++ b/models/transformers/src/params/qkv.rs @@ -0,0 +1,70 @@ +/* + Appellation: params + Contrib: FL03 +*/ +use nd::*; + +use num::traits::{One, Zero}; + +pub struct QKVBase, D = Ix2> +where + D: Dimension, + S: RawData, +{ + pub(crate) q: ArrayBase, + pub(crate) k: ArrayBase, + pub(crate) v: ArrayBase, +} + +impl QKVBase +where + D: Dimension, + S: RawData, +{ + pub fn builder(shape: Sh, builder: F) -> Self + where + F: Fn(D) -> ArrayBase, + Sh: ShapeBuilder, + { + let dim = shape.into_shape().raw_dim().clone(); + Self { + q: builder(dim.clone()), + k: builder(dim.clone()), + v: builder(dim), + } + } + + access!(q, k, v); + + qkv_builder!(new.default where A: Default, S: DataOwned); + qkv_builder!(ones.ones where A: Clone + One, S: DataOwned); + qkv_builder!(zeros.zeros where A: Clone + Zero, S: DataOwned); + + pub fn as_views(&self) -> (ArrayView, ArrayView, ArrayView) + where + S: Data, + { + (self.q.view(), self.k.view(), self.v.view()) + } + + /// Return the [pattern](ndarray::Dimension::Pattern) of the dimension + pub fn dim(&self) -> D::Pattern { + self.q.dim() + } + /// Get the rank of the parameters; i.e. the number of dimensions. + pub fn rank(&self) -> usize { + self.q.ndim() + } + /// Returns the raw dimension ([D](ndarray::Dimension)) of the parameters. + pub fn raw_dim(&self) -> D { + self.q.raw_dim() + } + + pub fn shape(&self) -> &[usize] { + self.q.shape() + } + + param_views!(to_owned::(&self) where A: Clone, S: Data); + param_views!(to_shared::(&self) where A: Clone, S: DataShared); + param_views!(view::<'a, ViewRepr>(&self) where S: Data); +} diff --git a/models/transformers/tests/attention.rs b/models/transformers/tests/attention.rs new file mode 100644 index 00000000..98aa4c0e --- /dev/null +++ b/models/transformers/tests/attention.rs @@ -0,0 +1,43 @@ +/* + Appellation: attention + Contrib: FL03 +*/ +extern crate concision_core as concision; +extern crate concision_transformers as transformers; + +use concision::{linarr, Matmul}; +use transformers::{AttentionHead, QKV}; + +use ndarray::prelude::*; + +#[test] +fn test_qkv() { + let shape = (2048, 10); + let params = QKV::::new(shape); + assert_eq!(params.q(), &Array::default(shape)); +} + +#[test] +fn test_qkv_matmul() { + let shape = (2048, 10); + // generate some sample data + let data = linarr(shape).unwrap(); + // initialize the parameters + let params = QKV::::ones(shape); + // calculate the expected result + let exp = Array2::::ones(shape).dot(&data.t()); + // calculate the result + let res = params.matmul(&data.t()); + // compare the results + assert_eq!(res.q(), &exp); + assert_eq!(res.k(), &exp); + assert_eq!(res.v(), &exp); +} + +#[test] +fn test_attention_head() { + let shape = (30, 3); + + let head = AttentionHead::::ones(shape); + assert_eq!(head.q(), &Array::ones(shape)); +}