class_docstr: Usual encoder followed by an exponential map
code: def forward(self, x):
      e = self.enc(x.reshape(x.shape[0], -1))
      mu = self.fc21(e)
      mu = self.manifold.expmap0(mu)
      return ModelOutput(
          embedding=mu,
          log_covariance=torch.log(
              F.softplus(self.fc22(e)) + 1e-5
          ),  # expects log_covariance
          log_concentration=torch.log(
              F.softplus(self.fc22(e)) + 1e-5
          ),  # for Riemannian Normal
      )
  
imports: import logging
  import math
  import os
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from pythae.data.preprocessors import DataProcessor
  from pythae.models import AutoModel, PoincareVAE, PoincareVAEConfig
  from pythae.models.base.base_utils import ModelOutput
  from pythae.models.nn import BaseDecoder, BaseEncoder
  from pythae.models.pvae.pvae_utils import PoincareBall
  from pythae.trainers import BaseTrainer, BaseTrainerConfig
label_desc: Use image node_id 2 for calling the Encoder obj's underlying member method code with example usage: obj.forward(x) and returns: ModelOutput