{"record":{"id":"00e01cbb30a3ecdc","repo":"jax-ml/jax","slug":"unknown-method-method","errorCode":null,"errorMessage":"unknown method '{method}'","messagePattern":"unknown method '(.+?)'","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/scipy/stats/_core.py","lineNumber":197,"sourceCode":"\n  if nan_policy not in [\"propagate\", \"omit\", \"raise\"]:\n    raise ValueError(\n      f\"Illegal nan_policy value {nan_policy!r}; expected one of \"\n      \"{'propagate', 'omit', 'raise'}\"\n    )\n  if nan_policy == \"omit\":\n    raise NotImplementedError(\n      f\"Logic for `nan_policy` of {nan_policy} is not implemented\"\n    )\n  if nan_policy == \"raise\":\n    raise NotImplementedError(\n      \"In order to best JIT compile `rankdata`, we cannot know whether `x` \"\n      \"contains nans. Please check if nans exist in `x` outside of the \"\n      \"`rankdata` function.\"\n    )\n\n  if method not in (\"average\", \"min\", \"max\", \"dense\", \"ordinal\"):\n    raise ValueError(f\"unknown method '{method}'\")\n\n  if axis is not None:\n    return jnp.apply_along_axis(rankdata, axis, a, method)\n\n  a = jnp.ravel(a)\n  out_dtype = dtypes.default_float_dtype()\n\n  def _rankdata(a: Array) -> Array:\n    arr, sorter = lax.sort_key_val(a, jnp.arange(a.size))\n    inv = invert_permutation(sorter)\n\n    if method == \"ordinal\":\n      return (inv + 1).astype(out_dtype)\n    obs = jnp.concatenate([jnp.array([True]), arr[1:] != arr[:-1]])\n    dense = obs.cumsum()[inv]\n    if method == \"dense\":\n      return dense.astype(out_dtype)\n    count = jnp.nonzero(obs, size=arr.size + 1, fill_value=obs.size)[0].astype(out_dtype)","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/scipy/stats/_core.py#L179-L215","documentation":"jax.scipy.stats.rankdata only supports the tie-handling methods 'average', 'min', 'max', 'dense', and 'ordinal'; any other method string raises ValueError.","triggerScenarios":"Calling jax.scipy.stats.rankdata(a, method='dense ') with whitespace/typo, or an unsupported method name.","commonSituations":"Passing method from a config dict with a typo; assuming a scipy method name like 'first' (pandas rank style) exists.","solutions":["Use one of: 'average', 'min', 'max', 'dense', 'ordinal' (exact lowercase).","If you need pandas-style 'first'/'min' with ordering semantics, implement via argsort or use scipy.stats.rankdata directly."],"exampleFix":"// before\njax.scipy.stats.rankdata(x, method='first')\n\n// after\njax.scipy.stats.rankdata(x, method='ordinal')","handlingStrategy":"validation","validationCode":"VALID = ('average', 'min', 'max', 'dense', 'ordinal')\nassert method in VALID, f\"method must be one of {VALID}, got {method!r}\"","typeGuard":"def is_valid_rank_method(m) -> bool:\n    return m in ('average', 'min', 'max', 'dense', 'ordinal')","tryCatchPattern":"try:\n    jax.scipy.stats.rankdata(x, method=method)\nexcept ValueError as e:\n    if 'unknown method' in str(e):\n        jax.scipy.stats.rankdata(x, method='average')\n    else:\n        raise","preventionTips":["Validate config-driven method strings at load time.","Note pandas 'first' has no jax/scipy equivalent; use 'ordinal'."],"tags":["jax","scipy","stats","rankdata","argument-validation","method"],"backgroundTag":"scipy-invalid-method-name","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}