                                             incidence, attribute-derivation,
                                             context-attribute-closure)])
 (require '[conexp.contrib.algorithms.close-by-one :as cbo])
+(require '[clojure.core.async :refer (thread >!! <!! chan close!)])
 (import '[java.util BitSet List ArrayList])
 (import '[java.util.concurrent SynchronousQueue])
 

          empty-down-up (bitwise-object-derivation incidence-matrix
                                                   object-count
                                                   attribute-count
                                                   empty-down)]
      (map (fn [pair]
             [(to-hashset object-vector (first pair))
              (to-hashset attribute-vector (second pair))])
           (generate (vychodil-generate-from object-count
                                             attribute-count
                                             incidence-matrix
                                             rows
                                             empty-down
                                             empty-down-up
                                             0))))))


;;; In-Close (:in-close)

          (.set D j false))))
    [C, D]))

(defn vychodil-generate-from
  [output, object-count, attribute-count, incidence-matrix, rows, ^BitSet A, ^BitSet B, y]
  (>!! output [A, B])
  (when (and (not (== attribute-count (.cardinality B)))
             (< (int y) (int attribute-count)))
    (doseq [j (range (int y) (int attribute-count))
