code: def __init__(
      self, in_features, out_features, manifold, over_param, weight_norm
  ):
      super(RiemannianLayer, self).__init__()
      self.in_features = in_features
      self.out_features = out_features
      self.manifold = manifold
      self._weight = nn.Parameter(
          torch.Tensor(out_features, in_features)
      )
      self.over_param = over_param
      self.weight_norm = weight_norm
      self._bias = nn.Parameter(torch.Tensor(out_features, 1))
      self.reset_parameters()
  
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 1 to create a new RiemannianLayer object from inherited base classes: nn with example: obj = RiemannianLayer(in_features, out_features, manifold, over_param, weight_norm)