                                (go (solver-loop solver out-chan abort-chan)))
             ::commands/abort (>!! abort-chan true)
             :default (warn "Unknown command:" command))
-          (recur (<! in-chan)))))))+          (recur (<! in-chan)))))))

(defn- calc-static-metrics
  [solver net iter-count]
  (let [train-e (get-train-entries solver)
        train-opts (assoc (:train-opts solver) :iter-count iter-count)
        [_ results] (trainer/train net train-e train-opts #(calc-metrics solver %))]
    (for [metrics-serie (transpose results)]
      (into {} (for [[i val] (map-indexed vector metrics-serie)]
                 [(inc i) val])))))

  (data/datasets (:dataset (:mutation-opts solver))))

(defn- get-train-entries [solver]
  (-> (:train (get-dataset solver))))

(defn- get-rand-train-entries [solver]
  (let [train-entries (-> (get-train-entries solver)
                          (shuffle)
                          (data/split-proportion (:train-frac (:mutation-opts solver)))
                          (first))
        validation-entries (get-train-entries solver)]
    [train-entries validation-entries]))

(defn get-test-entries
  [solver]
