aboutsummaryrefslogtreecommitdiff
path: root/venv/lib/python3.8/site-packages/plotly/serializers.py
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2025-07-31 17:27:24 -0400
committersotech117 <michael_foiani@brown.edu>2025-07-31 17:27:24 -0400
commit5bf22fc7e3c392c8bd44315ca2d06d7dca7d084e (patch)
tree8dacb0f195df1c0788d36dd0064f6bbaa3143ede /venv/lib/python3.8/site-packages/plotly/serializers.py
parentb832d364da8c2efe09e3f75828caf73c50d01ce3 (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.py105
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}