{"record":{"id":"363b9290bd114af2","repo":"TheAlgorithms/Python","slug":"the-parameter-bwt-string-type-must-be-str","errorCode":null,"errorMessage":"The parameter bwt_string type must be str.","messagePattern":"The parameter bwt_string type must be str\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"data_compression/burrows_wheeler.py","lineNumber":140,"sourceCode":"        ...\n    TypeError: The parameter idx_original_string type must be int or passive\n    of cast to int.\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The parameter idx_original_string must not be lower than 0.\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 12) # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: The parameter idx_original_string must be lower than\n    len(bwt_string).\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 11.0)\n    'panamabanana'\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 11.4)\n    'panamabanana'\n    \"\"\"\n    if not isinstance(bwt_string, str):\n        raise TypeError(\"The parameter bwt_string type must be str.\")\n    if not bwt_string:\n        raise ValueError(\"The parameter bwt_string must not be empty.\")\n    try:\n        idx_original_string = int(idx_original_string)\n    except ValueError:\n        raise TypeError(\n            \"The parameter idx_original_string type must be int or passive\"\n            \" of cast to int.\"\n        )\n    if idx_original_string < 0:\n        raise ValueError(\"The parameter idx_original_string must not be lower than 0.\")\n    if idx_original_string >= len(bwt_string):\n        raise ValueError(\n            \"The parameter idx_original_string must be lower than len(bwt_string).\"\n        )\n\n    ordered_rotations = [\"\"] * len(bwt_string)\n    for _ in range(len(bwt_string)):","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/data_compression/burrows_wheeler.py#L122-L158","documentation":"Raised by reverse_bwt() in data_compression/burrows_wheeler.py when bwt_string is not a str. The inverse transform repeatedly prepends characters and sorts, which requires str input. This is the first validation in the function, checked before emptiness and index validation.","triggerScenarios":"Calling reverse_bwt(None, 0), reverse_bwt(123, 0), reverse_bwt(['m','n','p'], 0), or passing bytes produced by a transport layer instead of the str returned by bwt_transform().","commonSituations":"Round-tripping a BWT result through a medium that changes its type (encoded to bytes for network/file storage, then not decoded), or deserializing from JSON where the field is missing and defaults to None.","solutions":["Decode back to str before inverting: reverse_bwt(data.decode('utf-8'), idx) when data came back as bytes.","Pass the exact values returned by bwt_transform() without intermediate conversions.","Guard for None explicitly before calling."],"exampleFix":"# before\nreverse_bwt(payload['bwt'], payload['idx'])  # bwt is None/bytes\n\n# after\nbwt = payload['bwt'] or ''\nif isinstance(bwt, bytes):\n    bwt = bwt.decode('utf-8')\nreverse_bwt(bwt, payload['idx'])","handlingStrategy":"type-guard","validationCode":"if isinstance(bwt_string, bytes):\n    bwt_string = bwt_string.decode('utf-8')\nif not isinstance(bwt_string, str):\n    raise TypeError('bwt_string must be str')\nplain = reverse_bwt(bwt_string, idx)","typeGuard":"def is_str(value: object) -> bool:\n    return isinstance(value, str)","tryCatchPattern":null,"preventionTips":["Keep the (bwt_string, idx) pair exactly as returned by bwt_transform()","Decode bytes payloads back to str before inverting"],"tags":["type-validation","burrows-wheeler","bwt-inverse","compression"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}