{"record":{"id":"17af119bf7dff4d4","repo":"jax-ml/jax","slug":"each-element-of-arraymapping-must-be-a-str-or-comp","errorCode":null,"errorMessage":"Each element of ArrayMapping must be a str or CompoundFactor, but got {type(d)}","messagePattern":"Each element of ArrayMapping must be a str or CompoundFactor, but got (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/custom_partitioning_sharding_rule.py","lineNumber":91,"sourceCode":"\n  def __new__(cls, *factors):\n    return tuple.__new__(CompoundFactor, factors)\n\n\nclass ArrayMapping(tuple):\n  \"\"\"Describes the factors for an operand or result.\n\n  Each element is either a factor or a CompoundFactor. A leading element can\n  also be BATCHING, which represents batching dimensions. examples:\n  * ArrayMapping('a')\n  * ArrayMapping('b', 'c')\n  * ArrayMapping(CompoundFactor('b', 'c'), 'd')\n  * ArrayMapping(BATCHING, CompoundFactor('b', 'c'), 'd')\n  \"\"\"\n  def __init__(self, *dim_mappings):\n    for i, d in enumerate(dim_mappings):\n      if not isinstance(d, str) and not isinstance(d, CompoundFactor):\n        raise ValueError(\n            \"Each element of ArrayMapping must be a str or CompoundFactor, but\"\n            f\" got {type(d)}\")\n      if isinstance(d, str):\n        if _is_batching(d):\n          if i != 0:\n            raise ValueError(\"Ellipsis can only be used at the beginning of a dimension\")\n        else:\n          _check_factor(d)\n\n  def __new__(cls, *dim_mappings):\n    return tuple.__new__(ArrayMapping, dim_mappings)\n\n\nclass SdyShardingRule:\n  \"\"\"Represents a Shardy sharding rule.\n\n  An SdyShardingRule contains the ArrayMappings for operands and results,\n  optional special factors and optional factor sizes. A factor is a name used in","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/custom_partitioning_sharding_rule.py#L73-L109","documentation":"Each element of ArrayMapping (a per-dimension factor spec in sharding rules) must be a str or CompoundFactor. Any other type raises ValueError with the offending type name.","triggerScenarios":"ArrayMapping(None, 'i'), ArrayMapping(('a','b'), 'i'), or passing an SdyShardingRule/axis object where a factor string belongs.","commonSituations":"Programmatically building mappings where optional factors default to None, or passing tuples instead of CompoundFactor.","solutions":["Use plain factor strings and CompoundFactor objects only","Convert tuples ('a','b') to CompoundFactor('a','b')","Substitute a valid factor (or omit the mapping element) instead of None"],"exampleFix":"# before\nArrayMapping(None, 'i')\n\n# after\nArrayMapping(BATCHING, 'i')  # or ArrayMapping('a', 'i')","handlingStrategy":"type-guard","validationCode":"from jax._src.custom_partitioning_sharding_rule import CompoundFactor\ndef valid_mapping(ms):\n    return all(isinstance(m, (str, CompoundFactor)) for m in ms)","typeGuard":"def valid_mapping_element(m):\n    return isinstance(m, (str, CompoundFactor))","tryCatchPattern":null,"preventionTips":["Convert tuples to CompoundFactor, avoid None in mappings"],"tags":["jax","shardy","sharding-rule","typeerror"],"backgroundTag":"invalid-constructor-arguments","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}