~/bend-docscommunity

survival.bend checks

raw source on the hub · import 0xa2f9d6ef8c474468bf1de15ebe70c512/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

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.

type CntNeed source · line 401 · raw

Data

type RefPick source · line 433 · raw

Data

type NearPick source · line 535 · raw

Data

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, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @i:Nat -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/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, 0xa2f9d6ef8c474468bf1de15ebe70c512/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, 0xa2f9d6ef8c474468bf1de15ebe70c512/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, 0xa2f9d6ef8c474468bf1de15ebe70c512/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, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+i:Nat -> 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual

def gather source · line 350 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+idxs:List<&2, Nat> -> List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_ref.rng source · line 517 · raw

@+asgs:List<&2, Assignment> -> @+counts:List<&2, Nat> -> @+cand:List<&2, Nat> -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_near.rng source · line 559 · raw

@+asgs:List<&2, Assignment> -> @+group:List<&2, Nat> -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_member.rng.empty source · line 563 · raw

@+asgs:List<&2, Assignment> -> @+group:List<&2, Nat> -> @empty_niche:Bool -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_among.nrows source · line 635 · raw

@+rows:List<&2, NRow> -> @n:Nat -> @+fallback:Nat -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_near.rng.rows source · line 645 · raw

@+group:List<&2, NRow> -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_member.rng.empty.rows source · line 649 · raw

@+group:List<&2, NRow> -> @empty_niche:Bool -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_member.rng.by.rows source · line 656 · raw

@group:List<&2, NRow> -> @empty_niche:Bool -> @+fallback:Nat -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State

def pick_member.rng.rows source · line 663 · raw

@+counts:List<&2, Nat> -> @+rows:List<&2, NRow> -> @+r:Nat -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(List<&2, Nat>, 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(List<&2, Nat>, 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(List<&2, Nat>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State)

def select_idx.with source · line 795 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @+fronts:List<&2, List<&2, Nat>> -> @pair:Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, List<&2, List<&2, F32>>) -> List<&2, Nat>

def select_idx.big source · line 799 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> List<&2, Nat>

def select_idx.dirs source · line 803 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/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, 0xa2f9d6ef8c474468bf1de15ebe70c512/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, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target_size:Nat -> @+dirs:List<&2, List<&2, F32>> -> List<&2, Nat>

def select source · line 837 · raw

@+combined:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target_size:Nat -> @+dirs:List<&2, List<&2, F32>> -> List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>

def size_lock.rng source · line 844 · raw

@+want:Nat -> @+n:Nat -> @pair:Pair(List<&2, Nat>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State) -> Pair(List<&2, Nat>, 0xa2f9d6ef8c474468bf1de15ebe70c512/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:0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State -> @+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @pair:Pair(List<&2, Nat>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State) -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))

def select_st.with source · line 852 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @+fronts:List<&2, List<&2, Nat>> -> @pair:Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, List<&2, List<&2, F32>>) -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))

def select_st.big source · line 858 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))

def select_st.take source · line 862 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @state:0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))

def select_st.dirs source · line 866 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> @empty_dirs:Bool -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))

def select_st.by source · line 873 · raw

@+pop:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> @small:Bool -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))

def select_st source · line 880 · raw

@+combined:List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual> -> @+target_size:Nat -> @+dirs:List<&2, List<&2, F32>> -> @state:0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State -> @rng:0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State -> Pair(0xa2f9d6ef8c474468bf1de15ebe70c512/normalization.State, Pair(List<&2, 0xa2f9d6ef8c474468bf1de15ebe70c512/individual.Individual>, 0xa2f9d6ef8c474468bf1de15ebe70c512/rng.State))