Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement __copy__ and __deepcopy__ methods for HexCode #54

Open
mezarque opened this issue Aug 22, 2024 · 1 comment
Open

Implement __copy__ and __deepcopy__ methods for HexCode #54

mezarque opened this issue Aug 22, 2024 · 1 comment
Labels
bug Something isn't working enhancement New feature or request

Comments

@mezarque
Copy link
Member

mezarque commented Aug 22, 2024

Overview

When trying to use HexCode objects in plotly (not currently supported), we can run into problems caused by the way that plotly handles color objects; namely, that it uses deepcopy at some point in the figure generation process to create a copy of an input color object. Because of the way we developed HexCode to inherit from str, we don't currently override the __copy__ or __deepcopy__ methods. My guess is that this results in a problem when deepcopy is used on a HexCode object.

Example

Example Plotly code that causes an error:

import plotly.express as px

import arcadia_pycolor as apc

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
c = ['A', 'B', 'A', 'A', 'B']

cmap = {
    'A': apc.teal,
    'B': apc.tangerine,
}

px.scatter(x, y, color = c, color_discrete_map=cmap)

Full traceback of error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[5], [line 15](vscode-notebook-cell:?execution_count=5&line=15)
      [8](vscode-notebook-cell:?execution_count=5&line=8) c = ['A', 'B', 'A', 'A', 'B']
     [10](vscode-notebook-cell:?execution_count=5&line=10) cmap = {
     [11](vscode-notebook-cell:?execution_count=5&line=11)     'A': apc.teal,
     [12](vscode-notebook-cell:?execution_count=5&line=12)     'B': apc.tangerine,
     [13](vscode-notebook-cell:?execution_count=5&line=13) }
---> [15](vscode-notebook-cell:?execution_count=5&line=15) px.scatter(x, y, color = c, color_discrete_map=cmap)

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:66, in scatter(data_frame, x, y, color, symbol, size, hover_name, hover_data, custom_data, text, facet_row, facet_col, facet_col_wrap, facet_row_spacing, facet_col_spacing, error_x, error_x_minus, error_y, error_y_minus, animation_frame, animation_group, category_orders, labels, orientation, color_discrete_sequence, color_discrete_map, color_continuous_scale, range_color, color_continuous_midpoint, symbol_sequence, symbol_map, opacity, size_max, marginal_x, marginal_y, trendline, trendline_options, trendline_color_override, trendline_scope, log_x, log_y, range_x, range_y, render_mode, title, template, width, height)
     [12](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:12) def scatter(
     [13](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:13)     data_frame=None,
     [14](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:14)     x=None,
   (...)
     [60](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:60)     height=None,
     [61](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:61) ) -> go.Figure:
     [62](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:62)     """
     [63](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:63)     In a scatter plot, each row of `data_frame` is represented by a symbol
     [64](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:64)     mark in 2D space.
     [65](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:65)     """
---> [66](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_chart_types.py:66)     return make_figure(args=locals(), constructor=go.Scatter)

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2332, in make_figure(args, constructor, trace_patch, layout_patch)
   [2323](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2323)         _set_trace_grid_reference(
   [2324](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2324)             trace,
   [2325](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2325)             fig.layout,
   (...)
   [2328](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2328)             trace._subplot_col,
   [2329](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2329)         )
   [2331](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2331) # Add traces, layout and frames to figure
-> [2332](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2332) fig.add_traces(frame_list[0]["data"] if len(frame_list) > 0 else [])
   [2333](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2333) fig.update_layout(layout_patch)
   [2334](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/express/_core.py:2334) if "template" in args and args["template"] is not None:

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:980, in Figure.add_traces(self, data, rows, cols, secondary_ys, exclude_empty_subplots)
    [904](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:904) def add_traces(
    [905](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:905)     self,
    [906](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:906)     data,
   (...)
    [910](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:910)     exclude_empty_subplots=False,
    [911](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:911) ) -> "Figure":
    [912](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:912)     """
    [913](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:913) 
    [914](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:914)     Add traces to the figure
   (...)
    [978](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:978) 
    [979](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:979)     """
--> [980](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:980)     return super(Figure, self).add_traces(
    [981](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:981)         data, rows, cols, secondary_ys, exclude_empty_subplots
    [982](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_figure.py:982)     )

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2192, in BaseFigure.add_traces(self, data, rows, cols, secondary_ys, exclude_empty_subplots)
   [2124](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2124) """
   [2125](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2125) Add traces to the figure
   [2126](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2126) 
   (...)
   [2188](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2188) Figure(...)
   [2189](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2189) """
   [2191](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2191) # Validate traces
-> [2192](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2192) data = self._data_validator.validate_coerce(data)
   [2194](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2194) # Set trace indexes
   [2195](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:2195) for ind, new_trace in enumerate(data):

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2684, in BaseDataValidator.validate_coerce(self, v, skip_invalid, _validate)
   [2682](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2682)         invalid_els.append(v_el)
   [2683](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2683) else:
