import torch from pina.model import KernelNeuralOperator, FeedForward input_dim = 2 output_dim = 4 embedding_dim = 24 batch_size = 10 numb = 256 data = torch.rand(size=(batch_size, numb, input_dim), requires_grad=True) output_shape = torch.Size([batch_size, numb, output_dim]) lifting_operator = FeedForward(input_dimensions=input_dim, output_dimensions=embedding_dim) projection_operator = FeedForward(input_dimensions=embedding_dim, output_dimensions=output_dim) integral_kernels = torch.nn.Sequential(FeedForward(input_dimensions=embedding_dim, output_dimensions=embedding_dim), FeedForward(input_dimensions=embedding_dim, output_dimensions=embedding_dim),) def test_constructor(): KernelNeuralOperator(lifting_operator=lifting_operator, integral_kernels=integral_kernels, projection_operator=projection_operator) def test_forward(): operator = KernelNeuralOperator(lifting_operator=lifting_operator, integral_kernels=integral_kernels, projection_operator=projection_operator) out = operator(data) assert out.shape == output_shape def test_backward(): operator = KernelNeuralOperator(lifting_operator=lifting_operator, integral_kernels=integral_kernels, projection_operator=projection_operator) out = operator(data) loss = torch.nn.functional.mse_loss(out, torch.zeros_like(out)) loss.backward() grad = data.grad assert grad.shape == data.shape