class_docstr: A builder class that allows to builds a multitrack unet model
  estimator. The built model estimator has a different behaviour when
  used in a train/eval mode and in predict mode.
  
  * In train/eval mode:
      It takes as input and outputs magnitude spectrogram
  * In predict mode:
      It takes as input and outputs waveform.
      The whole separation process is then done in this function
      for performance reason: it makes it possible to run the whole
      separation process (including STFT and inverse STFT) on GPU.
  
  Example:
  >>> from spleeter.model import EstimatorSpecBuilder
  >>> builder = EstimatorSpecBuilder()
  >>> builder.build_predict_model()
  >>> builder.build_evaluation_model()
  >>> builder.build_train_model()
  
  >>> from spleeter.model import model_fn
  >>> estimator = tf.estimator.Estimator(model_fn=model_fn, ...)
class_docstr_tok: ["A","builder","class","that","allows","to","builds","a","multitrack","unet","model","estimator",".","The","built","model","estimator","has","a","different","behaviour","when","used","in","a","train\/eval","mode","and","in","predict","mode",".","*","In","train\/eval","mode",":","It","takes","as","input","and","outputs","magnitude","spectrogram","*","In","predict","mode",":","It","takes","as","input","and","outputs","waveform",".","The","whole","separation","process","is","then","done","in","this","function","for","performance","reason",":","it","makes","it","possible","to","run","the","whole","separation","process","(","including","STFT","and","inverse","STFT",")","on","GPU",".","Example",":",">",">",">","from","spleeter.model","import","EstimatorSpecBuilder",">",">",">","builder","=","EstimatorSpecBuilder","(",")",">",">",">","builder.build_predict_model","(",")",">",">",">","builder.build_evaluation_model","(",")",">",">",">","builder.build_train_model","(",")",">",">",">","from","spleeter.model","import","model_fn",">",">",">","estimator","=","tf.estimator.Estimator","(","model_fn=model_fn",",","...",")"]
docstr: Perform separation with multichannel Wiener Filtering using Norbert.
  
  Note: multichannel Wiener Filtering is not coded in Tensorflow
  and thus may be quite slow.
  
  Returns:
      Dict:
          Dictionary of separated waveforms (key: instrument name,
          value: estimated waveform of the instrument)
docstr_tok: ["Perform","separation","with","multichannel","Wiener","Filtering","using","Norbert",".","Note",":","multichannel","Wiener","Filtering","is","not","coded","in","Tensorflow","and","thus","may","be","quite","slow",".","Returns",":","Dict",":","Dictionary","of","separated","waveforms","(","key",":","instrument","name",",","value",":","estimated","waveform","of","the","instrument",")"]
code: def _build_mwf_output_waveform(self) -> Dict:
      """
      Perform separation with multichannel Wiener Filtering using Norbert.
  
      Note: multichannel Wiener Filtering is not coded in Tensorflow
      and thus may be quite slow.
  
      Returns:
          Dict:
              Dictionary of separated waveforms (key: instrument name,
              value: estimated waveform of the instrument)
      """
      import norbert  # type: ignore # pylint: disable=import-error
  
      output_dict = self.model_outputs
      x = self.stft_feature
      v = tf.stack(
          [
              pad_and_reshape(
                  output_dict[f"{instrument}_spectrogram"],
                  self._frame_length,
                  self._F,
              )[: tf.shape(x)[0], ...]
              for instrument in self._instruments
          ],
          axis=3,
      )
      input_args = [v, x]
      stft_function = (
          tf.py_function(
              lambda v, x: norbert.wiener(v.numpy(), x.numpy()),
              input_args,
              tf.complex64,
          ),
      )
      return {
          instrument: self._inverse_stft(stft_function[0][:, :, :, k])
          for k, instrument in enumerate(self._instruments)
      }
  
imports: import importlib
  from typing import Any, Dict, Optional, Tuple
  import tensorflow
  from tensorflow.signal import hann_window, inverse_stft, stft
  from ..utils.tensor import pad_and_partition, pad_and_reshape
label_desc: Use image node_id 16 for calling the EstimatorSpecBuilder obj's underlying member method code with example usage: obj._build_mwf_output_waveform() and returns: unknown