{"record":{"id":"dced7ee1d5d1a647","repo":"jax-ml/jax","slug":"new-float-config-value-must-be-none-or-of-type-flo","errorCode":null,"errorMessage":"new float config value must be None or of type float, got {new_val} of type {type(new_val)}","messagePattern":"new float config value must be None or of type float, got (.+?) of type (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/config.py","lineNumber":768,"sourceCode":"\n  Returns:\n    A contextmanager to control the thread-local state value.\n  \"\"\"\n  if not isinstance(default, float):\n    raise TypeError(f\"Default value must be of type float, got {default} \"\n                    f\"of type {getattr(type(default), '__name__', type(default))}\")\n  name = name.lower()\n  default_env = os.getenv(name.upper())\n  if default_env is not None:\n    try:\n      default = float(default_env)\n    except ValueError:\n      raise ValueError(f\"Invalid value \\\"{default_env}\\\" for JAX flag {name}\")\n  config._contextmanager_flags.add(name)\n\n  def parser(new_val):\n    if new_val is not None and not isinstance(new_val, (float, int)):\n      raise ValueError(\n        f'new float config value must be None or of type float, '\n        f'got {new_val} of type {type(new_val)}')\n    return new_val\n\n  s = State[float](name, default, help, update_global_hook,\n                   update_thread_local_hook, parser)\n  config.add_option(name, s, float, meta_args=[], meta_kwargs={\"help\": help})\n  setattr(Config, name, property(lambda _: s.value))\n  return s\n\n\ndef string_state(\n    name: str,\n    default: str,\n    help: str,\n    *,\n    update_global_hook: Callable[[str], None] | None = None,\n    update_thread_local_hook: Callable[[str | None], None] | None = None,","sourceCodeStart":750,"sourceCodeEnd":786,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/config.py#L750-L786","documentation":"The parser for float_state accepts None, float, or int new values; anything else (str, bool-as-intended, objects) raises this ValueError when the flag is set.","triggerScenarios":"jax.config.update('jax_my_flag', '0.5') — a string instead of a number; or passing a numpy scalar of dtype object.","commonSituations":"Config-driven scripts passing values straight from JSON/YAML strings or argparse without float conversion.","solutions":["Convert with float(value) before setting","Use argparse type=float or a schema validator for config files"],"exampleFix":"// before\njax.config.update('jax_my_flag', cfg['rate'])  # '0.5' from JSON\n// after\njax.config.update('jax_my_flag', float(cfg['rate']))","handlingStrategy":"validation","validationCode":"if new_val is not None and not isinstance(new_val, (float, int)):\n    raise ValueError(f'expected float/int or None, got {type(new_val)}')","typeGuard":"def is_float_like(v) -> bool:\n    return v is None or isinstance(v, (float, int)) and not isinstance(v, bool)","tryCatchPattern":"try:\n    jax.config.update('jax_my_flag', val)\nexcept ValueError:\n    jax.config.update('jax_my_flag', float(val))","preventionTips":["float() any string-sourced value before config.update","Use typed config schemas (pydantic/dataclasses) so numeric fields stay numeric"],"tags":["jax","config","valueerror","float"],"backgroundTag":"invalid-config-value","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}