diff --git a/packages/python/plotly/_plotly_utils/basevalidators.py b/packages/python/plotly/_plotly_utils/basevalidators.py index 2b799c474cb..e0c93699e72 100644 --- a/packages/python/plotly/_plotly_utils/basevalidators.py +++ b/packages/python/plotly/_plotly_utils/basevalidators.py @@ -7,7 +7,6 @@ from importlib import import_module import copy import io -from copy import deepcopy import re import sys @@ -2662,24 +2661,20 @@ def validate_coerce(self, v, skip_invalid=False, _validate=True): for v_el in v: if isinstance(v_el, BaseTraceType): - # Clone input traces - v_el = v_el.to_plotly_json() + if isinstance(v_el, Histogram2dcontour): + v_el = dict(type="histogram2dcontour", **v_el._props) + else: + v_el = v_el._props if isinstance(v_el, dict): - v_copy = deepcopy(v_el) - - if "type" in v_copy: - trace_type = v_copy.pop("type") - elif isinstance(v_el, Histogram2dcontour): - trace_type = "histogram2dcontour" - else: - trace_type = "scatter" + type_in_v_el = "type" in v_el + trace_type = v_el.pop("type", "scatter") if trace_type not in self.class_strs_map: if skip_invalid: # Treat as scatter trace trace = self.get_trace_class("scatter")( - skip_invalid=skip_invalid, _validate=_validate, **v_copy + skip_invalid=skip_invalid, _validate=_validate, **v_el ) res.append(trace) else: @@ -2687,9 +2682,13 @@ def validate_coerce(self, v, skip_invalid=False, _validate=True): invalid_els.append(v_el) else: trace = self.get_trace_class(trace_type)( - skip_invalid=skip_invalid, _validate=_validate, **v_copy + skip_invalid=skip_invalid, _validate=_validate, **v_el ) res.append(trace) + + if type_in_v_el: + # Restore type in v_el + v_el["type"] = trace_type else: if skip_invalid: # Add empty scatter trace