class_docstr: :math:`\mathcal{S}`-VAE model.
  
  Args:
      model_config (SVAEConfig): The Variational Autoencoder configuration setting the main
      parameters of the model.
  
      encoder (BaseEncoder): An instance of BaseEncoder (inheriting from `torch.nn.Module` which
          plays the role of encoder. This argument allows you to use your own neural networks
          architectures if desired. If None is provided, a simple Multi Layer Preception
          (https://en.wikipedia.org/wiki/Multilayer_perceptron) is used. Default: None.
  
      decoder (BaseDecoder): An instance of BaseDecoder (inheriting from `torch.nn.Module` which
          plays the role of decoder. This argument allows you to use your own neural networks
          architectures if desired. If None is provided, a simple Multi Layer Preception
          (https://en.wikipedia.org/wiki/Multilayer_perceptron) is used. Default: None.
  
  .. note::
      For high dimensional data we advice you to provide you own network architectures. With the
      provided MLP you may end up with a ``MemoryError``.
code: def _compute_kl(self, m, concentration):
      term1 = concentration * (
          ive(m / 2, concentration) / (ive(m / 2 - 1, concentration))
      )  # good
  
      term2 = (
          (m / 2 - 1) * concentration.log()
          - torch.tensor([2 * np.pi]).to(concentration.device).log()
          * (m / 2)
          - (ive(m / 2 - 1, concentration)).log()
          - concentration
      )  # good
  
      term3 = (
          -torch.lgamma(torch.tensor([m / 2]).to(concentration.device))
          + torch.tensor([2]).to(concentration.device).log()
          + torch.tensor([np.pi]).to(concentration.device).log()
          * (m / 2)
      )  # good
  
      return (term1 + term2 + term3).squeeze(-1)
  
imports: from typing import Optional
  import numpy
  import torch
  import torch.distributions
  import torch.nn.functional
  from ...data.datasets import BaseDataset
  from ..base.base_utils import ModelOutput
  from ..nn import BaseDecoder, BaseEncoder
  from ..nn.default_architectures import Encoder_SVAE_MLP
  from ..vae import VAE
  from .svae_config import SVAEConfig
  from .svae_utils import ive
label_desc: Use image node_id 4 for calling the SVAE obj's underlying member method code with example usage: obj._compute_kl(m, concentration) and returns: unknown