code: def positive(
      lower: Optional[float] = None, base: Optional[str] = None
  ) -> tfp.bijectors.Bijector:
      """
      Returns a positive bijector (a reversible transformation from real to positive numbers).
  
      :param lower: overrides default lower bound
          (if None, defaults to gpflow.config.default_positive_minimum())
      :param base: overrides base positive bijector
          (if None, defaults to gpflow.config.default_positive_bijector())
      :returns: a bijector instance
      """
      bijector = (
          base
          if base is not None
          else config.default_positive_bijector()
      )
      bijector = config.positive_bijector_type_map()[bijector.lower()]()
  
      lower_bound = (
          lower
          if lower is not None
          else config.default_positive_minimum()
      )
  
      if lower_bound != 0.0:
          shift = tfp.bijectors.Shift(to_default_float(lower_bound))
          bijector = tfp.bijectors.Chain(
              [shift, bijector]
          )  # from unconstrained to constrained
      return bijector
  
file_path: GPflow/gpflow/utilities/bijectors.py
imports: from typing import Optional
  import tensorflow
  import tensorflow_probability
  from check_shapes import check_shapes
  from ..None import config
  from .misc import to_default_float
label_desc: Use image node_id 1 for calling a global function with example usage: positive(lower, base) and returns: bijector