code: def generate_algebra_inverse_sample(vlist, ops, solve_ops, min_depth,
                                      max_depth):
    
    side = random.randrange(2)
    left_depth = random.randrange(min_depth if side else 0, max_depth + 1)
    right_depth = random.randrange(min_depth if not side else 0, max_depth + 1)
  
    var_index = random.randrange(len(vlist))
    var = vlist[var_index]
    consts = vlist[:var_index] + vlist[var_index + 1:]
  
    left = random_expr_with_required_var(left_depth, var
                                         if side else None, consts, ops)
    right = random_expr_with_required_var(right_depth, var
                                          if not side else None, consts, ops)
  
    left_str = str(left)
    right_str = str(right)
    target = str(algebra_inverse_solve(left, right, var, solve_ops))
    sample = "%s:%s=%s" % (var, left_str, right_str)
    return sample, target
docs: Randomly generate an algebra inverse dataset sample.
  
    Given an input equation and variable, produce the expression equal to the
    variable.
  
    Args:
      vlist: Variable list. List of chars that can be used in the expression.
      ops: List of ExprOp instances. The allowed operators for the expression.
      solve_ops: See `solve_ops` documentation in `algebra_inverse_solve`.
      min_depth: Expression trees will not have a smaller depth than this. 0 means
          there is just a variable. 1 means there is one operation.
      max_depth: Expression trees will not have a larger depth than this. To make
          all trees have the same depth, set this equal to `min_depth`.
  
    Returns:
      sample: String representation of the input. Will be of the form
          'solve_var:left_side=right_side'.
      target: String representation of the solution.