       (print-simple code w))))
 
 
-;; === Factory multimethod for creating DSymbol instances
-
-(defmulti dsymbol class)
+;; === Factories for DSymbol instances
 
 (defn- parse-numbers [str]
   (when (and str (< 0 (count (s/trim str))))

          ds
          (range (count spins))))

(defmethod dsymbol String [code]
  (let [parts (-> code s/trim
                (s/replace #"^<" "") (s/replace #">$" "") (s/split #":"))
        [dims gluings spins] (vec (if (re-matches #"\d+\.\d+" (first parts))

                (parse-number-lists spins))]
    d-sym))

(defn- ds-from-ds [ds]
  (let [emap (zipmap (elements ds) (range 1 (inc (size ds))))
        imap (zipmap (indices ds) (range (inc (dim ds))))
        gluings (for [i (indices ds), D (orbit-reps ds [i])]
