class_docstr: Base class for all Vocoders that use a Glow or reversible Flow-based setup. All child class are expected
  to have a parameter called audio_to_melspec_precessor that is an instance of
  nemo.collections.asr.parts.FilterbankFeatures
class_docstr_tok: ["Base","class","for","all","Vocoders","that","use","a","Glow","or","reversible","Flow-based","setup",".","All","child","class","are","expected","to","have","a","parameter","called","audio_to_melspec_precessor","that","is","an","instance","of","nemo.collections.asr.parts.FilterbankFeatures"]
code: def check_children_attributes(self):
      if self.stft is None:
          try:
              n_fft = self.audio_to_melspec_precessor.n_fft
              hop_length = self.audio_to_melspec_precessor.hop_length
              win_length = self.audio_to_melspec_precessor.win_length
              window = self.audio_to_melspec_precessor.window.to(
                  self.device
              )
          except AttributeError as e:
              raise AttributeError(
                  f"{self} could not find a valid audio_to_melspec_precessor. GlowVocoder requires child class "
                  "to have audio_to_melspec_precessor defined to obtain stft parameters. "
                  "audio_to_melspec_precessor requires n_fft, hop_length, win_length, window, and nfilt to be "
                  "defined."
              ) from e
  
          def yet_another_patch(
              audio, n_fft, hop_length, win_length, window
          ):
              spec = torch.stft(
                  audio,
                  n_fft=n_fft,
                  hop_length=hop_length,
                  win_length=win_length,
                  window=window,
                  return_complex=True,
              )
              spec = torch.view_as_real(spec)
              return torch.sqrt(spec.pow(2).sum(-1)), torch.atan2(
                  spec[..., -1], spec[..., 0]
              )
  
          self.stft = lambda x: yet_another_patch(
              x,
              n_fft=n_fft,
              hop_length=hop_length,
              win_length=win_length,
              window=window,
          )
          self.istft = lambda x, y: torch.istft(
              torch.complex(x * torch.cos(y), x * torch.sin(y)),
              n_fft=n_fft,
              hop_length=hop_length,
              win_length=win_length,
              window=window,
          )
  
      if self.n_mel is None:
          try:
              self.n_mel = self.audio_to_melspec_precessor.nfilt
          except AttributeError as e:
              raise AttributeError(
                  f"{self} could not find a valid audio_to_melspec_precessor. GlowVocoder requires child class to "
                  "have audio_to_melspec_precessor defined to obtain stft parameters. audio_to_melspec_precessor "
                  "requires nfilt to be defined."
              ) from e
  
imports: import json
  from abc import ABC, abstractmethod
  from contextlib import ExitStack, contextmanager
  from typing import List, Optional
  import torch
  from omegaconf import DictConfig
  from tqdm import tqdm
  from nemo.collections.tts.parts.utils.helpers import OperationMode
  from nemo.core.classes import ModelPT
  from nemo.core.classes.common import PretrainedModelInfo, typecheck
  from nemo.core.neural_types.elements import AudioSignal
  from nemo.core.neural_types.neural_type import NeuralType
  from nemo.utils import logging, model_utils
label_desc: Use image node_id 5 for calling the GlowVocoder obj's underlying member method code with example usage: obj.check_children_attributes() and returns: torch,  torch