class_docstr: This mixin provides an ability to call a custom hook when depth of the
  binary expression reaches certain threshold.
  
  Subclasses must specify value for `bin_depth_threshold`.
  
  By default it creates a variable and assigns it the result of the incoming
  expression interpretation.
  
  Subclasses may override this default behaviour.
code: def _pre_interpret_hook(self, expr, bin_depth=0, **kwargs):
      if not isinstance(expr, ast.BinExpr):
          return super()._pre_interpret_hook(expr, **kwargs)
  
      # We track depth of the binary expressions and call a hook if it
      # reaches specified threshold.
      if bin_depth >= self.bin_depth_threshold:
          return self.bin_depth_threshold_hook(expr, **kwargs), kwargs
  
      kwargs["bin_depth"] = bin_depth + 1
      return super()._pre_interpret_hook(expr, **kwargs)
  
imports: import math
  import sys
  from collections import namedtuple
  from m2cgen import ast
  from m2cgen.interpreters.interpreter import BaseToCodeInterpreter
label_desc: Use image node_id 1 for calling the BinExpressionDepthTrackingMixin obj's underlying member method code with example usage: obj._pre_interpret_hook(expr, bin_depth) and returns: super, super, self,  kwargs