/usr/share/axiom-20170501/src/algebra/RDIST.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | )abbrev package RDIST RandomDistributions
++ Description:
++ This package exports random distributions
RandomDistributions(S) : SIG == CODE where
S : SetCategory
SIG ==> with
uniform : Set S -> (() -> S)
++ uniform(s) \undocumented
weighted : List Record(value: S, weight: Integer) -> (()->S)
++ weighted(l) \undocumented
rdHack1 : (Vector S,Vector Integer,Integer)->(()->S)
++ rdHack1(v,u,n) \undocumented
CODE ==> add
import RandomNumberSource()
weighted lvw ==
-- Collapse duplicates, adding weights.
t: Table(S, Integer) := table()
for r in lvw repeat
u := search(r.value,t)
w := (u case "failed" => 0; u::Integer)
t r.value := w + r.weight
-- Construct vectors of values and cumulative weights.
kl := keys t
n := (#kl)::NonNegativeInteger
n = 0 => error "Cannot select from empty set"
kv: Vector(S) := new(n, kl.0)
wv: Vector(Integer) := new(n, 0)
totwt: Integer := 0
for k in kl for i in 1..n repeat
kv.i := k
totwt:= totwt + t k
wv.i := totwt
-- Function to generate an integer and lookup.
rdHack1(kv, wv, totwt)
rdHack1(kv, wv, totwt) ==
w := randnum totwt
-- do binary search in wv
kv.1
uniform fset ==
l := members fset
n := #l
l.(randnum(n)+1)
|