{
  "hooks": [
    {
      "name": "hook_weighted_objective_norm_stress_norm_disp.py",
      "type": "weighted_objective",
      "description": "Combine normalized stress (70%) and displacement (30%)",
      "inputs": [
        "norm_stress",
        "norm_disp"
      ],
      "outputs": [
        "weighted_objective"
      ]
    },
    {
      "name": "hook_custom_safety_factor.py",
      "type": "custom_formula",
      "description": "Calculate safety factor",
      "inputs": [
        "max_stress",
        "yield_strength"
      ],
      "outputs": [
        "safety_factor"
      ]
    },
    {
      "name": "hook_compare_min_to_avg_ratio.py",
      "type": "comparison",
      "description": "Compare min force to average",
      "inputs": [
        "min_force",
        "avg_force"
      ],
      "outputs": [
        "min_to_avg_ratio"
      ]
    },
    {
      "name": "hook_constraint_yield_constraint.py",
      "type": "constraint_check",
      "description": "Check if stress is below yield",
      "inputs": [
        "max_stress",
        "yield_strength"
      ],
      "outputs": [
        "yield_constraint",
        "yield_constraint_satisfied",
        "yield_constraint_violation"
      ]
    }
  ]
}