{"record":{"id":"c6a62e74ddd17a02","repo":"stanfordnlp/CoreNLP","slug":"invalid-line-search-option-for-qnminimizer","errorCode":null,"errorMessage":"Invalid line search option for QNMinimizer.","messagePattern":"Invalid line search option for QNMinimizer\\.","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/optimization/QNMinimizer.java","lineNumber":1025,"sourceCode":"        double[] newPoint; // initialized in if/else/switch below\n        if (useOWLQN) {\n          // only linear search is allowed for OWL-QN\n          newPoint = lineSearchBacktrackOWL(dFunction, dir, x, newX, grad, value, sb);\n          sb.append('B');\n        } else {\n          // switch between line search options.\n          switch (lsOpt) {\n          case BACKTRACK:\n            newPoint = lineSearchBacktrack(dFunction, dir, x, newX, grad, value, sb);\n            sb.append('B');\n            break;\n          case MINPACK:\n            newPoint = lineSearchMinPack(dFunction, dir, x, newX, grad, value,\n                functionTolerance, sb);\n            sb.append('M');\n            break;\n          default:\n            throw new IllegalArgumentException(\"Invalid line search option for QNMinimizer.\");\n          }\n        }\n\n        newValue = newPoint[f];\n        sb.append(' ').append(nf.format(newPoint[a])).append(\"] \");\n\n        // This shouldn't actually evaluate anything since that should have been\n        // done in the lineSearch.\n        System.arraycopy(dFunction.derivativeAt(newX), 0, newGrad, 0, newGrad.length);\n\n        // This is where all the s, y updates are applied.\n        qn.update(newX, x, newGrad, rawGrad, newPoint[a]); // step (4) in Galen & Gao 2007\n\n        if (useOWLQN) {\n          System.arraycopy(newGrad, 0, rawGrad, 0, newGrad.length);\n          // pseudo gradient\n          newGrad = pseudoGradientOWL(newX, newGrad, dFunction);\n        }","sourceCodeStart":1007,"sourceCodeEnd":1043,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/optimization/QNMinimizer.java#L1007-L1043","documentation":"The switch over the configured line search type (QNMinimizer.eLineSearchType) hit its default branch because the enum value is not one of the supported options (e.g. BACKTRACKING, MINPACK). This indicates a corrupted or unrecognized line search setting.","triggerScenarios":"Setting the line search option via setMinimizeType()/reflection/config deserialization to an eLineSearchType value not handled by the switch (only BACKTRACKING and MINPACK cases are covered) and then calling minimize().","commonSituations":"Deserializing a serialized QNMinimizer whose enum constant comes from a different compiled version of the library; programmatic enum construction; version skew between code that sets the type and the minimizer code.","solutions":["Set line search to a supported value: minimizer.setMinimizeType(QNMinimizer.eLineSearchType.BACKTRACKING) or .MINPACK.","Upgrade/downgrade so all modules use the same CoreNLP version and enum.","Inspect the current value with reflection/logging before calling minimize()."],"exampleFix":"// before\nminimizer.setMinimizeType(unrecognizedType); // default branch throws\n// after\nminimizer.setMinimizeType(QNMinimizer.eLineSearchType.MINPACK);","handlingStrategy":"validation","validationCode":"QNMinimizer.eLineSearchType t = minimizer.lineSearchType; // via getter if available\nif (t != QNMinimizer.eLineSearchType.BACKTRACKING && t != QNMinimizer.eLineSearchType.MINPACK)\n  throw new IllegalStateException(\"Unsupported line search: \" + t);","typeGuard":"boolean supported = EnumSet.of(QNMinimizer.eLineSearchType.BACKTRACKING, QNMinimizer.eLineSearchType.MINPACK).contains(type);","tryCatchPattern":"try {\n  minimizer.minimize(f, tol, init);\n} catch (IllegalArgumentException e) {\n  minimizer.setMinimizeType(QNMinimizer.eLineSearchType.MINPACK);\n  minimizer.minimize(f, tol, init);\n}","preventionTips":["Only assign enum values from the same CoreNLP version that runs the training.","Pin all modules to one stanford-corenlp version.","Log the line search type at startup."],"tags":["config","enum","line-search"],"backgroundTag":"invalid-enum-value","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}