class_docstr: HiFiC autoencoder architecture.
  
  This implements the HiFiC autoencoder as described in the following paper:
  
  High-Fidelity Generative Image Compression
  F. Mentzer, G. Toderici, M. Tschannen, E. Agustsson
  
  Args:
      in_channels: The number of channels in the input image.
      latent_features: The number of features to use as input to the
          conditional Gaussian layer.
      hyper_feautures: The number of features to use for the hyperprior.
      num_residual_blocks: Number of residual blocks to use at the start of
          generator decoding.
      freeze_encoder: Whether to freeze training of the encoder.
      freeze_bottleneck: Whether to freeze training of the bottleneck (both
          conditional Gaussian and hyperprior).
class_docstr_tok: ["HiFiC","autoencoder","architecture",".","This","implements","the","HiFiC","autoencoder","as","described","in","the","following","paper",":","High-Fidelity","Generative","Image","Compression","F.","Mentzer",",","G.","Toderici",",","M.","Tschannen",",","E.","Agustsson","Args",":","in_channels",":","The","number","of","channels","in","the","input","image",".","latent_features",":","The","number","of","features","to","use","as","input","to","the","conditional","Gaussian","layer",".","hyper_feautures",":","The","number","of","features","to","use","for","the","hyperprior",".","num_residual_blocks",":","Number","of","residual","blocks","to","use","at","the","start","of","generator","decoding",".","freeze_encoder",":","Whether","to","freeze","training","of","the","encoder",".","freeze_bottleneck",":","Whether","to","freeze","training","of","the","bottleneck","(","both","conditional","Gaussian","and","hyperprior",")","."]
docstr: Decompress a batch of images from strings.
  
  Args:
      compressed_data: Strings of data to decompress.
      force_cpu: Whether to throw an error if any operations are not on
          CPU.
docstr_tok: ["Decompress","a","batch","of","images","from","strings",".","Args",":","compressed_data",":","Strings","of","data","to","decompress",".","force_cpu",":","Whether","to","throw","an","error","if","any","operations","are","not","on","CPU","."]
code: def decompress(
      self,
      compressed_data: HyperpriorCompressedOutput,
      force_cpu: bool = True,
  ) -> Tensor:
      """
      Decompress a batch of images from strings.
  
      Args:
          compressed_data: Strings of data to decompress.
          force_cpu: Whether to throw an error if any operations are not on
              CPU.
      """
      if not self._on_cpu():
          if force_cpu:
              raise ValueError(
                  "All params must be on CPU if force_cpu=True."
              )
  
          if not self._check_compress_devices():
              raise ValueError(
                  "Some layers on GPU that should be on CPU. Call "
                  "update_tensor_devices('compress') to use partial-GPU "
                  "compression."
              )
  
          device = self.decoder.blocks[-1].weight.device
      else:
          device = torch.device("cpu")
  
      latent_size = (
          compressed_data.padded_size[0] // 2**4,
          compressed_data.padded_size[1] // 2**4,
      )
      hyper_latent_size = (
          latent_size[0] // 2**2,
          latent_size[1] // 2**2,
      )
  
      # hyper synthesis
      hyper_latent_decoded = self.hyper_bottleneck.decompress(
          compressed_data.hyper_latent_strings, hyper_latent_size
      )
      means = self.hyper_synthesis_mean(hyper_latent_decoded)
      scales = self.hyper_synthesis_scale(hyper_latent_decoded)
  
      # image synthesis
      indexes = self.latent_bottleneck.build_indexes(scales)
      latent_decoded = self.latent_bottleneck.decompress(
          compressed_data.latent_strings, indexes, means=means
      )
      reconstruction: Tensor = self.decoder(latent_decoded.to(device))
  
      return reconstruction[
          :,
          :,
          : compressed_data.image_size[0],
          : compressed_data.image_size[1],
      ].clamp(0.0, 1.0)
  
imports: import logging
  import torch
  import torch.nn
  from compressai.entropy_models import EntropyBottleneck, GaussianConditional
  from torch import Tensor
  import neuralcompression.functional
  from neuralcompression import HyperpriorCompressedOutput, HyperpriorOutput
  from ._hific_encoder_decoder import HiFiCEncoder, HiFiCGenerator
  from ._hyperprior_autoencoder import HyperpriorAutoencoderBase
label_desc: Use image node_id 13 for calling the HiFiCAutoencoder obj's underlying member method code with example usage: obj.decompress(compressed_data, force_cpu) and returns: reconstruction