tiny.pluck.bdd.WeightedSampler
Defined in bdd.
API (10)
Actions
Public operations.
Fields and members
Public fields and members.
Source
Source: lib/pluck/src/bdd.zig:3059
zig
pub const WeightedSampler = struct { allocator: Allocator, manager: *Manager, bdd: Bdd, params: *const WmcParams, cache: WmcDenseCache, var_bdds: []Bdd, total_wmc: f64, pub fn init( allocator: Allocator, manager: *Manager, bdd: Bdd, params: *const WmcParams, ) !WeightedSampler { const var_bdds = try allocator.alloc(Bdd, manager.numVars()); errdefer allocator.free(var_bdds); for (var_bdds, 0..) |*var_bdd, label| { var_bdd.* = try manager.getOrInsert(Node.init(@intCast(label), Bdd.FALSE, Bdd.TRUE)); } var cache = try WmcDenseCache.init(allocator, manager.nodes.items.len); errdefer cache.deinit(); const total_wmc = wmcHelper(manager, bdd, params, &cache); return WeightedSampler{ .allocator = allocator, .manager = manager, .bdd = bdd, .params = params, .cache = cache, .var_bdds = var_bdds, .total_wmc = total_wmc, }; } pub fn deinit(self: *WeightedSampler) void { self.cache.deinit(); self.allocator.free(self.var_bdds); } pub fn sample(self: *WeightedSampler, rng: std.Random) Allocator.Error!WeightedSampleResult { if (self.bdd.isTrue()) { return WeightedSampleResult{ .sample = Bdd.TRUE, .probability = 1.0, }; } if (self.bdd.isFalse() or self.total_wmc == 0.0) { return WeightedSampleResult{ .sample = Bdd.FALSE, .probability = 0.0, }; } return try weightedSampleFromCache(self.manager, self.bdd, self.params, rng, 1.0, &self.cache, self.var_bdds); }};Audit
| Definitions | 4 |
|---|---|
| Public names | 4 |
| Members | 7 |
| Version | 26.7.0 |
| Revision | daab053ee433 |