class_docstr: Module combining the most common operations in a normalizing flow or similar model.
  
  It combines affine coupling, permutation, and global affine transformation
  ('ActNorm'). It can also be used as GIN coupling block, perform learned
  householder permutations, and use an inverted pre-permutation. The affine
  transformation includes a soft clamping mechanism, first used in Real-NVP.
  The block as a whole performs the following computation:
  
  .. math::
  
      y = V\,R \; \Psi(s_\mathrm{global}) \odot \mathrm{Coupling}\Big(R^{-1} V^{-1} x\Big)+ t_\mathrm{global}
  
  - The inverse pre-permutation of x (i.e. :math:`R^{-1} V^{-1}`) is optional (see
    ``reverse_permutation`` below).
  - The learned householder reflection matrix
    :math:`V` is also optional all together (see ``learned_householder_permutation``
    below).
  - For the coupling, the input is split into :math:`x_1, x_2` along
    the channel dimension. Then the output of the coupling operation is the
    two halves :math:`u = \mathrm{concat}(u_1, u_2)`.
  
    .. math::
  
        u_1 &= x_1 \odot \exp \Big( \alpha \; \mathrm{tanh}\big( s(x_2) \big)\Big) + t(x_2) \\
        u_2 &= x_2
  
    Because :math:`\mathrm{tanh}(s) \in [-1, 1]`, this clamping mechanism prevents
    exploding values in the exponential. The hyperparameter :math:`\alpha` can be adjusted.
class_docstr_tok: ["Module","combining","the","most","common","operations","in","a","normalizing","flow","or","similar","model",".","It","combines","affine","coupling",",","permutation",",","and","global","affine","transformation","(","'ActNorm","'",")",".","It","can","also","be","used","as","GIN","coupling","block",",","perform","learned","householder","permutations",",","and","use","an","inverted","pre-permutation",".","The","affine","transformation","includes","a","soft","clamping","mechanism",",","first","used","in","Real-NVP",".","The","block","as","a","whole","performs","the","following","computation",":","..","math",":",":","y","=","V\\",",","R","\\",";","\\Psi","(","s_\\mathrm","{","global","}",")","\\odot","\\mathrm","{","Coupling","}","\\Big","(","R^","{","-1","}","V^","{","-1","}","x\\Big",")","+","t_\\mathrm","{","global","}","-","The","inverse","pre-permutation","of","x","(","i.e",".",":","math",":","`","R^","{","-1","}","V^","{","-1","}","`",")","is","optional","(","see","``","reverse_permutation","``","below",")",".","-","The","learned","householder","reflection","matrix",":","math",":","`","V","`","is","also","optional","all","together","(","see","``","learned_householder_permutation","``","below",")",".","-","For","the","coupling",",","the","input","is","split","into",":","math",":","`","x_1",",","x_2","`","along","the","channel","dimension",".","Then","the","output","of","the","coupling","operation","is","the","two","halves",":","math",":","`","u","=","\\mathrm","{","concat","}","(","u_1",",","u_2",")","`",".","..","math",":",":","u_1","&","=","x_1","\\odot","\\exp","\\Big","(","\\alpha","\\",";","\\mathrm","{","tanh","}","\\big","(","s","(","x_2",")","\\big",")","\\Big",")","+","t","(","x_2",")","\\\\","u_2","&","=","x_2","Because",":","math",":","`","\\mathrm","{","tanh","}","(","s",")","\\in","[","-1",",","1","]","`",",","this","clamping","mechanism","prevents","exploding","values","in","the","exponential",".","The","hyperparameter",":","math",":","`","\\alpha","`","can","be","adjusted","."]
code: def output_dims(self, input_dims):
      return input_dims
  
imports: from __future__ import annotations
  import warnings
  from typing import Callable
  import torch
  import torch.nn.functional
  from FrEIA.modules import InvertibleModule
  from scipy.stats import special_ortho_group
  from torch import Tensor, nn
label_desc: Use image node_id 7 for calling the AllInOneBlock obj's underlying member method code with example usage: obj.output_dims(input_dims) and returns: input_dims