{"record":{"id":"0bcd3cdea848b897","repo":"OpenBB-finance/OpenBB","slug":"only-2d-arrays-are-supported","errorCode":null,"errorMessage":"Only 2D arrays are supported.","messagePattern":"Only 2D arrays are supported\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"openbb_platform/core/openbb_core/app/utils.py","lineNumber":124,"sourceCode":"            raise ValueError(f\"Unsupported list item type: {type(item)}\")\n    return base_models\n\n\ndef dict_to_basemodel(data_dict: dict) -> Data:\n    \"\"\"Convert a dictionary to BaseModel.\"\"\"\n    try:\n        return Data(**data_dict)\n    except ValidationError as e:\n        raise ValueError(\n            f\"Validation error when converting dict to BaseModel: {e}\"\n        ) from e\n\n\ndef ndarray_to_basemodel(array: \"ndarray\") -> list[Data]:\n    \"\"\"Convert a NumPy array to list of BaseModel.\"\"\"\n    # Assuming a 2D array where rows are records\n    if array.ndim != 2:\n        raise ValueError(\"Only 2D arrays are supported.\")\n    return [\n        Data(**{f\"column_{i}\": value for i, value in enumerate(row)}) for row in array\n    ]\n\n\ndef convert_to_basemodel(data) -> Data | list[Data]:\n    \"\"\"Dispatch function to convert different types to BaseModel.\"\"\"\n    # pylint: disable=import-outside-toplevel\n    from numpy import ndarray\n    from pandas import DataFrame, Series\n\n    if isinstance(data, Data) or issubclass(type(data), Data):\n        return data\n    if isinstance(data, list):\n        return list_to_basemodel(data)\n    if isinstance(data, dict):\n        return dict_to_basemodel(data)\n    if isinstance(data, (DataFrame, Series)):","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/core/openbb_core/app/utils.py#L106-L142","documentation":"ValueError from ndarray_to_basemodel: it maps a NumPy array's rows to Data records ({'column_0': v0, 'column_1': v1, ...}) and only supports 2D arrays (rows x columns). Passing a 1D vector, a 3D tensor, or a 0D scalar triggers this before any conversion happens.","triggerScenarios":"convert_to_basemodel(numpy.array([1, 2, 3])) (1D), a 3D array from a model output, or a masked/scalar 0-d array returned by a custom pipeline fed into OpenBB result processing.","commonSituations":"Feeding raw NumPy vectors (e.g. a single column of prices) instead of record matrices; ML model outputs with extra dimensions; squeeze() forgotten after indexing producing 0-d arrays.","solutions":["Reshape to 2D so each row is one record: arr.reshape(-1, 1) for a single column vector","Or convert to a pandas DataFrame with named columns and pass that instead","squeeze() 0-d/1-item arrays before conversion"],"exampleFix":"# before\nimport numpy as np\nmodels = convert_to_basemodel(np.array([1.0, 2.0, 3.0]))\n\n# after\nimport numpy as np\nmodels = convert_to_basemodel(np.array([1.0, 2.0, 3.0]).reshape(-1, 1))","handlingStrategy":"type-guard","validationCode":"import numpy as np\n\ndef array_ok(arr: 'np.ndarray') -> bool:\n    return getattr(arr, 'ndim', None) == 2","typeGuard":"def is_2d_array(x) -> bool:\n    import numpy as np\n    return isinstance(x, np.ndarray) and x.ndim == 2","tryCatchPattern":"try:\n    models = ndarray_to_basemodel(arr)\nexcept ValueError as e:\n    if 'Only 2D arrays' in str(e):\n        models = ndarray_to_basemodel(np.atleast_2d(arr).reshape(-1, arr.shape[-1] if arr.ndim else 1))\n    else:\n        raise","preventionTips":["Reshape vectors to (-1, 1) before feeding pipelines","Prefer DataFrames with named columns over raw ndarrays","squeeze() guarded by ndim checks after indexing"],"tags":["openbb","numpy","type-conversion","shape-error"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}