[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-cuopt-debugging":3,"mdc--88mxit-key":43,"related-repo-nvidia-cuopt-debugging":1316,"related-org-nvidia-cuopt-debugging":1405},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":38,"sourceUrl":41,"mdContent":42},"cuopt-debugging","debug NVIDIA cuOpt optimization problems","Troubleshoot cuOpt LP\u002FMILP problems including errors, wrong results, infeasible solutions, performance issues, and status codes. Use when the user says something isn't working, gets unexpected results, or needs help diagnosing issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Mathematics","mathematics","tag",{"name":17,"slug":18,"type":15},"Optimization","optimization",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Debugging","debugging",462,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fcuopt-examples","2026-07-23T05:43:32.51428",null,81,[29,30,31,32,33,18,34,35,36,37],"combinatorial-optimization","gpu","linear-programming","mixed-integer-programming","operations-research","optimization-algorithms","route-optimization","traveling-salesman-problem","vehicle-routing-problem",{"repoUrl":24,"stars":23,"forks":27,"topics":39,"description":40},[29,30,31,32,33,18,34,35,36,37],"NVIDIA cuOpt examples for decision optimization","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fcuopt-examples\u002Ftree\u002FHEAD\u002Fcuopt-agent\u002Fskills\u002Fmax-supply\u002Fcuopt-debugging","---\nname: cuopt-debugging\ndescription: Troubleshoot cuOpt LP\u002FMILP problems including errors, wrong results, infeasible solutions, performance issues, and status codes. Use when the user says something isn't working, gets unexpected results, or needs help diagnosing issues.\n---\n\n# cuOpt Debugging Skill\n\nDiagnose and fix issues with cuOpt LP\u002FMILP solutions, errors, and performance.\n\n## Before You Start: Required Questions\n\n**Ask these to understand the problem:**\n\n1. **What's the symptom?**\n   - Error message?\n   - Wrong\u002Funexpected results?\n   - Empty solution?\n   - Performance too slow?\n\n2. **What's the status?**\n   - `problem.Status.name` — what value does it show?\n\n3. **Can you share?**\n   - The error message (exact text)\n   - The code that produces it\n   - Problem size (variables, constraints)\n\n## Quick Diagnosis by Symptom\n\n### \"Solution is empty\u002FNone but status looks OK\"\n\n**Most common cause: Wrong status string case**\n\n```python\n# ❌ WRONG - \"OPTIMAL\" never matches, silently fails\nif problem.Status.name == \"OPTIMAL\":\n    print(problem.ObjValue)  # Never runs!\n\n# ✅ CORRECT - use PascalCase\nif problem.Status.name in [\"Optimal\", \"FeasibleFound\"]:\n    print(problem.ObjValue)\n```\n\n**Diagnostic code:**\n```python\nprint(f\"Actual status: '{problem.Status.name}'\")\nprint(f\"Matches 'Optimal': {problem.Status.name == 'Optimal'}\")\nprint(f\"Matches 'OPTIMAL': {problem.Status.name == 'OPTIMAL'}\")\n```\n\n### \"Objective value is wrong\u002Fzero\"\n\n**Check if variables are actually used:**\n```python\nfor var in problem.getVariables():\n    print(f\"{var.VariableName} = {var.Value}\")\nprint(f\"Objective: {problem.ObjValue}\")\n\n# Or with direct variable references\nfor var in [x, y, z]:\n    print(f\"{var.VariableName}: {var.getValue()}\")\n```\n\n**Common causes:**\n- Constraints too restrictive (all zeros is feasible)\n- Objective coefficients have wrong sign\n- Wrong variable in objective\n\n### \"Infeasible\" status\n\n**For LP\u002FMILP:**\n```python\nif problem.Status.name in [\"PrimalInfeasible\", \"Infeasible\"]:\n    print(\"Problem has no feasible solution\")\n    # Review constraints for conflicts\n    for c in problem.getConstraints():\n        print(f\"{c.ConstraintName}\")\n```\n\n**Common causes:**\n- Conflicting constraints (x \u003C= 5 AND x >= 10)\n- Bounds too tight\n- Missing a \"slack\" variable for soft constraints\n\n### \"Integer variable has fractional value\"\n\n```python\n# Check how variable was defined\nint_var = problem.addVariable(\n    lb=0, ub=10,\n    vtype=INTEGER,  # Must be INTEGER, not CONTINUOUS\n    name=\"count\"\n)\n\n# Also check if status is actually optimal\nif problem.Status.name == \"FeasibleFound\":\n    print(\"Warning: not fully optimal, may have fractional intermediate values\")\n```\n\n### \"Unbounded\" status\n\n**Problem has no finite optimum:**\n```python\nif problem.Status.name in [\"DualInfeasible\", \"Unbounded\"]:\n    print(\"Problem is unbounded - objective can improve infinitely\")\n```\n\n**Common causes:**\n- Missing variable upper\u002Flower bounds\n- Constraint direction wrong (>= instead of \u003C=)\n- Missing constraints\n\n### \"Maximum recursion depth exceeded\" when building expressions\n\nBuilding large objectives or constraints with many chained `+` operations can hit Python recursion limits. Use **LinearExpression** instead:\n\n```python\nfrom cuopt.linear_programming.problem import LinearExpression\n\n# Instead of: expr = c1*v1 + c2*v2 + ... + cn*vn (many terms)\nvars_list = [v1, v2, v3, ...]\ncoeffs_list = [c1, c2, c3, ...]\nexpr = LinearExpression(vars_list, coeffs_list, constant=0.0)\nproblem.setObjective(expr, sense=MINIMIZE)\n```\n\nSee the LP\u002FMILP \"Building large expressions\" section and reference models in the project for examples.\n\n### OutOfMemoryError\n\n**Check problem size:**\n```python\nprint(f\"Variables: {len(problem.getVariables())}\")\nprint(f\"Constraints: {len(problem.getConstraints())}\")\n```\n\n**Mitigations:**\n- Reduce problem size\n- Use sparse constraint matrix\n- Set time limit to get partial solution\n\n## Status Code Reference\n\n### LP Status Values\n| Status | Meaning |\n|--------|---------|\n| `Optimal` | Found optimal solution |\n| `PrimalFeasible` | Found feasible but may not be optimal |\n| `PrimalInfeasible` | No feasible solution exists |\n| `DualInfeasible` | Problem is unbounded |\n| `TimeLimit` | Stopped due to time limit |\n| `IterationLimit` | Stopped due to iteration limit |\n| `NumericalError` | Numerical issues encountered |\n| `NoTermination` | Solver didn't converge |\n\n### MILP Status Values\n| Status | Meaning |\n|--------|---------|\n| `Optimal` | Found optimal solution |\n| `FeasibleFound` | Found feasible, within gap tolerance |\n| `Infeasible` | No feasible solution exists |\n| `Unbounded` | Problem is unbounded |\n| `TimeLimit` | Stopped due to time limit |\n| `NoTermination` | No solution found yet |\n\n## Performance Debugging\n\n### Slow LP\u002FMILP Solve\n\n```python\nsettings = SolverSettings()\nsettings.set_parameter(\"log_to_console\", 1)  # See progress\nsettings.set_parameter(\"time_limit\", 60)      # Don't wait forever\n\n# For MILP, accept good-enough solution\nsettings.set_parameter(\"mip_relative_gap\", 0.05)  # 5% gap\n```\n\n### Check Solve Time\n\n```python\nproblem.solve(settings)\nprint(f\"Solve time: {problem.SolveTime:.2f} seconds\")\n```\n\n## Diagnostic Checklist\n\n```\n□ Status checked with correct case (PascalCase)?\n□ All variables have correct vtype (INTEGER vs CONTINUOUS)?\n□ Constraint directions correct (\u003C= vs >= vs ==)?\n□ Objective sense correct (MINIMIZE vs MAXIMIZE)?\n□ Variable bounds specified where needed?\n```\n\n## Diagnostic Code Snippets\n\nSee [resources\u002Fdiagnostic_snippets.md](resources\u002Fdiagnostic_snippets.md) for copy-paste diagnostic code:\n- Status checking\n- Variable inspection\n- Constraint analysis\n- Memory and performance checks\n\n## Interpreting Dual Values & Reduced Costs\n\nWhen an LP\u002FQP solve returns dual values and you need the *decision* read — which constraint is the binding bottleneck, what relaxing it is worth, and which unused option is the closest near-miss — see [resources\u002Finterpreting_duals.md](resources\u002Finterpreting_duals.md). (Integer models \u002F MILP — and quadratic *constraints* — return no usable duals; that reference covers the fallback.)\n\n## When to Escalate\n\nFile a GitHub issue if:\n- Reproducible bug with minimal example\n- Include: cuOpt version, CUDA version, error message, minimal repro code\n",{"data":44,"body":45},{"name":4,"description":6},{"type":46,"children":47},"root",[48,57,63,70,79,165,171,178,186,263,271,302,308,316,378,386,404,410,418,465,472,490,496,585,591,599,622,629,647,653,673,735,740,746,754,777,785,803,809,815,979,985,1100,1106,1112,1166,1172,1195,1201,1211,1217,1230,1253,1259,1286,1292,1297,1310],{"type":49,"tag":50,"props":51,"children":53},"element","h1",{"id":52},"cuopt-debugging-skill",[54],{"type":55,"value":56},"text","cuOpt Debugging Skill",{"type":49,"tag":58,"props":59,"children":60},"p",{},[61],{"type":55,"value":62},"Diagnose and fix issues with cuOpt LP\u002FMILP solutions, errors, and performance.",{"type":49,"tag":64,"props":65,"children":67},"h2",{"id":66},"before-you-start-required-questions",[68],{"type":55,"value":69},"Before You Start: Required Questions",{"type":49,"tag":58,"props":71,"children":72},{},[73],{"type":49,"tag":74,"props":75,"children":76},"strong",{},[77],{"type":55,"value":78},"Ask these to understand the problem:",{"type":49,"tag":80,"props":81,"children":82},"ol",{},[83,116,139],{"type":49,"tag":84,"props":85,"children":86},"li",{},[87,92],{"type":49,"tag":74,"props":88,"children":89},{},[90],{"type":55,"value":91},"What's the symptom?",{"type":49,"tag":93,"props":94,"children":95},"ul",{},[96,101,106,111],{"type":49,"tag":84,"props":97,"children":98},{},[99],{"type":55,"value":100},"Error message?",{"type":49,"tag":84,"props":102,"children":103},{},[104],{"type":55,"value":105},"Wrong\u002Funexpected results?",{"type":49,"tag":84,"props":107,"children":108},{},[109],{"type":55,"value":110},"Empty solution?",{"type":49,"tag":84,"props":112,"children":113},{},[114],{"type":55,"value":115},"Performance too slow?",{"type":49,"tag":84,"props":117,"children":118},{},[119,124],{"type":49,"tag":74,"props":120,"children":121},{},[122],{"type":55,"value":123},"What's the status?",{"type":49,"tag":93,"props":125,"children":126},{},[127],{"type":49,"tag":84,"props":128,"children":129},{},[130,137],{"type":49,"tag":131,"props":132,"children":134},"code",{"className":133},[],[135],{"type":55,"value":136},"problem.Status.name",{"type":55,"value":138}," — what value does it show?",{"type":49,"tag":84,"props":140,"children":141},{},[142,147],{"type":49,"tag":74,"props":143,"children":144},{},[145],{"type":55,"value":146},"Can you share?",{"type":49,"tag":93,"props":148,"children":149},{},[150,155,160],{"type":49,"tag":84,"props":151,"children":152},{},[153],{"type":55,"value":154},"The error message (exact text)",{"type":49,"tag":84,"props":156,"children":157},{},[158],{"type":55,"value":159},"The code that produces it",{"type":49,"tag":84,"props":161,"children":162},{},[163],{"type":55,"value":164},"Problem size (variables, constraints)",{"type":49,"tag":64,"props":166,"children":168},{"id":167},"quick-diagnosis-by-symptom",[169],{"type":55,"value":170},"Quick Diagnosis by Symptom",{"type":49,"tag":172,"props":173,"children":175},"h3",{"id":174},"solution-is-emptynone-but-status-looks-ok",[176],{"type":55,"value":177},"\"Solution is empty\u002FNone but status looks OK\"",{"type":49,"tag":58,"props":179,"children":180},{},[181],{"type":49,"tag":74,"props":182,"children":183},{},[184],{"type":55,"value":185},"Most common cause: Wrong status string case",{"type":49,"tag":187,"props":188,"children":193},"pre",{"className":189,"code":190,"language":191,"meta":192,"style":192},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# ❌ WRONG - \"OPTIMAL\" never matches, silently fails\nif problem.Status.name == \"OPTIMAL\":\n    print(problem.ObjValue)  # Never runs!\n\n# ✅ CORRECT - use PascalCase\nif problem.Status.name in [\"Optimal\", \"FeasibleFound\"]:\n    print(problem.ObjValue)\n","python","",[194],{"type":49,"tag":131,"props":195,"children":196},{"__ignoreMap":192},[197,208,217,226,236,245,254],{"type":49,"tag":198,"props":199,"children":202},"span",{"class":200,"line":201},"line",1,[203],{"type":49,"tag":198,"props":204,"children":205},{},[206],{"type":55,"value":207},"# ❌ WRONG - \"OPTIMAL\" never matches, silently fails\n",{"type":49,"tag":198,"props":209,"children":211},{"class":200,"line":210},2,[212],{"type":49,"tag":198,"props":213,"children":214},{},[215],{"type":55,"value":216},"if problem.Status.name == \"OPTIMAL\":\n",{"type":49,"tag":198,"props":218,"children":220},{"class":200,"line":219},3,[221],{"type":49,"tag":198,"props":222,"children":223},{},[224],{"type":55,"value":225},"    print(problem.ObjValue)  # Never runs!\n",{"type":49,"tag":198,"props":227,"children":229},{"class":200,"line":228},4,[230],{"type":49,"tag":198,"props":231,"children":233},{"emptyLinePlaceholder":232},true,[234],{"type":55,"value":235},"\n",{"type":49,"tag":198,"props":237,"children":239},{"class":200,"line":238},5,[240],{"type":49,"tag":198,"props":241,"children":242},{},[243],{"type":55,"value":244},"# ✅ CORRECT - use PascalCase\n",{"type":49,"tag":198,"props":246,"children":248},{"class":200,"line":247},6,[249],{"type":49,"tag":198,"props":250,"children":251},{},[252],{"type":55,"value":253},"if problem.Status.name in [\"Optimal\", \"FeasibleFound\"]:\n",{"type":49,"tag":198,"props":255,"children":257},{"class":200,"line":256},7,[258],{"type":49,"tag":198,"props":259,"children":260},{},[261],{"type":55,"value":262},"    print(problem.ObjValue)\n",{"type":49,"tag":58,"props":264,"children":265},{},[266],{"type":49,"tag":74,"props":267,"children":268},{},[269],{"type":55,"value":270},"Diagnostic code:",{"type":49,"tag":187,"props":272,"children":274},{"className":189,"code":273,"language":191,"meta":192,"style":192},"print(f\"Actual status: '{problem.Status.name}'\")\nprint(f\"Matches 'Optimal': {problem.Status.name == 'Optimal'}\")\nprint(f\"Matches 'OPTIMAL': {problem.Status.name == 'OPTIMAL'}\")\n",[275],{"type":49,"tag":131,"props":276,"children":277},{"__ignoreMap":192},[278,286,294],{"type":49,"tag":198,"props":279,"children":280},{"class":200,"line":201},[281],{"type":49,"tag":198,"props":282,"children":283},{},[284],{"type":55,"value":285},"print(f\"Actual status: '{problem.Status.name}'\")\n",{"type":49,"tag":198,"props":287,"children":288},{"class":200,"line":210},[289],{"type":49,"tag":198,"props":290,"children":291},{},[292],{"type":55,"value":293},"print(f\"Matches 'Optimal': {problem.Status.name == 'Optimal'}\")\n",{"type":49,"tag":198,"props":295,"children":296},{"class":200,"line":219},[297],{"type":49,"tag":198,"props":298,"children":299},{},[300],{"type":55,"value":301},"print(f\"Matches 'OPTIMAL': {problem.Status.name == 'OPTIMAL'}\")\n",{"type":49,"tag":172,"props":303,"children":305},{"id":304},"objective-value-is-wrongzero",[306],{"type":55,"value":307},"\"Objective value is wrong\u002Fzero\"",{"type":49,"tag":58,"props":309,"children":310},{},[311],{"type":49,"tag":74,"props":312,"children":313},{},[314],{"type":55,"value":315},"Check if variables are actually used:",{"type":49,"tag":187,"props":317,"children":319},{"className":189,"code":318,"language":191,"meta":192,"style":192},"for var in problem.getVariables():\n    print(f\"{var.VariableName} = {var.Value}\")\nprint(f\"Objective: {problem.ObjValue}\")\n\n# Or with direct variable references\nfor var in [x, y, z]:\n    print(f\"{var.VariableName}: {var.getValue()}\")\n",[320],{"type":49,"tag":131,"props":321,"children":322},{"__ignoreMap":192},[323,331,339,347,354,362,370],{"type":49,"tag":198,"props":324,"children":325},{"class":200,"line":201},[326],{"type":49,"tag":198,"props":327,"children":328},{},[329],{"type":55,"value":330},"for var in problem.getVariables():\n",{"type":49,"tag":198,"props":332,"children":333},{"class":200,"line":210},[334],{"type":49,"tag":198,"props":335,"children":336},{},[337],{"type":55,"value":338},"    print(f\"{var.VariableName} = {var.Value}\")\n",{"type":49,"tag":198,"props":340,"children":341},{"class":200,"line":219},[342],{"type":49,"tag":198,"props":343,"children":344},{},[345],{"type":55,"value":346},"print(f\"Objective: {problem.ObjValue}\")\n",{"type":49,"tag":198,"props":348,"children":349},{"class":200,"line":228},[350],{"type":49,"tag":198,"props":351,"children":352},{"emptyLinePlaceholder":232},[353],{"type":55,"value":235},{"type":49,"tag":198,"props":355,"children":356},{"class":200,"line":238},[357],{"type":49,"tag":198,"props":358,"children":359},{},[360],{"type":55,"value":361},"# Or with direct variable references\n",{"type":49,"tag":198,"props":363,"children":364},{"class":200,"line":247},[365],{"type":49,"tag":198,"props":366,"children":367},{},[368],{"type":55,"value":369},"for var in [x, y, z]:\n",{"type":49,"tag":198,"props":371,"children":372},{"class":200,"line":256},[373],{"type":49,"tag":198,"props":374,"children":375},{},[376],{"type":55,"value":377},"    print(f\"{var.VariableName}: {var.getValue()}\")\n",{"type":49,"tag":58,"props":379,"children":380},{},[381],{"type":49,"tag":74,"props":382,"children":383},{},[384],{"type":55,"value":385},"Common causes:",{"type":49,"tag":93,"props":387,"children":388},{},[389,394,399],{"type":49,"tag":84,"props":390,"children":391},{},[392],{"type":55,"value":393},"Constraints too restrictive (all zeros is feasible)",{"type":49,"tag":84,"props":395,"children":396},{},[397],{"type":55,"value":398},"Objective coefficients have wrong sign",{"type":49,"tag":84,"props":400,"children":401},{},[402],{"type":55,"value":403},"Wrong variable in objective",{"type":49,"tag":172,"props":405,"children":407},{"id":406},"infeasible-status",[408],{"type":55,"value":409},"\"Infeasible\" status",{"type":49,"tag":58,"props":411,"children":412},{},[413],{"type":49,"tag":74,"props":414,"children":415},{},[416],{"type":55,"value":417},"For LP\u002FMILP:",{"type":49,"tag":187,"props":419,"children":421},{"className":189,"code":420,"language":191,"meta":192,"style":192},"if problem.Status.name in [\"PrimalInfeasible\", \"Infeasible\"]:\n    print(\"Problem has no feasible solution\")\n    # Review constraints for conflicts\n    for c in problem.getConstraints():\n        print(f\"{c.ConstraintName}\")\n",[422],{"type":49,"tag":131,"props":423,"children":424},{"__ignoreMap":192},[425,433,441,449,457],{"type":49,"tag":198,"props":426,"children":427},{"class":200,"line":201},[428],{"type":49,"tag":198,"props":429,"children":430},{},[431],{"type":55,"value":432},"if problem.Status.name in [\"PrimalInfeasible\", \"Infeasible\"]:\n",{"type":49,"tag":198,"props":434,"children":435},{"class":200,"line":210},[436],{"type":49,"tag":198,"props":437,"children":438},{},[439],{"type":55,"value":440},"    print(\"Problem has no feasible solution\")\n",{"type":49,"tag":198,"props":442,"children":443},{"class":200,"line":219},[444],{"type":49,"tag":198,"props":445,"children":446},{},[447],{"type":55,"value":448},"    # Review constraints for conflicts\n",{"type":49,"tag":198,"props":450,"children":451},{"class":200,"line":228},[452],{"type":49,"tag":198,"props":453,"children":454},{},[455],{"type":55,"value":456},"    for c in problem.getConstraints():\n",{"type":49,"tag":198,"props":458,"children":459},{"class":200,"line":238},[460],{"type":49,"tag":198,"props":461,"children":462},{},[463],{"type":55,"value":464},"        print(f\"{c.ConstraintName}\")\n",{"type":49,"tag":58,"props":466,"children":467},{},[468],{"type":49,"tag":74,"props":469,"children":470},{},[471],{"type":55,"value":385},{"type":49,"tag":93,"props":473,"children":474},{},[475,480,485],{"type":49,"tag":84,"props":476,"children":477},{},[478],{"type":55,"value":479},"Conflicting constraints (x \u003C= 5 AND x >= 10)",{"type":49,"tag":84,"props":481,"children":482},{},[483],{"type":55,"value":484},"Bounds too tight",{"type":49,"tag":84,"props":486,"children":487},{},[488],{"type":55,"value":489},"Missing a \"slack\" variable for soft constraints",{"type":49,"tag":172,"props":491,"children":493},{"id":492},"integer-variable-has-fractional-value",[494],{"type":55,"value":495},"\"Integer variable has fractional value\"",{"type":49,"tag":187,"props":497,"children":499},{"className":189,"code":498,"language":191,"meta":192,"style":192},"# Check how variable was defined\nint_var = problem.addVariable(\n    lb=0, ub=10,\n    vtype=INTEGER,  # Must be INTEGER, not CONTINUOUS\n    name=\"count\"\n)\n\n# Also check if status is actually optimal\nif problem.Status.name == \"FeasibleFound\":\n    print(\"Warning: not fully optimal, may have fractional intermediate values\")\n",[500],{"type":49,"tag":131,"props":501,"children":502},{"__ignoreMap":192},[503,511,519,527,535,543,551,558,567,576],{"type":49,"tag":198,"props":504,"children":505},{"class":200,"line":201},[506],{"type":49,"tag":198,"props":507,"children":508},{},[509],{"type":55,"value":510},"# Check how variable was defined\n",{"type":49,"tag":198,"props":512,"children":513},{"class":200,"line":210},[514],{"type":49,"tag":198,"props":515,"children":516},{},[517],{"type":55,"value":518},"int_var = problem.addVariable(\n",{"type":49,"tag":198,"props":520,"children":521},{"class":200,"line":219},[522],{"type":49,"tag":198,"props":523,"children":524},{},[525],{"type":55,"value":526},"    lb=0, ub=10,\n",{"type":49,"tag":198,"props":528,"children":529},{"class":200,"line":228},[530],{"type":49,"tag":198,"props":531,"children":532},{},[533],{"type":55,"value":534},"    vtype=INTEGER,  # Must be INTEGER, not CONTINUOUS\n",{"type":49,"tag":198,"props":536,"children":537},{"class":200,"line":238},[538],{"type":49,"tag":198,"props":539,"children":540},{},[541],{"type":55,"value":542},"    name=\"count\"\n",{"type":49,"tag":198,"props":544,"children":545},{"class":200,"line":247},[546],{"type":49,"tag":198,"props":547,"children":548},{},[549],{"type":55,"value":550},")\n",{"type":49,"tag":198,"props":552,"children":553},{"class":200,"line":256},[554],{"type":49,"tag":198,"props":555,"children":556},{"emptyLinePlaceholder":232},[557],{"type":55,"value":235},{"type":49,"tag":198,"props":559,"children":561},{"class":200,"line":560},8,[562],{"type":49,"tag":198,"props":563,"children":564},{},[565],{"type":55,"value":566},"# Also check if status is actually optimal\n",{"type":49,"tag":198,"props":568,"children":570},{"class":200,"line":569},9,[571],{"type":49,"tag":198,"props":572,"children":573},{},[574],{"type":55,"value":575},"if problem.Status.name == \"FeasibleFound\":\n",{"type":49,"tag":198,"props":577,"children":579},{"class":200,"line":578},10,[580],{"type":49,"tag":198,"props":581,"children":582},{},[583],{"type":55,"value":584},"    print(\"Warning: not fully optimal, may have fractional intermediate values\")\n",{"type":49,"tag":172,"props":586,"children":588},{"id":587},"unbounded-status",[589],{"type":55,"value":590},"\"Unbounded\" status",{"type":49,"tag":58,"props":592,"children":593},{},[594],{"type":49,"tag":74,"props":595,"children":596},{},[597],{"type":55,"value":598},"Problem has no finite optimum:",{"type":49,"tag":187,"props":600,"children":602},{"className":189,"code":601,"language":191,"meta":192,"style":192},"if problem.Status.name in [\"DualInfeasible\", \"Unbounded\"]:\n    print(\"Problem is unbounded - objective can improve infinitely\")\n",[603],{"type":49,"tag":131,"props":604,"children":605},{"__ignoreMap":192},[606,614],{"type":49,"tag":198,"props":607,"children":608},{"class":200,"line":201},[609],{"type":49,"tag":198,"props":610,"children":611},{},[612],{"type":55,"value":613},"if problem.Status.name in [\"DualInfeasible\", \"Unbounded\"]:\n",{"type":49,"tag":198,"props":615,"children":616},{"class":200,"line":210},[617],{"type":49,"tag":198,"props":618,"children":619},{},[620],{"type":55,"value":621},"    print(\"Problem is unbounded - objective can improve infinitely\")\n",{"type":49,"tag":58,"props":623,"children":624},{},[625],{"type":49,"tag":74,"props":626,"children":627},{},[628],{"type":55,"value":385},{"type":49,"tag":93,"props":630,"children":631},{},[632,637,642],{"type":49,"tag":84,"props":633,"children":634},{},[635],{"type":55,"value":636},"Missing variable upper\u002Flower bounds",{"type":49,"tag":84,"props":638,"children":639},{},[640],{"type":55,"value":641},"Constraint direction wrong (>= instead of \u003C=)",{"type":49,"tag":84,"props":643,"children":644},{},[645],{"type":55,"value":646},"Missing constraints",{"type":49,"tag":172,"props":648,"children":650},{"id":649},"maximum-recursion-depth-exceeded-when-building-expressions",[651],{"type":55,"value":652},"\"Maximum recursion depth exceeded\" when building expressions",{"type":49,"tag":58,"props":654,"children":655},{},[656,658,664,666,671],{"type":55,"value":657},"Building large objectives or constraints with many chained ",{"type":49,"tag":131,"props":659,"children":661},{"className":660},[],[662],{"type":55,"value":663},"+",{"type":55,"value":665}," operations can hit Python recursion limits. Use ",{"type":49,"tag":74,"props":667,"children":668},{},[669],{"type":55,"value":670},"LinearExpression",{"type":55,"value":672}," instead:",{"type":49,"tag":187,"props":674,"children":676},{"className":189,"code":675,"language":191,"meta":192,"style":192},"from cuopt.linear_programming.problem import LinearExpression\n\n# Instead of: expr = c1*v1 + c2*v2 + ... + cn*vn (many terms)\nvars_list = [v1, v2, v3, ...]\ncoeffs_list = [c1, c2, c3, ...]\nexpr = LinearExpression(vars_list, coeffs_list, constant=0.0)\nproblem.setObjective(expr, sense=MINIMIZE)\n",[677],{"type":49,"tag":131,"props":678,"children":679},{"__ignoreMap":192},[680,688,695,703,711,719,727],{"type":49,"tag":198,"props":681,"children":682},{"class":200,"line":201},[683],{"type":49,"tag":198,"props":684,"children":685},{},[686],{"type":55,"value":687},"from cuopt.linear_programming.problem import LinearExpression\n",{"type":49,"tag":198,"props":689,"children":690},{"class":200,"line":210},[691],{"type":49,"tag":198,"props":692,"children":693},{"emptyLinePlaceholder":232},[694],{"type":55,"value":235},{"type":49,"tag":198,"props":696,"children":697},{"class":200,"line":219},[698],{"type":49,"tag":198,"props":699,"children":700},{},[701],{"type":55,"value":702},"# Instead of: expr = c1*v1 + c2*v2 + ... + cn*vn (many terms)\n",{"type":49,"tag":198,"props":704,"children":705},{"class":200,"line":228},[706],{"type":49,"tag":198,"props":707,"children":708},{},[709],{"type":55,"value":710},"vars_list = [v1, v2, v3, ...]\n",{"type":49,"tag":198,"props":712,"children":713},{"class":200,"line":238},[714],{"type":49,"tag":198,"props":715,"children":716},{},[717],{"type":55,"value":718},"coeffs_list = [c1, c2, c3, ...]\n",{"type":49,"tag":198,"props":720,"children":721},{"class":200,"line":247},[722],{"type":49,"tag":198,"props":723,"children":724},{},[725],{"type":55,"value":726},"expr = LinearExpression(vars_list, coeffs_list, constant=0.0)\n",{"type":49,"tag":198,"props":728,"children":729},{"class":200,"line":256},[730],{"type":49,"tag":198,"props":731,"children":732},{},[733],{"type":55,"value":734},"problem.setObjective(expr, sense=MINIMIZE)\n",{"type":49,"tag":58,"props":736,"children":737},{},[738],{"type":55,"value":739},"See the LP\u002FMILP \"Building large expressions\" section and reference models in the project for examples.",{"type":49,"tag":172,"props":741,"children":743},{"id":742},"outofmemoryerror",[744],{"type":55,"value":745},"OutOfMemoryError",{"type":49,"tag":58,"props":747,"children":748},{},[749],{"type":49,"tag":74,"props":750,"children":751},{},[752],{"type":55,"value":753},"Check problem size:",{"type":49,"tag":187,"props":755,"children":757},{"className":189,"code":756,"language":191,"meta":192,"style":192},"print(f\"Variables: {len(problem.getVariables())}\")\nprint(f\"Constraints: {len(problem.getConstraints())}\")\n",[758],{"type":49,"tag":131,"props":759,"children":760},{"__ignoreMap":192},[761,769],{"type":49,"tag":198,"props":762,"children":763},{"class":200,"line":201},[764],{"type":49,"tag":198,"props":765,"children":766},{},[767],{"type":55,"value":768},"print(f\"Variables: {len(problem.getVariables())}\")\n",{"type":49,"tag":198,"props":770,"children":771},{"class":200,"line":210},[772],{"type":49,"tag":198,"props":773,"children":774},{},[775],{"type":55,"value":776},"print(f\"Constraints: {len(problem.getConstraints())}\")\n",{"type":49,"tag":58,"props":778,"children":779},{},[780],{"type":49,"tag":74,"props":781,"children":782},{},[783],{"type":55,"value":784},"Mitigations:",{"type":49,"tag":93,"props":786,"children":787},{},[788,793,798],{"type":49,"tag":84,"props":789,"children":790},{},[791],{"type":55,"value":792},"Reduce problem size",{"type":49,"tag":84,"props":794,"children":795},{},[796],{"type":55,"value":797},"Use sparse constraint matrix",{"type":49,"tag":84,"props":799,"children":800},{},[801],{"type":55,"value":802},"Set time limit to get partial solution",{"type":49,"tag":64,"props":804,"children":806},{"id":805},"status-code-reference",[807],{"type":55,"value":808},"Status Code Reference",{"type":49,"tag":172,"props":810,"children":812},{"id":811},"lp-status-values",[813],{"type":55,"value":814},"LP Status Values",{"type":49,"tag":816,"props":817,"children":818},"table",{},[819,838],{"type":49,"tag":820,"props":821,"children":822},"thead",{},[823],{"type":49,"tag":824,"props":825,"children":826},"tr",{},[827,833],{"type":49,"tag":828,"props":829,"children":830},"th",{},[831],{"type":55,"value":832},"Status",{"type":49,"tag":828,"props":834,"children":835},{},[836],{"type":55,"value":837},"Meaning",{"type":49,"tag":839,"props":840,"children":841},"tbody",{},[842,860,877,894,911,928,945,962],{"type":49,"tag":824,"props":843,"children":844},{},[845,855],{"type":49,"tag":846,"props":847,"children":848},"td",{},[849],{"type":49,"tag":131,"props":850,"children":852},{"className":851},[],[853],{"type":55,"value":854},"Optimal",{"type":49,"tag":846,"props":856,"children":857},{},[858],{"type":55,"value":859},"Found optimal solution",{"type":49,"tag":824,"props":861,"children":862},{},[863,872],{"type":49,"tag":846,"props":864,"children":865},{},[866],{"type":49,"tag":131,"props":867,"children":869},{"className":868},[],[870],{"type":55,"value":871},"PrimalFeasible",{"type":49,"tag":846,"props":873,"children":874},{},[875],{"type":55,"value":876},"Found feasible but may not be optimal",{"type":49,"tag":824,"props":878,"children":879},{},[880,889],{"type":49,"tag":846,"props":881,"children":882},{},[883],{"type":49,"tag":131,"props":884,"children":886},{"className":885},[],[887],{"type":55,"value":888},"PrimalInfeasible",{"type":49,"tag":846,"props":890,"children":891},{},[892],{"type":55,"value":893},"No feasible solution exists",{"type":49,"tag":824,"props":895,"children":896},{},[897,906],{"type":49,"tag":846,"props":898,"children":899},{},[900],{"type":49,"tag":131,"props":901,"children":903},{"className":902},[],[904],{"type":55,"value":905},"DualInfeasible",{"type":49,"tag":846,"props":907,"children":908},{},[909],{"type":55,"value":910},"Problem is unbounded",{"type":49,"tag":824,"props":912,"children":913},{},[914,923],{"type":49,"tag":846,"props":915,"children":916},{},[917],{"type":49,"tag":131,"props":918,"children":920},{"className":919},[],[921],{"type":55,"value":922},"TimeLimit",{"type":49,"tag":846,"props":924,"children":925},{},[926],{"type":55,"value":927},"Stopped due to time limit",{"type":49,"tag":824,"props":929,"children":930},{},[931,940],{"type":49,"tag":846,"props":932,"children":933},{},[934],{"type":49,"tag":131,"props":935,"children":937},{"className":936},[],[938],{"type":55,"value":939},"IterationLimit",{"type":49,"tag":846,"props":941,"children":942},{},[943],{"type":55,"value":944},"Stopped due to iteration limit",{"type":49,"tag":824,"props":946,"children":947},{},[948,957],{"type":49,"tag":846,"props":949,"children":950},{},[951],{"type":49,"tag":131,"props":952,"children":954},{"className":953},[],[955],{"type":55,"value":956},"NumericalError",{"type":49,"tag":846,"props":958,"children":959},{},[960],{"type":55,"value":961},"Numerical issues encountered",{"type":49,"tag":824,"props":963,"children":964},{},[965,974],{"type":49,"tag":846,"props":966,"children":967},{},[968],{"type":49,"tag":131,"props":969,"children":971},{"className":970},[],[972],{"type":55,"value":973},"NoTermination",{"type":49,"tag":846,"props":975,"children":976},{},[977],{"type":55,"value":978},"Solver didn't converge",{"type":49,"tag":172,"props":980,"children":982},{"id":981},"milp-status-values",[983],{"type":55,"value":984},"MILP Status Values",{"type":49,"tag":816,"props":986,"children":987},{},[988,1002],{"type":49,"tag":820,"props":989,"children":990},{},[991],{"type":49,"tag":824,"props":992,"children":993},{},[994,998],{"type":49,"tag":828,"props":995,"children":996},{},[997],{"type":55,"value":832},{"type":49,"tag":828,"props":999,"children":1000},{},[1001],{"type":55,"value":837},{"type":49,"tag":839,"props":1003,"children":1004},{},[1005,1020,1037,1053,1069,1084],{"type":49,"tag":824,"props":1006,"children":1007},{},[1008,1016],{"type":49,"tag":846,"props":1009,"children":1010},{},[1011],{"type":49,"tag":131,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":55,"value":854},{"type":49,"tag":846,"props":1017,"children":1018},{},[1019],{"type":55,"value":859},{"type":49,"tag":824,"props":1021,"children":1022},{},[1023,1032],{"type":49,"tag":846,"props":1024,"children":1025},{},[1026],{"type":49,"tag":131,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":55,"value":1031},"FeasibleFound",{"type":49,"tag":846,"props":1033,"children":1034},{},[1035],{"type":55,"value":1036},"Found feasible, within gap tolerance",{"type":49,"tag":824,"props":1038,"children":1039},{},[1040,1049],{"type":49,"tag":846,"props":1041,"children":1042},{},[1043],{"type":49,"tag":131,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":55,"value":1048},"Infeasible",{"type":49,"tag":846,"props":1050,"children":1051},{},[1052],{"type":55,"value":893},{"type":49,"tag":824,"props":1054,"children":1055},{},[1056,1065],{"type":49,"tag":846,"props":1057,"children":1058},{},[1059],{"type":49,"tag":131,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":55,"value":1064},"Unbounded",{"type":49,"tag":846,"props":1066,"children":1067},{},[1068],{"type":55,"value":910},{"type":49,"tag":824,"props":1070,"children":1071},{},[1072,1080],{"type":49,"tag":846,"props":1073,"children":1074},{},[1075],{"type":49,"tag":131,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":55,"value":922},{"type":49,"tag":846,"props":1081,"children":1082},{},[1083],{"type":55,"value":927},{"type":49,"tag":824,"props":1085,"children":1086},{},[1087,1095],{"type":49,"tag":846,"props":1088,"children":1089},{},[1090],{"type":49,"tag":131,"props":1091,"children":1093},{"className":1092},[],[1094],{"type":55,"value":973},{"type":49,"tag":846,"props":1096,"children":1097},{},[1098],{"type":55,"value":1099},"No solution found yet",{"type":49,"tag":64,"props":1101,"children":1103},{"id":1102},"performance-debugging",[1104],{"type":55,"value":1105},"Performance Debugging",{"type":49,"tag":172,"props":1107,"children":1109},{"id":1108},"slow-lpmilp-solve",[1110],{"type":55,"value":1111},"Slow LP\u002FMILP Solve",{"type":49,"tag":187,"props":1113,"children":1115},{"className":189,"code":1114,"language":191,"meta":192,"style":192},"settings = SolverSettings()\nsettings.set_parameter(\"log_to_console\", 1)  # See progress\nsettings.set_parameter(\"time_limit\", 60)      # Don't wait forever\n\n# For MILP, accept good-enough solution\nsettings.set_parameter(\"mip_relative_gap\", 0.05)  # 5% gap\n",[1116],{"type":49,"tag":131,"props":1117,"children":1118},{"__ignoreMap":192},[1119,1127,1135,1143,1150,1158],{"type":49,"tag":198,"props":1120,"children":1121},{"class":200,"line":201},[1122],{"type":49,"tag":198,"props":1123,"children":1124},{},[1125],{"type":55,"value":1126},"settings = SolverSettings()\n",{"type":49,"tag":198,"props":1128,"children":1129},{"class":200,"line":210},[1130],{"type":49,"tag":198,"props":1131,"children":1132},{},[1133],{"type":55,"value":1134},"settings.set_parameter(\"log_to_console\", 1)  # See progress\n",{"type":49,"tag":198,"props":1136,"children":1137},{"class":200,"line":219},[1138],{"type":49,"tag":198,"props":1139,"children":1140},{},[1141],{"type":55,"value":1142},"settings.set_parameter(\"time_limit\", 60)      # Don't wait forever\n",{"type":49,"tag":198,"props":1144,"children":1145},{"class":200,"line":228},[1146],{"type":49,"tag":198,"props":1147,"children":1148},{"emptyLinePlaceholder":232},[1149],{"type":55,"value":235},{"type":49,"tag":198,"props":1151,"children":1152},{"class":200,"line":238},[1153],{"type":49,"tag":198,"props":1154,"children":1155},{},[1156],{"type":55,"value":1157},"# For MILP, accept good-enough solution\n",{"type":49,"tag":198,"props":1159,"children":1160},{"class":200,"line":247},[1161],{"type":49,"tag":198,"props":1162,"children":1163},{},[1164],{"type":55,"value":1165},"settings.set_parameter(\"mip_relative_gap\", 0.05)  # 5% gap\n",{"type":49,"tag":172,"props":1167,"children":1169},{"id":1168},"check-solve-time",[1170],{"type":55,"value":1171},"Check Solve Time",{"type":49,"tag":187,"props":1173,"children":1175},{"className":189,"code":1174,"language":191,"meta":192,"style":192},"problem.solve(settings)\nprint(f\"Solve time: {problem.SolveTime:.2f} seconds\")\n",[1176],{"type":49,"tag":131,"props":1177,"children":1178},{"__ignoreMap":192},[1179,1187],{"type":49,"tag":198,"props":1180,"children":1181},{"class":200,"line":201},[1182],{"type":49,"tag":198,"props":1183,"children":1184},{},[1185],{"type":55,"value":1186},"problem.solve(settings)\n",{"type":49,"tag":198,"props":1188,"children":1189},{"class":200,"line":210},[1190],{"type":49,"tag":198,"props":1191,"children":1192},{},[1193],{"type":55,"value":1194},"print(f\"Solve time: {problem.SolveTime:.2f} seconds\")\n",{"type":49,"tag":64,"props":1196,"children":1198},{"id":1197},"diagnostic-checklist",[1199],{"type":55,"value":1200},"Diagnostic Checklist",{"type":49,"tag":187,"props":1202,"children":1206},{"className":1203,"code":1205,"language":55},[1204],"language-text","□ Status checked with correct case (PascalCase)?\n□ All variables have correct vtype (INTEGER vs CONTINUOUS)?\n□ Constraint directions correct (\u003C= vs >= vs ==)?\n□ Objective sense correct (MINIMIZE vs MAXIMIZE)?\n□ Variable bounds specified where needed?\n",[1207],{"type":49,"tag":131,"props":1208,"children":1209},{"__ignoreMap":192},[1210],{"type":55,"value":1205},{"type":49,"tag":64,"props":1212,"children":1214},{"id":1213},"diagnostic-code-snippets",[1215],{"type":55,"value":1216},"Diagnostic Code Snippets",{"type":49,"tag":58,"props":1218,"children":1219},{},[1220,1222,1228],{"type":55,"value":1221},"See ",{"type":49,"tag":1223,"props":1224,"children":1226},"a",{"href":1225},"resources\u002Fdiagnostic_snippets.md",[1227],{"type":55,"value":1225},{"type":55,"value":1229}," for copy-paste diagnostic code:",{"type":49,"tag":93,"props":1231,"children":1232},{},[1233,1238,1243,1248],{"type":49,"tag":84,"props":1234,"children":1235},{},[1236],{"type":55,"value":1237},"Status checking",{"type":49,"tag":84,"props":1239,"children":1240},{},[1241],{"type":55,"value":1242},"Variable inspection",{"type":49,"tag":84,"props":1244,"children":1245},{},[1246],{"type":55,"value":1247},"Constraint analysis",{"type":49,"tag":84,"props":1249,"children":1250},{},[1251],{"type":55,"value":1252},"Memory and performance checks",{"type":49,"tag":64,"props":1254,"children":1256},{"id":1255},"interpreting-dual-values-reduced-costs",[1257],{"type":55,"value":1258},"Interpreting Dual Values & Reduced Costs",{"type":49,"tag":58,"props":1260,"children":1261},{},[1262,1264,1270,1272,1277,1279,1284],{"type":55,"value":1263},"When an LP\u002FQP solve returns dual values and you need the ",{"type":49,"tag":1265,"props":1266,"children":1267},"em",{},[1268],{"type":55,"value":1269},"decision",{"type":55,"value":1271}," read — which constraint is the binding bottleneck, what relaxing it is worth, and which unused option is the closest near-miss — see ",{"type":49,"tag":1223,"props":1273,"children":1275},{"href":1274},"resources\u002Finterpreting_duals.md",[1276],{"type":55,"value":1274},{"type":55,"value":1278},". (Integer models \u002F MILP — and quadratic ",{"type":49,"tag":1265,"props":1280,"children":1281},{},[1282],{"type":55,"value":1283},"constraints",{"type":55,"value":1285}," — return no usable duals; that reference covers the fallback.)",{"type":49,"tag":64,"props":1287,"children":1289},{"id":1288},"when-to-escalate",[1290],{"type":55,"value":1291},"When to Escalate",{"type":49,"tag":58,"props":1293,"children":1294},{},[1295],{"type":55,"value":1296},"File a GitHub issue if:",{"type":49,"tag":93,"props":1298,"children":1299},{},[1300,1305],{"type":49,"tag":84,"props":1301,"children":1302},{},[1303],{"type":55,"value":1304},"Reproducible bug with minimal example",{"type":49,"tag":84,"props":1306,"children":1307},{},[1308],{"type":55,"value":1309},"Include: cuOpt version, CUDA version, error message, minimal repro code",{"type":49,"tag":1311,"props":1312,"children":1313},"style",{},[1314],{"type":55,"value":1315},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1317,"total":560},[1318,1325,1337,1352,1365,1380,1395],{"slug":4,"name":4,"fn":5,"description":6,"org":1319,"tags":1320,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1321,1322,1323,1324],{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":1326,"name":1326,"fn":1327,"description":1328,"org":1329,"tags":1330,"stars":23,"repoUrl":24,"updatedAt":1336},"cuopt-model-mapper","map optimization problems to cuOpt models","Map interpreted optimization problems into cuOpt-native models for the fast path with minimal clarifying questions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1331,1334,1335],{"name":1332,"slug":1333,"type":15},"Data Modeling","data-modeling",{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-07-30T05:29:19.401656",{"slug":1338,"name":1338,"fn":1339,"description":1340,"org":1341,"tags":1342,"stars":23,"repoUrl":24,"updatedAt":1351},"cuopt-sandbox","run cuOpt optimization in NemoClaw sandbox","Run cuOpt in the NemoClaw sandbox — probe\u002Fsmoke gates, prefer cancelable Python gRPC jobs, use legacy remote execution only when that API is unavailable, then vendored cuOpt skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1343,1346,1347,1348],{"name":1344,"slug":1345,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":1349,"slug":1350,"type":15},"Simulation","simulation","2026-07-30T05:29:17.131364",{"slug":1353,"name":1353,"fn":1354,"description":1355,"org":1356,"tags":1357,"stars":23,"repoUrl":24,"updatedAt":1364},"generic-max-supply","plan supply chain models with cuOpt","Multi-period supply chain planning model: data files, BOM structure, variable\u002Fconstraint reference for the max-supply base model.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1358,1359,1360,1361],{"name":1332,"slug":1333,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":1362,"slug":1363,"type":15},"Supply Chain","supply-chain","2026-07-14T05:32:29.39577",{"slug":1366,"name":1366,"fn":1367,"description":1368,"org":1369,"tags":1370,"stars":23,"repoUrl":24,"updatedAt":1379},"optimization-from-data-orchestrator","orchestrate optimization data and solving","Coordinate uploaded data plus a natural-language question into interpretation, clarification, cuOpt solve, and a user-facing answer.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1371,1374,1377,1378],{"name":1372,"slug":1373,"type":15},"Automation","automation",{"name":1375,"slug":1376,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-07-14T05:32:59.680482",{"slug":1381,"name":1381,"fn":1382,"description":1383,"org":1384,"tags":1385,"stars":23,"repoUrl":24,"updatedAt":1394},"optimization-intent-router","classify optimization and analytics requests","Classify whether a data-backed request is LP, MILP, QP, routing, or non-optimization analytics.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1386,1389,1392,1393],{"name":1387,"slug":1388,"type":15},"Analytics","analytics",{"name":1390,"slug":1391,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-07-14T05:32:53.475243",{"slug":1396,"name":1396,"fn":1397,"description":1398,"org":1399,"tags":1400,"stars":23,"repoUrl":24,"updatedAt":1404},"optimization-mode-router","route optimization requests to cuOpt solvers","Choose fast direct-to-cuOpt solve versus replayable or auditable model artifact mode.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1401,1402,1403],{"name":1372,"slug":1373,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-07-30T05:29:18.162351",{"items":1406,"total":1560},[1407,1425,1442,1453,1465,1477,1490,1504,1517,1528,1542,1551],{"slug":1408,"name":1408,"fn":1409,"description":1410,"org":1411,"tags":1412,"stars":1422,"repoUrl":1423,"updatedAt":1424},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1413,1416,1419],{"name":1414,"slug":1415,"type":15},"Documentation","documentation",{"name":1417,"slug":1418,"type":15},"MCP","mcp",{"name":1420,"slug":1421,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":1426,"name":1426,"fn":1427,"description":1428,"org":1429,"tags":1430,"stars":1439,"repoUrl":1440,"updatedAt":1441},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1431,1434,1437],{"name":1432,"slug":1433,"type":15},"Containers","containers",{"name":1435,"slug":1436,"type":15},"Deployment","deployment",{"name":1438,"slug":191,"type":15},"Python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":1443,"name":1443,"fn":1444,"description":1445,"org":1446,"tags":1447,"stars":1439,"repoUrl":1440,"updatedAt":1452},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1448,1451],{"name":1449,"slug":1450,"type":15},"CI\u002FCD","ci-cd",{"name":1435,"slug":1436,"type":15},"2026-07-14T05:25:59.97109",{"slug":1454,"name":1454,"fn":1455,"description":1456,"org":1457,"tags":1458,"stars":1439,"repoUrl":1440,"updatedAt":1464},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1459,1460,1461],{"name":1449,"slug":1450,"type":15},{"name":1435,"slug":1436,"type":15},{"name":1462,"slug":1463,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":1466,"name":1466,"fn":1467,"description":1468,"org":1469,"tags":1470,"stars":1439,"repoUrl":1440,"updatedAt":1476},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1471,1472,1473],{"name":21,"slug":22,"type":15},{"name":1462,"slug":1463,"type":15},{"name":1474,"slug":1475,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":1478,"name":1478,"fn":1479,"description":1480,"org":1481,"tags":1482,"stars":1439,"repoUrl":1440,"updatedAt":1489},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1483,1486],{"name":1484,"slug":1485,"type":15},"Best Practices","best-practices",{"name":1487,"slug":1488,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":1491,"name":1491,"fn":1492,"description":1493,"org":1494,"tags":1495,"stars":1439,"repoUrl":1440,"updatedAt":1503},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1496,1499,1502],{"name":1497,"slug":1498,"type":15},"Machine Learning","machine-learning",{"name":1500,"slug":1501,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":1505,"name":1505,"fn":1506,"description":1507,"org":1508,"tags":1509,"stars":1439,"repoUrl":1440,"updatedAt":1516},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1510,1513],{"name":1511,"slug":1512,"type":15},"QA","qa",{"name":1514,"slug":1515,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":1518,"name":1518,"fn":1519,"description":1520,"org":1521,"tags":1522,"stars":1439,"repoUrl":1440,"updatedAt":1527},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1523,1524],{"name":1435,"slug":1436,"type":15},{"name":1525,"slug":1526,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":1529,"name":1529,"fn":1530,"description":1531,"org":1532,"tags":1533,"stars":1439,"repoUrl":1440,"updatedAt":1541},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1534,1537,1538],{"name":1535,"slug":1536,"type":15},"Code Review","code-review",{"name":1462,"slug":1463,"type":15},{"name":1539,"slug":1540,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":1543,"name":1543,"fn":1544,"description":1545,"org":1546,"tags":1547,"stars":1439,"repoUrl":1440,"updatedAt":1550},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1548,1549],{"name":1511,"slug":1512,"type":15},{"name":1514,"slug":1515,"type":15},"2026-07-14T05:25:54.928983",{"slug":1552,"name":1552,"fn":1553,"description":1554,"org":1555,"tags":1556,"stars":1439,"repoUrl":1440,"updatedAt":1559},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[1557,1558],{"name":1372,"slug":1373,"type":15},{"name":1449,"slug":1450,"type":15},"2026-07-30T05:29:03.275638",496]