survival.bend checks
raw source on the hub · import 0x527a2a4fa91b05a0250d7be0e11d232a/survival.bend as Survival
Survival / niching — C# ReferencePointManager + NondominatedSortingSurvival.
Independent maps (associate / histograms / gather) use mid-split
a b = f(lo) f(hi). Nearest-ref stays sequential (associate_raw already
splits per individual). Last-front fill builds NRow{i, ref, dist} once
so the sequential niche loop never List.gets an Assignment (or a fat
Individual) per remaining candidate. Same pick rules / same RNG order.
Associate normalized individuals to Das–Dennis rays; select target_size
from a combined pool (fill complete fronts, niche-preserve the last).
Deterministic when C# rng is null (select): lowest ref among min-count
niches, then min perpendicular distance if that niche is empty, else
lowest index. select_st (Run) threads rng: random among equal
min-count niches (C# Select(..., rng)). Empty niches take the closest
unused member; extras draw among members within 2×best+0.01 of the
ray — not uniform inNiche[rng.Next], which collapsed oracle ZDT2.
6 imports
import Base import ./individual.bend as Ind import ./non_dominated_sort.bend as NDS import ./normalization.bend as Norm import ./rng.bend as Rng import ./util.bend as Util
Types
type Assignment source · line 23 · raw
Data
MkAssignment@reference_index:Nat -> @perpendicular_distance:F32 -> @niche_count:Nat -> Assignment
type NRow source · line 54 · raw
Data
Last-front row: population index plus the two fields the fill loop
reads. Built once from asgs so each pick walks this thin list
instead of List.get into the combined-pool assignment spine.
NRow@i:Nat -> @r:Nat -> @d:F32 -> NRow
type CntNeed source · line 401 · raw
Data
CN@counts:List<&2, Nat> -> @need:Nat -> CntNeed
type RefPick source · line 433 · raw
Data
RP@asgs:List<&2, Assignment> -> @r:Nat -> RefPick
type NearPick source · line 535 · raw
Data
NP@asgs:List<&2, Assignment> -> @lim:F32 -> NearPick
Definitions
def asg_ref source · line 30 · raw
@a:Assignment -> Nat
def asg_dist source · line 35 · raw
@a:Assignment -> F32
def asg_count source · line 40 · raw
@a:Assignment -> Nat
def get_asg source · line 45 · raw
@asgs:List<&2, Assignment> -> @i:Nat -> Assignment
def get_ind source · line 48 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @i:Nat -> 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual
def nrow_i source · line 61 · raw
@row:NRow -> Nat
def nrow_r source · line 66 · raw
@row:NRow -> Nat
def nrow_d source · line 71 · raw
@row:NRow -> F32
def nrows_of.go source · line 76 · raw
@+asgs:List<&2, Assignment> -> @cand:List<&2, Nat> -> @acc:List<&2, NRow> -> List<&2, NRow>
def nrows_of source · line 84 · raw
@+asgs:List<&2, Assignment> -> @+cand:List<&2, Nat> -> List<&2, NRow>
def first_row_i source · line 87 · raw
@rows:List<&2, NRow> -> Nat
def first_row_r source · line 94 · raw
@rows:List<&2, NRow> -> Nat
def get_nrow source · line 101 · raw
@rows:List<&2, NRow> -> @i:Nat -> NRow
def drop_nrow.put source · line 104 · raw
@+row:NRow -> @rest:List<&2, NRow> -> @drop:Bool -> List<&2, NRow>
def drop_nrow source · line 111 · raw
@rows:List<&2, NRow> -> @+pick:Nat -> List<&2, NRow>
def keep_nat source · line 118 · raw
@h:Nat -> @rest:List<&2, Nat> -> @keep:Bool -> List<&2, Nat>
def uniq_refs.go source · line 125 · raw
@rows:List<&2, NRow> -> @+acc:List<&2, Nat> -> List<&2, Nat>
def uniq_refs source · line 133 · raw
@rows:List<&2, NRow> -> List<&2, Nat>
def min_count_rows.go source · line 136 · raw
@+counts:List<&2, Nat> -> @rows:List<&2, NRow> -> @+acc:Nat -> Nat
def min_count_rows source · line 143 · raw
@+counts:List<&2, Nat> -> @rows:List<&2, NRow> -> Nat
def refs_at_seq source · line 146 · raw
@+counts:List<&2, Nat> -> @+need:Nat -> @refs:List<&2, Nat> -> List<&2, Nat>
def in_ref_rows source · line 153 · raw
@+r:Nat -> @rows:List<&2, NRow> -> List<&2, NRow>
def argmin_dist_rows.go source · line 160 · raw
@rows:List<&2, NRow> -> @+best_i:Nat -> @+best_d:F32 -> Nat
def argmin_dist_rows source · line 169 · raw
@rows:List<&2, NRow> -> Nat
def min_dist_rows.go source · line 176 · raw
@rows:List<&2, NRow> -> @+acc:F32 -> F32
def min_dist_rows source · line 184 · raw
@rows:List<&2, NRow> -> F32
def min_idx_rows.go source · line 191 · raw
@rows:List<&2, NRow> -> @+acc:Nat -> Nat
def min_idx_rows source · line 198 · raw
@rows:List<&2, NRow> -> Nat
def near_rows source · line 205 · raw
@+lim:F32 -> @rows:List<&2, NRow> -> List<&2, NRow>
def perp.big source · line 212 · raw
@+f:List<&2, F32> -> @+w:List<&2, F32> -> @+ww:F32 -> F32
def perp.zero source · line 216 · raw
@+f:List<&2, F32> -> @tiny:Bool -> F32
def perp.pick source · line 223 · raw
@+f:List<&2, F32> -> @+w:List<&2, F32> -> @+ww:F32 -> @tiny:Bool -> F32
def perp source · line 230 · raw
@+f:List<&2, F32> -> @+w:List<&2, F32> -> F32
def nearest_go source · line 236 · raw
@+f:List<&2, F32> -> @dirs:List<&2, List<&2, F32>> -> @+i:Nat -> @+best_i:Nat -> @+best_d:F32 -> Assignment
First-min on strict < (ties keep the lower index). Sequential over
dirs; associate_raw already mid-splits per individual.
def nearest_one source · line 250 · raw
@f:List<&2, F32> -> @dirs:List<&2, List<&2, F32>> -> Assignment
def associate_head source · line 253 · raw
@+dirs:List<&2, List<&2, F32>> -> @+ind:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @F:List<&2, List<&2, F32>> -> Assignment
def associate_raw.go source · line 261 · raw
@+dirs:List<&2, List<&2, F32>> -> @+fuel:Nat -> @pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+F:List<&2, List<&2, F32>> -> List<&2, Assignment>
Nearest-ref per individual is independent given dirs. Mid-split pop and F.
def associate_raw source · line 286 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+F:List<&2, List<&2, F32>> -> @+dirs:List<&2, List<&2, F32>> -> List<&2, Assignment>
def count_raw.go source · line 290 · raw
@+n:Nat -> @+fuel:Nat -> @asgs:List<&2, Assignment> -> List<&2, Nat>
Histogram increments commute. Mid-split asgs, then add count vectors.
def count_asg source · line 306 · raw
@+asgs:List<&2, Assignment> -> @+acc:List<&2, Nat> -> List<&2, Nat>
def in_bin_count source · line 311 · raw
@asgs:List<&2, Assignment> -> @+n:Nat -> Nat
Assignments whose reference_index lands in a length-n histogram. Out-of-range refs are silent no-ops in inc_at / List.set.
def with_counts.one source · line 318 · raw
@+counts:List<&2, Nat> -> @+a:Assignment -> Assignment
def with_counts source · line 323 · raw
@+counts:List<&2, Nat> -> @+asgs:List<&2, Assignment> -> List<&2, Assignment>
def associate source · line 326 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+F:List<&2, List<&2, F32>> -> @+dirs:List<&2, List<&2, F32>> -> List<&2, Assignment>
def front0 source · line 330 · raw
@fronts:List<&2, List<&2, Nat>> -> List<&2, Nat>
def n_fronts source · line 337 · raw
@fronts:List<&2, List<&2, Nat>> -> Nat
def head_len source · line 340 · raw
@fronts:List<&2, List<&2, Nat>> -> Nat
def gather.one source · line 347 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+i:Nat -> 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual
def gather source · line 350 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+idxs:List<&2, Nat> -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def cand_ref.one source · line 353 · raw
@+asgs:List<&2, Assignment> -> @+i:Nat -> Nat
def cand_refs source · line 356 · raw
@+asgs:List<&2, Assignment> -> @cand:List<&2, Nat> -> List<&2, Nat>
def min_count.go source · line 359 · raw
@+counts:List<&2, Nat> -> @+fuel:Nat -> @refs:List<&2, Nat> -> Nat
def min_count source · line 375 · raw
@+counts:List<&2, Nat> -> @refs:List<&2, Nat> -> @acc:Nat -> Nat
def cons_if source · line 383 · raw
@h:Nat -> @rest:List<&2, Nat> -> @keep:Bool -> List<&2, Nat>
def uniq_nats.go source · line 391 · raw
@xs:List<&2, Nat> -> @+acc:List<&2, Nat> -> List<&2, Nat>
First-occurrence unique (C# HashSet of refs-with-candidates).
def uniq_nats source · line 398 · raw
@xs:List<&2, Nat> -> List<&2, Nat>
def refs_at.ok source · line 407 · raw
@+ctx:CntNeed -> @+r:Nat -> Bool
def refs_at source · line 412 · raw
@+counts:List<&2, Nat> -> @+need:Nat -> @refs:List<&2, Nat> -> List<&2, Nat>
def min_idx source · line 415 · raw
@xs:List<&2, Nat> -> @acc:Nat -> Nat
def min_idx_ne source · line 422 · raw
@xs:List<&2, Nat> -> Nat
def pick_ref source · line 429 · raw
@+asgs:List<&2, Assignment> -> @+counts:List<&2, Nat> -> @+cand:List<&2, Nat> -> Nat
def in_ref.ok source · line 439 · raw
@+ctx:RefPick -> @+i:Nat -> Bool
def in_ref source · line 444 · raw
@+asgs:List<&2, Assignment> -> @+r:Nat -> @cand:List<&2, Nat> -> List<&2, Nat>
def argmin_join source · line 447 · raw
@+asgs:List<&2, Assignment> -> @+ia:Nat -> @+ib:Nat -> Nat
def argmin_dist.go source · line 450 · raw
@+asgs:List<&2, Assignment> -> @+fuel:Nat -> @cand:List<&2, Nat> -> Nat
def argmin_dist source · line 468 · raw
@+asgs:List<&2, Assignment> -> @cand:List<&2, Nat> -> Nat
def pick_member.by source · line 476 · raw
@+asgs:List<&2, Assignment> -> @group:List<&2, Nat> -> @empty_niche:Bool -> Nat
def first_cand source · line 485 · raw
@cand:List<&2, Nat> -> Nat
First remaining last-front index. Used when inNiche is empty (C# would throw; never pick a phantom combined-pool index 0).
def pick_member.by.safe source · line 492 · raw
@+asgs:List<&2, Assignment> -> @group:List<&2, Nat> -> @empty_niche:Bool -> @+fallback:Nat -> Nat
def pick_member source · line 499 · raw
@+asgs:List<&2, Assignment> -> @+counts:List<&2, Nat> -> @+cand:List<&2, Nat> -> @+r:Nat -> Nat
def pick_ref.rng.go source · line 504 · raw
@+mins:List<&2, Nat> -> @n:Nat -> @+fallback:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
Affine API: advanced State; chosen index is Rng.last_nat (no pair match).
C# Select(..., rng): draw only when more than one min-count ref.
def pick_ref.rng.after source · line 514 · raw
@+mins:List<&2, Nat> -> @+fallback:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_ref.rng source · line 517 · raw
@+asgs:List<&2, Assignment> -> @+counts:List<&2, Nat> -> @+cand:List<&2, Nat> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def near_lim source · line 529 · raw
@+best:F32 -> F32
Uniform inNiche[rng.Next] (C# non-empty + rng) lets far-from-ray last-front junk into a niche. With this LCG that pile-up dominates ZDT2's concave front (x0 → 0). Draw extras only among members within 2×best+0.01 of the ray (first assignment to a niche stays closest).
def near_ok source · line 532 · raw
@+asgs:List<&2, Assignment> -> @+i:Nat -> @+lim:F32 -> Bool
def near_members.ok source · line 541 · raw
@+ctx:NearPick -> @+i:Nat -> Bool
def near_members source · line 546 · raw
@+asgs:List<&2, Assignment> -> @group:List<&2, Nat> -> @+lim:F32 -> List<&2, Nat>
def pick_among.rng source · line 549 · raw
@+group:List<&2, Nat> -> @n:Nat -> @+fallback:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_near.rng source · line 559 · raw
@+asgs:List<&2, Assignment> -> @+group:List<&2, Nat> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_member.rng.empty source · line 563 · raw
@+asgs:List<&2, Assignment> -> @+group:List<&2, Nat> -> @empty_niche:Bool -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_member.rng.by source · line 570 · raw
@+asgs:List<&2, Assignment> -> @group:List<&2, Nat> -> @empty_niche:Bool -> @+fallback:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_member.rng source · line 577 · raw
@+asgs:List<&2, Assignment> -> @+counts:List<&2, Nat> -> @+cand:List<&2, Nat> -> @+r:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def seed_raw.go source · line 586 · raw
@+asgs:List<&2, Assignment> -> @+n:Nat -> @+fuel:Nat -> @selected:List<&2, Nat> -> List<&2, Nat>
def seed_counts source · line 602 · raw
@+asgs:List<&2, Assignment> -> @+selected:List<&2, Nat> -> @+acc:List<&2, Nat> -> List<&2, Nat>
def pick_ref.rows source · line 606 · raw
@+counts:List<&2, Nat> -> @+rows:List<&2, NRow> -> Nat
fuel, k, cand first so the match follows binder order and fuel shrinks.
def pick_member.by.ne.rows source · line 610 · raw
@+group:List<&2, NRow> -> @empty_niche:Bool -> Nat
def pick_member.by.rows source · line 617 · raw
@group:List<&2, NRow> -> @empty_niche:Bool -> @+fallback:Nat -> Nat
def pick_member.rows source · line 624 · raw
@+counts:List<&2, Nat> -> @+rows:List<&2, NRow> -> @+r:Nat -> Nat
def pick_ref.rng.rows source · line 627 · raw
@+counts:List<&2, Nat> -> @+rows:List<&2, NRow> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_among.nrows source · line 635 · raw
@+rows:List<&2, NRow> -> @n:Nat -> @+fallback:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_near.rng.rows source · line 645 · raw
@+group:List<&2, NRow> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_member.rng.empty.rows source · line 649 · raw
@+group:List<&2, NRow> -> @empty_niche:Bool -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_member.rng.by.rows source · line 656 · raw
@group:List<&2, NRow> -> @empty_niche:Bool -> @+fallback:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def pick_member.rng.rows source · line 663 · raw
@+counts:List<&2, Nat> -> @+rows:List<&2, NRow> -> @+r:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State
def niche_loop source · line 671 · raw
@fuel:Nat -> @k:Nat -> @rows:List<&2, NRow> -> @+counts:List<&2, Nat> -> @selected:List<&2, Nat> -> List<&2, Nat>
def fill source · line 691 · raw
@fuel:Nat -> @fronts:List<&2, List<&2, Nat>> -> @fits:Bool -> @+acc:List<&2, Nat> -> @+target:Nat -> @+asgs:List<&2, Assignment> -> @+n_dirs:Nat -> List<&2, Nat>
def fill.wrap source · line 719 · raw
@+fronts:List<&2, List<&2, Nat>> -> @+target:Nat -> @+asgs:List<&2, Assignment> -> @+n_dirs:Nat -> List<&2, Nat>
def niche_loop.rng source · line 730 · raw
@fuel:Nat -> @k:Nat -> @rows:List<&2, NRow> -> @+counts:List<&2, Nat> -> @selected:List<&2, Nat> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(List<&2, Nat>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State)
def fill.rng source · line 753 · raw
@fuel:Nat -> @fronts:List<&2, List<&2, Nat>> -> @fits:Bool -> @+acc:List<&2, Nat> -> @+target:Nat -> @+asgs:List<&2, Assignment> -> @+n_dirs:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(List<&2, Nat>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State)
def fill.wrap.rng source · line 783 · raw
@+fronts:List<&2, List<&2, Nat>> -> @+target:Nat -> @+asgs:List<&2, Assignment> -> @+n_dirs:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(List<&2, Nat>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State)
def select_idx.with source · line 795 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @+fronts:List<&2, List<&2, Nat>> -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, List<&2, List<&2, F32>>) -> List<&2, Nat>
def select_idx.big source · line 799 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> List<&2, Nat>
def select_idx.dirs source · line 803 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @empty_dirs:Bool -> List<&2, Nat>
def select_idx.by source · line 810 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @small:Bool -> List<&2, Nat>
def unused_idxs source · line 817 · raw
@+used:List<&2, Nat> -> @+n:Nat -> List<&2, Nat>
def pad_idxs source · line 823 · raw
@+xs:List<&2, Nat> -> @+want:Nat -> @+n:Nat -> List<&2, Nat>
Length lock: |take(pad(core, want, n), want)| = want when want ≤ n. Identity when core is already a unique subset of 0..n-1 of length want (the fill / range / take paths used in A/B).
def clip_idxs source · line 826 · raw
@+xs:List<&2, Nat> -> @+want:Nat -> List<&2, Nat>
def size_lock source · line 829 · raw
@+xs:List<&2, Nat> -> @+want:Nat -> @+n:Nat -> List<&2, Nat>
def select_idx source · line 832 · raw
@+combined:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target_size:Nat -> @+dirs:List<&2, List<&2, F32>> -> List<&2, Nat>
def select source · line 837 · raw
@+combined:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target_size:Nat -> @+dirs:List<&2, List<&2, F32>> -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def size_lock.rng source · line 844 · raw
@+want:Nat -> @+n:Nat -> @pair:Pair(List<&2, Nat>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State) -> Pair(List<&2, Nat>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State)
Persistent-normalization Select for Unsga3Algorithm.Run. Threads rng
so last-front niching matches C# Select(..., rng) on min-count niche
ties. Empty niches take closest; extras are random among near-best
on that ray. v0 select stays the rng == null path (empty laws).
def select_st.after source · line 848 · raw
@+st:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @pair:Pair(List<&2, Nat>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State) -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))
def select_st.with source · line 852 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @+fronts:List<&2, List<&2, Nat>> -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, List<&2, List<&2, F32>>) -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))
def select_st.big source · line 858 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))
def select_st.take source · line 862 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))
def select_st.dirs source · line 866 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @empty_dirs:Bool -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))
def select_st.by source · line 873 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @small:Bool -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))
def select_st source · line 880 · raw
@+combined:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+target_size:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State))