class_docstr: Edmonds algorithm [1]_ for finding optimal branchings and spanning
  arborescences.
  
  This algorithm can find both minimum and maximum spanning arborescences and
  branchings.
  
  Notes
  -----
  While this algorithm can find a minimum branching, since it isn't required
  to be spanning, the minimum branching is always from the set of negative
  weight edges which is most likely the empty set for most graphs.
  
  References
  ----------
  .. [1] J. Edmonds, Optimum Branchings, Journal of Research of the National
         Bureau of Standards, 1967, Vol. 71B, p.233-240,
         https://archive.org/details/jresv71Bn4p233
code: def __init__(self, G, seed=None):
      self.G_original = G
  
      # Need to fix this. We need the whole tree.
      self.store = True
  
      # The final answer.
      self.edges = []
  
      # Since we will be creating graphs with new nodes, we need to make
      # sure that our node names do not conflict with the real node names.
      self.template = random_string(seed=seed) + "_{0}"
  
      import warnings
  
      msg = "Edmonds has been deprecated and will be removed in NetworkX 3.4. Please use the appropriate minimum or maximum branching or arborescence function directly."
      warnings.warn(msg, DeprecationWarning)
  
imports: import string
  from dataclasses import dataclass, field
  from enum import Enum
  from operator import itemgetter
  from queue import PriorityQueue
  import networkx
  from networkx.utils import py_random_state
  from .recognition import is_arborescence, is_branching
label_desc: Use image node_id 1 to create a new Edmonds object  with example: obj = Edmonds(G, seed)