code: def run_step(self):
      # Finally we get to the important bit: Each of these is a small change
      # to the floating point number that corresponds to a large change in
      # the lexical representation. Trying these ensures that our floating
      # point shrink can always move past these obstacles. In particular it
      # ensures we can always move to integer boundaries and shrink past a
      # change that would require shifting the exponent while not changing
      # the float value much.
  
      # First, try dropping precision bits by rounding the scaled value. We
      # try values ordered from least-precise (integer) to more precise, ie.
      # approximate lexicographical order. Once we find an acceptable shrink,
      # self.consider discards the remaining attempts early and skips test
      # invocation. The loop count sets max fractional bits to keep, and is a
      # compromise between completeness and performance.
  
      for p in range(10):
          scaled = (
              self.current * 2**p
          )  # note: self.current may change in loop
          for truncate in [math.floor, math.ceil]:
              self.consider(truncate(scaled) / 2**p)
  
      if self.consider(int(self.current)):
          self.debug("Just an integer now")
          self.delegate(Integer, convert_to=int, convert_from=float)
          return
  
      # Now try to minimize the top part of the fraction as an integer. This
      # basically splits the float as k + x with 0 <= x < 1 and minimizes
      # k as an integer, but without the precision issues that would have.
      m, n = self.current.as_integer_ratio()
      i, r = divmod(m, n)
      self.call_shrinker(
          Integer, i, lambda k: self.consider((k * n + r) / n)
      )
  
file_path: catboost/contrib/python/hypothesis/py3/hypothesis/internal/conjecture/shrinking/floats.py
imports: import math
  import sys
  from hypothesis.internal.conjecture.floats import float_to_lex
  from hypothesis.internal.conjecture.shrinking.common import Shrinker
  from hypothesis.internal.conjecture.shrinking.integer import Integer
label_desc: Use image node_id 6 for calling the Float obj's underlying member method code with example usage: obj.run_step() without return types