docs: def start_span(self,
                     operation_name=None,
                     child_of=None,
                     references=None,
                     tags=None,
                     start_time=None,
                     ignore_active_span=False):
          "Taken from BasicTracer so we can override generate_id calls to ours"
  
          start_time = time.time() if start_time is None else start_time
  
          # See if we have a parent_ctx in `references`
          parent_ctx = None
          if child_of is not None:
              parent_ctx = (
                  child_of if isinstance(child_of, ot.SpanContext)
                  else child_of.context)
          elif references is not None and len(references) > 0:
              # TODO only the first reference is currently used
              parent_ctx = references[0].referenced_context
  
          # retrieve the active SpanContext
          if not ignore_active_span and parent_ctx is None:
              scope = self.scope_manager.active
              if scope is not None:
                  parent_ctx = scope.span.context
  
          # Assemble the child ctx
          gid = generate_id()
          ctx = SpanContext(span_id=gid)
          if parent_ctx is not None:
              if parent_ctx._baggage is not None:
                  ctx._baggage = parent_ctx._baggage.copy()
              ctx.trace_id = parent_ctx.trace_id
              ctx.sampled = parent_ctx.sampled
          else:
              ctx.trace_id = gid
              ctx.sampled = self.sampler.sampled(ctx.trace_id)
  
          # Tie it all together
          span = InstanaSpan(self,
                             operation_name=operation_name,
                             context=ctx,
                             parent_id=(None if parent_ctx is None else parent_ctx.span_id),
                             tags=tags,
                             start_time=start_time)
  
          if operation_name in self.recorder.exit_spans:
              self.__add_stack(span)
  
          elif operation_name in self.recorder.entry_spans:
              # For entry spans, add only a backtrace fingerprint
              self.__add_stack(span, limit=2)
  
          return span