docs: def _visit_nodes(self, node_id, dist, fringe, check_cutoff, no_call=False,
                       **kw):
          """
          Visits a node, updating workflow, seen, and fringe..
  
          :param node_id:
              Node id to visit.
          :type node_id: str
  
          :param dist:
              Distance from the starting node.
          :type dist: float, int
  
          :param fringe:
              Heapq of closest available nodes.
          :type fringe: list[(float | int, bool, (str, Dispatcher)]
  
          :param check_cutoff:
              Check the cutoff limit.
          :type check_cutoff: (int | float) -> bool
  
          :param no_call:
              If True data node estimation function is not used.
          :type no_call: bool, optional
  
          :return:
              False if all dispatcher targets have been reached, otherwise True.
          :rtype: bool
          """
  
          # Namespace shortcuts.
          wf_rm_edge, wf_has_edge = self._wf_remove_edge, self.workflow.has_edge
          edge_weight, nodes = self._edge_length, self.nodes
  
          self.dist[node_id] = dist  # Set minimum dist.
  
          self._visited.add(node_id)  # Update visited nodes.
  
          if not self._set_node_output(node_id, no_call, **kw):  # Set output.
              # Some error occurs or inputs are not in the function domain.
              return True
  
          if self.check_targets(node_id):  # Check if the targets are satisfied.
              return False  # Stop loop.
  
          for w, e_data in self.dmap[node_id].items():
              if not wf_has_edge(node_id, w):  # Check wildcard option.
                  continue
  
              node = nodes[w]  # Get node attributes.
  
              vw_d = dist + edge_weight(e_data, node)  # Evaluate dist.
  
              if check_cutoff(vw_d):  # Check the cutoff limit.
                  wf_rm_edge(node_id, w)  # Remove edge that cannot be see.
                  continue
  
              if node['type'] == 'dispatcher':
                  self._set_sub_dsp_node_input(
                      node_id, w, fringe, check_cutoff, no_call, vw_d)
  
              else:  # See the node.
                  self._see_node(w, fringe, vw_d)
  
          return True