docs: def _render_op(
              self, identifier, hs=None, dagger=False, args=None, superop=False):
          """Render an operator
  
          Args:
              identifier (str or SymbolicLabelBase): The identifier (name/symbol)
                  of the operator. May include a subscript, denoted by '_'.
              hs (qnet.algebra.hilbert_space_algebra.HilbertSpace): The Hilbert
                  space in which the operator is defined
              dagger (bool): Whether the operator should be daggered
              args (list): A list of expressions that will be rendered with
                  :meth:`doprint`, joined with commas, enclosed in parenthesis
              superop (bool): Whether the operator is a super-operator
          """
          hs_label = None
          if hs is not None and self._settings['show_hs_label']:
              hs_label = self._render_hs_label(hs)
          name, total_subscript, total_superscript, args_str \
              = self._split_op(identifier, hs_label, dagger, args)
          res = name
          if len(total_subscript) > 0:
              res += "_" + total_subscript
          if len(total_superscript) > 0:
              res += "^" + total_superscript
          if len(args_str) > 0:
              res += args_str
          return res