{"record":{"id":"b5a7f45f0ee7af52","repo":"stanfordnlp/CoreNLP","slug":"doesn-t-support-floats-yet","errorCode":null,"errorMessage":"Doesn't support floats yet","messagePattern":"Doesn't support floats yet","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/optimization/QNMinimizer.java","lineNumber":186,"sourceCode":"\n  public QNMinimizer(Function monitor) {\n    this.monitor = monitor;\n  }\n\n  public QNMinimizer(Function monitor, int m) {\n    this(monitor, m, false);\n  }\n\n  public QNMinimizer(Function monitor, int m, boolean useRobustOptions) {\n    this.monitor = monitor;\n    mem = m;\n    if (useRobustOptions) {\n      this.setRobustOptions();\n    }\n  }\n\n  public QNMinimizer(FloatFunction monitor) {\n    throw new UnsupportedOperationException(\"Doesn't support floats yet\");\n  }\n\n  public void setOldOptions() {\n    useAveImprovement = true;\n    useRelativeNorm = false;\n    useNumericalZero = false;\n    lsOpt = eLineSearch.BACKTRACK;\n    scaleOpt = eScaling.SCALAR;\n  }\n\n  public final void setRobustOptions() {\n    useAveImprovement = true;\n    useRelativeNorm = true;\n    useNumericalZero = true;\n    lsOpt = eLineSearch.MINPACK;\n    scaleOpt = eScaling.DIAGONAL;\n  }\n","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/optimization/QNMinimizer.java#L168-L204","documentation":"QNMinimizer has a constructor taking a FloatFunction that is intentionally unimplemented: it always throws UnsupportedOperationException(\"Doesn't support floats yet\"). L-BFGS in this library is implemented for double precision only, so float-based monitoring/evaluation is not available.","triggerScenarios":"Invoking new QNMinimizer(FloatFunction) — any call to that constructor.","commonSituations":"Code written against an API that advertises float support; porting code from another optimizer library that uses floats; generic code that instantiates QNMinimizer with either Function or FloatFunction.","solutions":["Use the double-precision constructors, e.g. new QNMinimizer(Function) or new QNMinimizer()","Convert your objective to implement the double-based Function interface","If float monitoring is needed, wrap it and pass a double-based Function monitor instead"],"exampleFix":"// before\nQNMinimizer minimizer = new QNMinimizer((FloatFunction) objective);\n// after\nQNMinimizer minimizer = new QNMinimizer((Function) objective);","handlingStrategy":"validation","validationCode":"if (monitor instanceof FloatFunction) throw new IllegalArgumentException(\"QNMinimizer only supports double-based Function monitors\");\nQNMinimizer m = new QNMinimizer((Function) monitor);","typeGuard":"boolean usableWithQN = !(monitor instanceof FloatFunction); // must be double-based Function","tryCatchPattern":"try { m = new QNMinimizer(monitor); } catch (UnsupportedOperationException e) { if (e.getMessage().contains(\"Doesn't support floats\")) { m = new QNMinimizer(toDoubleFunction(monitor)); } else throw e; }","preventionTips":["Implement objectives against the double-based Function interface only","Avoid generic factory code that may pick the FloatFunction constructor","Check constructor overloads before wrapping float-based code"],"tags":["java","stanford-nlp","optimization","unsupported-operation"],"backgroundTag":"method-not-implemented","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"}