public TorchTensor forward(TorchTensor t, TorchTensor mask)
            {
                var src = pos_encoder.forward(encoder.forward(t) * MathF.Sqrt(ninputs));
                var enc = transformer_encoder.forward(src, mask);

                return(decoder.forward(enc));
            }
        private torch.Tensor ForwardEmbedding(torch.Tensor tokens, torch.Tensor segmentLabels, torch.Tensor positions)
        {
            using var disposeScope = torch.NewDisposeScope();

            var x = TokenEmbedding.forward(tokens);

            if (EmbedScale != null)
            {
                x.mul_(EmbedScale);
            }
            if (PositionalEmbedding != null)
            {
                var positionalEmbedding = PositionalEmbedding.forward(tokens,
                                                                      new Dictionary <string, object> {
                    { PositionalEmbedding.PositionKey, positions }
                });
                x.add_(positionalEmbedding);
            }
            if (SegmentEmbedding != null && segmentLabels.IsNotNull())
            {
                var segmentEmbedding = SegmentEmbedding.forward(segmentLabels);
                x.add_(segmentEmbedding);
            }
            if (EmbeddingLayerNorm != null)
            {
                x = EmbeddingLayerNorm.forward(x);
            }
            x = EmbedTransfer.forward(x, (int)x.size()[x.size().Length - 1]);
            x = DropoutLayer.forward(x);

            return(x.MoveToOuterDisposeScope());
        }
        public override torch.Tensor forward(torch.Tensor input, Dictionary <string, object> param = null)
        {
            using var disposeScope = torch.NewDisposeScope();

            ParseArguments(param, out var incrementalState, out var positions);

            if (positions.IsNull())
            {
                positions = incrementalState
                    ? torch.tensor(PadPositionIndex + input.size(1))
                    : MakePositions(input, PadTokenIndex);
            }

            var embedding = Embedding.forward(positions);

            return(embedding.MoveToOuterDisposeScope());
        }