class_docstr: Entropy model for power-law distributed random variables.
  
  This entropy model handles quantization and compression of a bottleneck tensor
  and implements a penalty that encourages compressibility under the Elias gamma
  code.
  
  The gamma code has code lengths `1 + 2 floor(log_2(x))`, for `x` a positive
  integer, and is close to optimal if `x` is distributed according to a power
  law. Being a universal code, it also guarantees that in the worst case, the
  expected code length is no more than 3 times the entropy of the empirical
  distribution of `x`, as long as probability decreases with increasing `x`. For
  details on the gamma code, see:
  
  > "Universal Codeword Sets and Representations of the Integers"<br />
  > P. Elias<br />
  > https://doi.org/10.1109/TIT.1975.1055349
  
  Given a signed integer, `run_length_gamma_encode` encodes zeros using a
  run-length code, the sign using a uniform bit, and applies the gamma code to
  the magnitude.
  
  The penalty applied by this class is given by:
  ```
  log((abs(x) + alpha) / alpha)
  ```
  This encourages `x` to follow a symmetrized power law, but only approximately
  for `alpha > 0`. Without `alpha`, the penalty would have a singularity at
  zero. Setting `alpha` to a small positive value ensures that the penalty is
  non-negative, and that its gradients are useful for optimization.
docstr: Decompresses a tensor.
  
  Reconstructs the quantized tensor from bit strings produced by `compress()`.
  
  Args:
    strings: `tf.Tensor` containing the compressed bit strings.
    code_shape: Shape of innermost dimensions of the output `tf.Tensor`.
  
  Returns:
    A `tf.Tensor` of shape `tf.shape(strings) + code_shape`.
docstr_tok: ["Decompresses","a","tensor",".","Reconstructs","the","quantized","tensor","from","bit","strings","produced","by","`","compress","(",")","`",".","Args",":","strings",":","`","tf.Tensor","`","containing","the","compressed","bit","strings",".","code_shape",":","Shape","of","innermost","dimensions","of","the","output","`","tf.Tensor","`",".","Returns",":","A","`","tf.Tensor","`","of","shape","`","tf.shape","(","strings",")","+","code_shape","`","."]
code: def decompress(self, strings, code_shape):
      """Decompresses a tensor.
  
      Reconstructs the quantized tensor from bit strings produced by `compress()`.
  
      Args:
        strings: `tf.Tensor` containing the compressed bit strings.
        code_shape: Shape of innermost dimensions of the output `tf.Tensor`.
  
      Returns:
        A `tf.Tensor` of shape `tf.shape(strings) + code_shape`.
      """
      strings = tf.convert_to_tensor(strings, dtype=tf.string)
      strings_shape = tf.shape(strings)
      symbols = tf.map_fn(
          lambda x: gen_ops.run_length_gamma_decode(x, code_shape),
          tf.reshape(strings, [-1]),
          fn_output_signature=tf.TensorSpec(
              [None] * self.coding_rank, dtype=tf.int32
          ),
      )
      symbols = tf.reshape(
          symbols, tf.concat([strings_shape, code_shape], 0)
      )
      return tf.cast(symbols, self.bottleneck_dtype)
  
file_path: compression/tensorflow_compression/python/entropy_models/power_law.py
imports: import tensorflow
  from tensorflow_compression.python.ops import gen_ops
  from tensorflow_compression.python.ops import round_ops
label_desc: Use image node_id 9 for calling the PowerLawEntropyModel obj's underlying member method code with example usage: obj.decompress(strings, code_shape) and returns: tf