C LAYERNORM — layer normalisation, double-precision, single row. C Computes the per-row mean and variance, normalises, then applies C the learnable affine transform (gamma, beta). C C Reference: J. L. Ba, J. R. Kiros, G. E. Hinton, "Layer C Normalization", arXiv:1607.06450 (2016). Standard normalisation C layer in transformer architectures. C C Hand-written reference for the Dark Factory's Phase 3 inference C kernel ladder, 2026-05-24. Public domain. C C Mathematical definition (layer normalisation, per row of width D): C mean = sum over I of X(I) / D C var = sum over I of (X(I) - mean)^2 / D C Y(I) = (X(I) - mean) / sqrt(var + EPS) * GAMMA(I) + BETA(I) C for I in 1..D. C C Shapes: C X is a vector of length D (input row) C GAMMA is a vector of length D (scale) C BETA is a vector of length D (shift) C Y is a vector of length D (output row) C EPS is a small positive scalar (numerical stability) C C Two passes over X: first for the mean, second for the variance. C Then a single normalisation pass writes Y. SUBROUTINE LAYERNORM (D, X, GAMMA, BETA, EPS, Y) C Inputs: C D — vector length (positive) C X — D-element input row C GAMMA — D-element scale parameters C BETA — D-element shift parameters C EPS — variance-stabilisation epsilon (positive) C Output: C Y — D-element normalised, scaled and shifted row INTEGER D DOUBLE PRECISION X(*), GAMMA(*), BETA(*), Y(*) DOUBLE PRECISION EPS INTEGER I DOUBLE PRECISION SUM, MEAN, DIFF, VAR, INV_STD, DD DD = DBLE(D) C Mean pass. SUM = 0.0D0 DO 10 I = 1, D SUM = SUM + X(I) 10 CONTINUE MEAN = SUM / DD C Variance pass. SUM = 0.0D0 DO 20 I = 1, D DIFF = X(I) - MEAN SUM = SUM + DIFF * DIFF 20 CONTINUE VAR = SUM / DD INV_STD = 1.0D0 / SQRT(VAR + EPS) C Normalisation, scale, shift pass. DO 30 I = 1, D Y(I) = (X(I) - MEAN) * INV_STD * GAMMA(I) + BETA(I) 30 CONTINUE RETURN END