diff options
author | sotech117 <michael_foiani@brown.edu> | 2025-07-31 17:27:24 -0400 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2025-07-31 17:27:24 -0400 |
commit | 5bf22fc7e3c392c8bd44315ca2d06d7dca7d084e (patch) | |
tree | 8dacb0f195df1c0788d36dd0064f6bbaa3143ede /venv/lib/python3.8/site-packages/plotly/serializers.py | |
parent | b832d364da8c2efe09e3f75828caf73c50d01ce3 (diff) |
add code for analysis of data
Diffstat (limited to 'venv/lib/python3.8/site-packages/plotly/serializers.py')
-rw-r--r-- | venv/lib/python3.8/site-packages/plotly/serializers.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/venv/lib/python3.8/site-packages/plotly/serializers.py b/venv/lib/python3.8/site-packages/plotly/serializers.py new file mode 100644 index 0000000..56b4b43 --- /dev/null +++ b/venv/lib/python3.8/site-packages/plotly/serializers.py @@ -0,0 +1,105 @@ +from .basedatatypes import Undefined +from .optional_imports import get_module + +np = get_module("numpy") + + +def _py_to_js(v, widget_manager): + """ + Python -> Javascript ipywidget serializer + + This function must repalce all objects that the ipywidget library + can't serialize natively (e.g. numpy arrays) with serializable + representations + + Parameters + ---------- + v + Object to be serialized + widget_manager + ipywidget widget_manager (unused) + + Returns + ------- + any + Value that the ipywidget library can serialize natively + """ + + # Handle dict recursively + # ----------------------- + if isinstance(v, dict): + return {k: _py_to_js(v, widget_manager) for k, v in v.items()} + + # Handle list/tuple recursively + # ----------------------------- + elif isinstance(v, (list, tuple)): + return [_py_to_js(v, widget_manager) for v in v] + + # Handle numpy array + # ------------------ + elif np is not None and isinstance(v, np.ndarray): + # Convert 1D numpy arrays with numeric types to memoryviews with + # datatype and shape metadata. + if ( + v.ndim == 1 + and v.dtype.kind in ["u", "i", "f"] + and v.dtype != "int64" + and v.dtype != "uint64" + ): + # We have a numpy array the we can directly map to a JavaScript + # Typed array + return {"buffer": memoryview(v), "dtype": str(v.dtype), "shape": v.shape} + else: + # Convert all other numpy arrays to lists + return v.tolist() + + # Handle Undefined + # ---------------- + if v is Undefined: + return "_undefined_" + + # Handle simple value + # ------------------- + else: + return v + + +def _js_to_py(v, widget_manager): + """ + Javascript -> Python ipywidget deserializer + + Parameters + ---------- + v + Object to be deserialized + widget_manager + ipywidget widget_manager (unused) + + Returns + ------- + any + Deserialized object for use by the Python side of the library + """ + # Handle dict + # ----------- + if isinstance(v, dict): + return {k: _js_to_py(v, widget_manager) for k, v in v.items()} + + # Handle list/tuple + # ----------------- + elif isinstance(v, (list, tuple)): + return [_js_to_py(v, widget_manager) for v in v] + + # Handle Undefined + # ---------------- + elif isinstance(v, str) and v == "_undefined_": + return Undefined + + # Handle simple value + # ------------------- + else: + return v + + +# Custom serializer dict for use in ipywidget traitlet definitions +custom_serializers = {"from_json": _js_to_py, "to_json": _py_to_js} |