Skip to content

Commit e246071

Browse files
committed
Version 3.0.0 - Updates to Clojure 1.6 and lint fixes
1 parent 85d5353 commit e246071

File tree

10 files changed

+79
-72
lines changed

10 files changed

+79
-72
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ pom.xml
55
/target/
66
.lein-deps-sum
77
.lein-failures
8+
.nrepl*

README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
For [Leiningen](https://github.com/technomancy/leiningen):
1010

1111
```clojure
12-
[bigml/sampling "2.1.1"]
12+
[bigml/sampling "3.0.0"]
1313
```
1414

1515
## Overview
@@ -76,16 +76,16 @@ Setting the `:seed` parameter allows the sample order to be recreated.
7676

7777
```clojure
7878
test> (simple/sample (range 5) :seed 7)
79-
(1 3 2 0 4)
79+
(2 1 3 4 0)
8080
test> (simple/sample (range 5) :seed 7)
81-
(1 3 2 0 4)
81+
(2 1 3 4 0)
8282
```
8383

8484
Any value that's hashable is valid as a seed:
8585

8686
```clojure
8787
test> (simple/sample (range 5) :seed :foo)
88-
(2 1 3 0 4)
88+
(1 0 3 2 4)
8989
```
9090

9191
The underlying random number generator may also be selected with the
@@ -99,9 +99,9 @@ The default is `:lcg`.
9999

100100
```clojure
101101
test> (simple/sample (range 5) :seed 7 :generator :lcg)
102-
(1 3 2 0 4)
102+
(2 1 3 4 0)
103103
test> (simple/sample (range 5) :seed 7 :generator :twister)
104-
(1 2 0 3 4)
104+
(4 3 0 1 2)
105105
```
106106

107107
### Weighted Simple Sampling
@@ -175,7 +175,7 @@ Both `reservoir/sample` and `reservoir/create` support the `:replace`,
175175

176176
```clojure
177177
test> (reservoir/sample (range 10) 5 :replace true :seed 1 :weigh identity)
178-
(9 7 5 5 8)
178+
(7 2 4 5 1)
179179
```
180180

181181
One caveat is that samples for reservoirs using `:weigh` won't be in a
@@ -255,7 +255,7 @@ As elsewhere, `stream/sample` supports `:replace`, `:seed`, and
255255

256256
```clojure
257257
test> (stream/sample (range) 5 10 :replace true :seed 2)
258-
(2 3 6 7 7)
258+
(0 0 4 6 7)
259259
```
260260

261261
### Out-of-bag Items
@@ -428,7 +428,7 @@ An example:
428428
```clojure
429429
test> (stream/multi-reduce (range) [+ 0 20 30 :seed 3]
430430
[+ 0 20 30 :seed 4])
431-
(269 291)
431+
(273 330)
432432
```
433433

434434
## License

project.clj

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
(defproject bigml/sampling "2.1.1"
1+
(defproject bigml/sampling "3.0.0"
22
:description "Random Sampling in Clojure"
33
:url "https://github.com/bigmlcom/sampling"
44
:license {:name "Apache License, Version 2.0"
55
:url "http://www.apache.org/licenses/LICENSE-2.0"}
6-
:dependencies [[org.clojure/clojure "1.4.0"]
7-
[incanter/parallelcolt "0.9.4"]
8-
[org.clojure/data.finger-tree "0.0.1"]]
6+
:aliases {"lint" ["do" "check," "eastwood"]
7+
"distcheck" ["do" "clean," "lint," "test"]}
8+
:profiles {:dev {:plugins [[jonase/eastwood "0.1.4"]]}}
9+
:dependencies [[org.clojure/clojure "1.6.0"]
10+
[org.clojure/data.finger-tree "0.0.2"]
11+
[incanter/parallelcolt "0.9.4"]]
912
:aot [bigml.sampling.reservoir.mergeable])

src/bigml/sampling/random.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
;; Copyright 2013 BigML
1+
;; Copyright 2013, 2014 BigML
22
;; Licensed under the Apache License, Version 2.0
33
;; http://www.apache.org/licenses/LICENSE-2.0
44

@@ -7,7 +7,7 @@
77
(:import (cern.jet.random.tdouble.engine MersenneTwister64)
88
(java.util Random)))
99

10-
(defn- make-mersenne-rng [seed]
10+
(defn- make-mersenne-rng [^long seed]
1111
(let [m (MersenneTwister64. seed)]
1212
(proxy [java.util.Random] []
1313
(nextInt

src/bigml/sampling/reservoir/efraimidis.clj

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,23 +79,24 @@
7979
[_ i]
8080
(and (instance? Reservoir i)
8181
(= (into [] reservoir)
82-
(into [] (.reservoir i)))
83-
(= res-size (.res-size i))
84-
(= seed (.seed i))
85-
(= gen (.gen i))
86-
(= weigh (.weigh i))))
82+
(into [] (.reservoir ^Reservoir i)))
83+
(= res-size (.res-size ^Reservoir i))
84+
(= seed (.seed ^Reservoir i))
85+
(= gen (.gen ^Reservoir i))
86+
(= weigh (.weigh ^Reservoir i))))
8787
clojure.lang.ISeq
8888
(first [_] (:item (first reservoir)))
8989
(more [_] (Reservoir. (rest reservoir) res-size seed gen weigh nil 0 0 mdata))
9090
(next [_] (if-let [r (next reservoir)]
9191
(Reservoir. r res-size seed gen weigh nil 0 0 mdata)))
9292
MergeableReservoir
9393
(mergeReservoir [_ i]
94-
(let [reservoir (into reservoir (.reservoir i))]
95-
(Reservoir. (nthnext reservoir (max (- (count reservoir) res-size) 0))
94+
(let [reservoir (into reservoir (.reservoir ^Reservoir i))]
95+
(Reservoir. (->> (nthnext reservoir (max (- (count reservoir) res-size) 0))
96+
(into (empty reservoir)))
9697
res-size seed gen weigh r
97-
(+ wt (.wt i))
98-
(+ jmp (.jmp i))
98+
(+ wt (.wt ^Reservoir i))
99+
(+ jmp (.jmp ^Reservoir i))
99100
mdata)))
100101
CountedSetReservoir
101102
(getCountedSet [_] reservoir)
@@ -129,25 +130,25 @@
129130
(empty [_]
130131
(ReplacementReservoir. (init-replacement-reservoir res-size seed gen weigh)
131132
res-size seed gen weigh mdata))
132-
(equiv
133-
[_ i]
133+
(equiv [_ i]
134134
(and (instance? ReplacementReservoir i)
135-
(= reservoir (.reservoir i))
136-
(= res-size (.res-size i))
137-
(= seed (.seed i))
138-
(= gen (.gen i))
139-
(= weigh (.weigh i))))
135+
(= reservoir (.reservoir ^ReplacementReservoir i))
136+
(= res-size (.res-size ^ReplacementReservoir i))
137+
(= seed (.seed ^ReplacementReservoir i))
138+
(= gen (.gen ^ReplacementReservoir i))
139+
(= weigh (.weigh ^ReplacementReservoir i))))
140140
clojure.lang.ISeq
141141
(first [_] (ffirst reservoir))
142142
(more [_] (ReplacementReservoir. (rest reservoir) res-size seed gen weigh mdata))
143143
(next [_] (when-let [r (next reservoir)]
144144
(ReplacementReservoir. r res-size seed gen weigh mdata)))
145145
MergeableReservoir
146146
(mergeReservoir [_ i]
147-
(ReplacementReservoir.
148-
(vec (take res-size (sort-by #(:k (first (.getCountedSet %))) >
149-
(concat reservoir (.reservoir i)))))
150-
res-size seed gen weigh mdata))
147+
(let [r (->> (concat reservoir (.reservoir ^ReplacementReservoir i))
148+
(sort-by #(:k (first (.getCountedSet ^Reservoir %))) >)
149+
(take res-size)
150+
(vec))]
151+
(ReplacementReservoir. r res-size seed gen weigh mdata)))
151152
java.util.List
152153
(iterator [_]
153154
(let [r (atom reservoir)]

src/bigml/sampling/reservoir/insertion.clj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
;; Copyright 2013 BigML
1+
;; Copyright 2013, 2014 BigML
22
;; Licensed under the Apache License, Version 2.0
33
;; http://www.apache.org/licenses/LICENSE-2.0
44

@@ -42,7 +42,6 @@
4242
:generator generator})))
4343

4444
(defmethod insert ::without-replacement [reservoir val]
45-
[reservoir val]
4645
(let [{:keys [size insert-count seed generator indices]}
4746
(meta reservoir)
4847
insert-count (inc insert-count)
@@ -71,10 +70,13 @@
7170
(empty [_] (Reservoir. (with-meta [] (assoc (meta reservoir)
7271
:insert-count 0))
7372
mdata))
74-
(equiv [_ i] (and (instance? Reservoir i) (= reservoir (.reservoir i))))
73+
(equiv [_ i]
74+
(and (instance? Reservoir i)
75+
(= reservoir (.reservoir ^Reservoir i))))
7576
MergeableReservoir
7677
(mergeReservoir [_ i]
77-
(let [{:keys [insert-count size seed] :as rmeta} (meta reservoir)
78+
(let [^Reservoir i i
79+
{:keys [insert-count size seed] :as rmeta} (meta reservoir)
7880
weight-items (fn [r]
7981
(let [ic (:insert-count (meta r))]
8082
(map #(list % ic) r)))

test/bigml/sampling/test/occurrence.clj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
;; Copyright 2013 BigML
1+
;; Copyright 2013, 2014 BigML
22
;; Licensed under the Apache License, Version 2.0
33
;; http://www.apache.org/licenses/LICENSE-2.0
44

55
(ns bigml.sampling.test.occurrence
6-
(:use clojure.test)
7-
(:require (bigml.sampling [occurrence :as occurrence])))
6+
(:require [clojure.test :refer :all]
7+
(bigml.sampling [occurrence :as occurrence])))
88

99
(def big-result
1010
1498231660179642550080525374062985229379154060073454416056804436265250417504978421344703666672011193783194306251922106632531575096104465752579970958417306283423558722428981480592122380206679550814874547016793880384420005011964284022150602938812288536154567998961655336231440060094535026560416077739589623596000N)
1111

1212
(deftest roll
13-
(= 4 (occurrence/roll 50 10 :seed 12345))
14-
(= 1 (occurrence/roll 50 10 :seed 654321)))
13+
(is (= 7 (occurrence/roll 50 10 :seed 12345)))
14+
(is (= 5 (occurrence/roll 50 10 :seed 654321))))
1515

1616
(deftest cumulative-prob
1717
(is (= (occurrence/cumulative-probabilities 4 2)

test/bigml/sampling/test/reservoir.clj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
;; Copyright 2013 BigML
1+
;; Copyright 2013, 2014 BigML
22
;; Licensed under the Apache License, Version 2.0
33
;; http://www.apache.org/licenses/LICENSE-2.0
44

55
(ns bigml.sampling.test.reservoir
6-
(:use clojure.test
7-
bigml.sampling.test.util)
8-
(:require (bigml.sampling [reservoir :as reservoir])))
6+
(:require [clojure.test :refer :all]
7+
[bigml.sampling.test.util :refer :all]
8+
(bigml.sampling [reservoir :as reservoir])))
99

1010
(deftest sample
1111
(is (about-eq (reduce + (reservoir/sample (range 1000) 500))
@@ -21,15 +21,15 @@
2121

2222
(deftest regression
2323
(is (= (vec (reservoir/sample (range 20) 10 :seed 7))
24-
[8 0 14 16 13 3 4 18 6 5]))
24+
[18 14 3 7 12 10 1 2 17 6]))
2525
(is (= (vec (reservoir/sample (range 20) 10 :seed 7 :replace true))
26-
[19 8 11 5 1 10 15 1 0 15]))
26+
[3 17 2 14 12 3 3 8 3 14]))
2727
(is (= (vec (reservoir/sample (range 20) 10 :seed 7
2828
:implementation :insertion))
29-
[9 16 11 2 8 19 17 6 15 10]))
29+
[11 13 16 10 9 19 17 7 6 14]))
3030
(is (= (vec (reservoir/sample (range 20) 10 :seed 7 :replace true
3131
:implementation :insertion))
32-
[13 10 9 16 7 2 15 17 4 14])))
32+
[3 12 17 4 12 11 17 5 5 15])))
3333

3434
(deftest weighting
3535
(let [result (reservoir/sample [:heads :tails] 4000

test/bigml/sampling/test/simple.clj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
;; http://www.apache.org/licenses/LICENSE-2.0
44

55
(ns bigml.sampling.test.simple
6-
(:use clojure.test
7-
bigml.sampling.test.util)
8-
(:require (bigml.sampling [simple :as simple]
6+
(:require [clojure.test :refer :all]
7+
[bigml.sampling.test.util :refer :all]
8+
(bigml.sampling [simple :as simple]
99
[random :as random])))
1010

1111
(deftest sample
@@ -18,11 +18,11 @@
1818

1919
(deftest regression
2020
(is (= (take 10 (simple/sample (range 20) :seed :foo))
21-
'(7 3 9 6 10 4 2 8 5 13)))
21+
'(11 3 15 17 7 8 10 6 18 14)))
2222
(is (= (take 10 (simple/sample (range 20) :seed 7))
23-
'(16 13 17 12 9 4 18 7 14 19)))
23+
'(12 1 9 13 18 15 7 0 17 2)))
2424
(is (= (take 10 (simple/sample (range 20) :seed 7 :replace true))
25-
'(16 4 5 4 0 14 8 9 10 14))))
25+
'(12 10 13 7 19 15 13 17 1 8))))
2626

2727
(defn- make-weighted-data [& {:keys [seed]}]
2828
(let [rnd (random/create :seed seed)]
@@ -31,22 +31,22 @@
3131
(deftest weighted-regression
3232
(let [data (take 10 (make-weighted-data :seed :foo))]
3333
(is (= (map first (simple/sample data :seed :bar :weigh second))
34-
'(9 0 8 3 1 4 7 6 5 2)))
34+
'(2 9 1 4 8 5 7 6 3 0)))
3535
(is (= (take 10 (map first (simple/sample data
3636
:seed :bar
3737
:weigh second
3838
:replace true)))
39-
'(9 6 9 4 0 8 4 1 3 0)))))
39+
'(2 1 1 4 8 4 8 1 9 4)))))
4040

4141
(deftest twister-regression
4242
(is (= (take 10 (simple/sample (range 20)
4343
:seed 7
4444
:generator :twister))
45-
'(5 9 6 3 10 17 12 18 8 2)))
45+
'(16 10 15 5 7 18 17 3 8 2)))
4646
(is (= (take 10 (simple/sample (range 20) :seed 7
4747
:generator :twister
4848
:replace true))
49-
'(5 8 4 0 7 17 9 17 0 6))))
49+
'(16 10 14 3 4 18 15 17 1 12))))
5050

5151
(deftest zero-weight
5252
(is (= {:heads 100}

test/bigml/sampling/test/stream.clj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
;; Copyright 2013 BigML
1+
;; Copyright 2013, 2014 BigML
22
;; Licensed under the Apache License, Version 2.0
33
;; http://www.apache.org/licenses/LICENSE-2.0
44

55
(ns bigml.sampling.test.stream
6-
(:use clojure.test
7-
bigml.sampling.test.util)
8-
(:require (bigml.sampling [stream :as stream])))
6+
(:require [clojure.test :refer :all]
7+
[bigml.sampling.test.util :refer :all]
8+
(bigml.sampling [stream :as stream])))
99

1010
(deftest sample
1111
(is (about-eq (reduce + (stream/sample (range 1000) 500 1000))
@@ -19,19 +19,19 @@
1919

2020
(deftest regression
2121
(is (= (stream/sample (range) 10 20 :seed 7)
22-
'(3 4 5 7 10 12 14 15 16 17)))
22+
'(1 2 6 7 9 10 12 13 15 19)))
2323
(is (= (stream/sample (range) 10 20 :seed 7 :out-of-bag true)
24-
'(0 1 2 6 8 9 11 13 18 19)))
24+
'(0 3 4 5 8 11 14 16 17 18)))
2525
(is (= (stream/sample (range) 10 20 :seed 7 :replace true)
26-
'(0 1 3 4 7 9 11 16 18 19)))
26+
'(2 2 8 8 9 11 13 13 15 17)))
2727
(is (= (stream/sample (range) 10 20 :seed 7 :replace true :out-of-bag true)
28-
'(2 5 6 8 10 12 13 14 15 17)))
28+
'(0 1 3 4 5 6 7 10 12 14 16 18 19)))
2929
(is (= (stream/sample (range 20) 10 20 :seed 7 :replace true :rate true)
30-
'(0 1 3 4 7 9 9 10 11 16 19)))
30+
'(2 2 8 8 9 11 13 13 15 17 18 19 19)))
3131
(is (= (stream/sample (range 20) 10 20
3232
:seed 7 :replace true
3333
:rate true :out-of-bag true)
34-
'(2 5 6 8 12 13 14 15 17 18)))
34+
'(0 1 3 4 5 6 7 10 12 14 16)))
3535
(let [sum1 (atom 0)
3636
sum2 (atom 0)]
3737
(stream/multi-sample (range)

0 commit comments

Comments
 (0)