-> [2684](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2684)     trace = self.get_trace_class(trace_type)(
   [2685](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2685)         skip_invalid=skip_invalid, _validate=_validate, **v_el
   [2686](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2686)     )
   [2687](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2687)     res.append(trace)
   [2689](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2689) if type_in_v_el:
   [2690](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/_plotly_utils/basevalidators.py:2690)     # Restore type in v_el

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_scatter.py:3386, in Scatter.__init__(self, arg, alignmentgroup, cliponaxis, connectgaps, customdata, customdatasrc, dx, dy, error_x, error_y, fill, fillcolor, fillpattern, groupnorm, hoverinfo, hoverinfosrc, hoverlabel, hoveron, hovertemplate, hovertemplatesrc, hovertext, hovertextsrc, ids, idssrc, legend, legendgroup, legendgrouptitle, legendrank, legendwidth, line, marker, meta, metasrc, mode, name, offsetgroup, opacity, orientation, selected, selectedpoints, showlegend, stackgaps, stackgroup, stream, text, textfont, textposition, textpositionsrc, textsrc, texttemplate, texttemplatesrc, uid, uirevision, unselected, visible, x, x0, xaxis, xcalendar, xhoverformat, xperiod, xperiod0, xperiodalignment, xsrc, y, y0, yaxis, ycalendar, yhoverformat, yperiod, yperiod0, yperiodalignment, ysrc, **kwargs)
   [3384](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_scatter.py:3384) _v = marker if marker is not None else _v
   [3385](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_scatter.py:3385) if _v is not None:
-> [3386](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_scatter.py:3386)     self["marker"] = _v
   [3387](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_scatter.py:3387) _v = arg.pop("meta", None)
   [3388](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/graph_objs/_scatter.py:3388) _v = meta if meta is not None else _v

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:4868, in BasePlotlyType.__setitem__(self, prop, value)
   [4866](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:4866) # ### Handle compound property ###
   [4867](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:4867) if isinstance(validator, CompoundValidator):
-> [4868](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:4868)     self._set_compound_prop(prop, value)
   [4870](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:4870) # ### Handle compound array property ###
   [4871](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:4871) elif isinstance(validator, (CompoundArrayValidator, BaseDataValidator)):

File ~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:5290, in BasePlotlyType._set_compound_prop(self, prop, val)
   [5287](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:5287)     curr_dict_val = None
   [5289](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:5289) if val is not None:
-> [5290](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:5290)     new_dict_val = deepcopy(val._props)
   [5291](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:5291) else:
   [5292](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/site-packages/plotly/basedatatypes.py:5292)     new_dict_val = None

File ~/miniconda3/envs/apc/lib/python3.12/copy.py:136, in deepcopy(x, memo, _nil)
    [134](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:134) copier = _deepcopy_dispatch.get(cls)
    [135](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:135) if copier is not None:
--> [136](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:136)     y = copier(x, memo)
    [137](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:137) else:
    [138](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:138)     if issubclass(cls, type):

File ~/miniconda3/envs/apc/lib/python3.12/copy.py:221, in _deepcopy_dict(x, memo, deepcopy)
    [219](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:219) memo[id(x)] = y
    [220](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:220) for key, value in x.items():
--> [221](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:221)     y[deepcopy(key, memo)] = deepcopy(value, memo)
    [222](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:222) return y

File ~/miniconda3/envs/apc/lib/python3.12/copy.py:162, in deepcopy(x, memo, _nil)
    [160](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:160)                 y = x
    [161](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:161)             else:
--> [162](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:162)                 y = _reconstruct(x, memo, *rv)
    [164](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:164) # If is its own copy, don't memoize.
    [165](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:165) if y is not x:

File ~/miniconda3/envs/apc/lib/python3.12/copy.py:253, in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    [251](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:251) if deep and args:
    [252](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:252)     args = (deepcopy(arg, memo) for arg in args)
--> [253](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:253) y = func(*args)
    [254](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:254) if deep:
    [255](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:255)     memo[id(x)] = y

File ~/miniconda3/envs/apc/lib/python3.12/copyreg.py:99, in __newobj__(cls, *args)
     [98](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copyreg.py:98) def __newobj__(cls, *args):
---> [99](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copyreg.py:99)     return cls.__new__(cls, *args)

TypeError: HexCode.__new__() missing 1 required positional argument: 'hex_code'

Solution

For now, users can use the .hex_code property of a HexCode object to circumvent this limitation of our implementation. In the long term, we should consider implementing overrides of __copy__ and __deepcopy__ into HexCode to more easily support plotly.

@mezarque mezarque added bug Something isn't working enhancement New feature or request labels Aug 22, 2024
@mezarque
Copy link
Member Author

Some validation that this is the reason:

from copy import deepcopy

deepcopy(apc.teal)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[6], [line 3](vscode-notebook-cell:?execution_count=6&line=3)
      [1](vscode-notebook-cell:?execution_count=6&line=1) from copy import deepcopy
----> [3](vscode-notebook-cell:?execution_count=6&line=3) deepcopy(apc.teal)

File ~/miniconda3/envs/apc/lib/python3.12/copy.py:162, in deepcopy(x, memo, _nil)
    [160](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:160)                 y = x
    [161](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:161)             else:
--> [162](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:162)                 y = _reconstruct(x, memo, *rv)
    [164](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:164) # If is its own copy, don't memoize.
    [165](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:165) if y is not x:

File ~/miniconda3/envs/apc/lib/python3.12/copy.py:253, in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    [251](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:251) if deep and args:
    [252](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:252)     args = (deepcopy(arg, memo) for arg in args)
--> [253](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:253) y = func(*args)
    [254](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:254) if deep:
    [255](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copy.py:255)     memo[id(x)] = y

File ~/miniconda3/envs/apc/lib/python3.12/copyreg.py:99, in __newobj__(cls, *args)
     [98](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copyreg.py:98) def __newobj__(cls, *args):
---> [99](https://file+.vscode-resource.vscode-cdn.net/Users/dennis/Code/arcadia-pycolor/~/miniconda3/envs/apc/lib/python3.12/copyreg.py:99)     return cls.__new__(cls, *args)

TypeError: HexCode.__new__() missing 1 required positional argument: 'hex_code'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant