Skip to content

Commit 3e7a0ec

Browse files
committed
Remove dtype from Desc
1 parent f01e33c commit 3e7a0ec

13 files changed

+87
-116
lines changed

data_prototype/artist.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from typing import Sequence
22

3-
import numpy as np
4-
53
from .containers import DataContainer, ArrayContainer, DataUnion
64
from .description import Desc, desc_like
75
from .conversion_edge import Edge, TransformEdge
@@ -73,7 +71,7 @@ def draw(self, renderer, edges=None):
7371
edges = []
7472

7573
if self.axes is not None:
76-
desc: Desc = Desc(("N",), np.dtype("f8"), coordinates="data")
74+
desc: Desc = Desc(("N",), coordinates="data")
7775
xy: dict[str, Desc] = {"x": desc, "y": desc}
7876
edges.append(
7977
TransformEdge(

data_prototype/containers.py

+11-15
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,7 @@ def __init__(self, **data):
8686
self._data = data
8787
self._cache_key = str(uuid.uuid4())
8888
self._desc = {
89-
k: (
90-
Desc(v.shape, v.dtype)
91-
if isinstance(v, np.ndarray)
92-
else Desc((), type(v))
93-
)
89+
k: (Desc(v.shape) if isinstance(v, np.ndarray) else Desc(()))
9490
for k, v in data.items()
9591
}
9692

@@ -117,7 +113,7 @@ def update(self, **data):
117113

118114
class RandomContainer:
119115
def __init__(self, **shapes):
120-
self._desc = {k: Desc(s, np.dtype(float)) for k, s in shapes.items()}
116+
self._desc = {k: Desc(s) for k, s in shapes.items()}
121117

122118
def query(
123119
self,
@@ -171,7 +167,7 @@ def __init__(
171167
def _split(input_dict):
172168
out = {}
173169
for k, (shape, func) in input_dict.items():
174-
self._desc[k] = Desc(shape, np.dtype(float))
170+
self._desc[k] = Desc(shape)
175171
out[k] = func
176172
return out
177173

@@ -196,7 +192,7 @@ def query(
196192
# if hash_key in self._cache:
197193
# return self._cache[hash_key], hash_key
198194

199-
desc = Desc(("N",), np.dtype("f8"))
195+
desc = Desc(("N",))
200196
xy = {"x": desc, "y": desc}
201197
data_lim = graph.evaluator(
202198
desc_like(xy, coordinates="data"),
@@ -243,8 +239,8 @@ def __init__(self, raw_data, num_bins: int):
243239
self._raw_data = raw_data
244240
self._num_bins = num_bins
245241
self._desc = {
246-
"edges": Desc((num_bins + 1 + 2,), np.dtype(float)),
247-
"density": Desc((num_bins + 2,), np.dtype(float)),
242+
"edges": Desc((num_bins + 1 + 2,)),
243+
"density": Desc((num_bins + 2,)),
248244
}
249245
self._full_range = (raw_data.min(), raw_data.max())
250246
self._cache: MutableMapping[Union[str, int], Any] = LFUCache(64)
@@ -256,7 +252,7 @@ def query(
256252
) -> Tuple[Dict[str, Any], Union[str, int]]:
257253
dmin, dmax = self._full_range
258254

259-
desc = Desc(("N",), np.dtype("f8"))
255+
desc = Desc(("N",))
260256
xy = {"x": desc, "y": desc}
261257
data_lim = graph.evaluator(
262258
desc_like(xy, coordinates="data"),
@@ -302,8 +298,8 @@ def __init__(self, series: pd.Series, *, index_name: str, col_name: str):
302298
self._index_name = index_name
303299
self._col_name = col_name
304300
self._desc = {
305-
index_name: Desc((len(series),), series.index.dtype),
306-
col_name: Desc((len(series),), series.dtype),
301+
index_name: Desc((len(series),)),
302+
col_name: Desc((len(series),)),
307303
}
308304
self._hash_key = str(uuid.uuid4())
309305

@@ -343,9 +339,9 @@ def __init__(
343339

344340
self._desc: Dict[str, Desc] = {}
345341
if self._index_name is not None:
346-
self._desc[self._index_name] = Desc((len(df),), df.index.dtype)
342+
self._desc[self._index_name] = Desc((len(df),))
347343
for col, out in self._col_name_dict.items():
348-
self._desc[out] = Desc((len(df),), df[col].dtype)
344+
self._desc[out] = Desc((len(df),))
349345

350346
self._hash_key = str(uuid.uuid4())
351347

data_prototype/conversion_edge.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ def from_coords(
8383
# supply only the input/output coordinates for many things
8484
# could also see lowering default weight for this edge, but just defaulting everything to 1 for now
8585
inp = {
86-
k: v if isinstance(v, Desc) else Desc(("N",), np.dtype("f8"), v)
87-
for k, v in input.items()
86+
k: v if isinstance(v, Desc) else Desc(("N",), v) for k, v in input.items()
8887
}
8988
outp = {k: desc_like(v, coordinates=output) for k, v in inp.items()}
9089

@@ -139,9 +138,9 @@ def from_func(
139138
import inspect
140139

141140
input_vars = inspect.signature(func).parameters.keys()
142-
input = {k: Desc(("N",), np.dtype("f8"), input) for k in input_vars}
141+
input = {k: Desc(("N",), input) for k in input_vars}
143142
if isinstance(output, str):
144-
output = {k: Desc(("N",), np.dtype("f8"), output) for k in input.keys()}
143+
output = {k: Desc(("N",), output) for k in input.keys()}
145144

146145
return cls(name, input, output, weight, inverse is not None, func, inverse)
147146

data_prototype/description.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from dataclasses import dataclass
22
from typing import TypeAlias, Tuple, Union, overload
33

4-
import numpy as np
5-
64

75
ShapeSpec: TypeAlias = Tuple[Union[str, int], ...]
86

@@ -16,7 +14,6 @@ class Desc:
1614
# - what is the relative size to the other variable values (N vs N+1)
1715
# We are probably going to have to implement a DSL for this (😞)
1816
shape: ShapeSpec
19-
dtype: np.dtype
2017
coordinates: str = "auto"
2118

2219
@staticmethod
@@ -122,22 +119,20 @@ def compatible(a: dict[str, "Desc"], b: dict[str, "Desc"]) -> bool:
122119

123120

124121
@overload
125-
def desc_like(desc: Desc, shape=None, dtype=None, coordinates=None) -> Desc: ...
122+
def desc_like(desc: Desc, shape=None, coordinates=None) -> Desc: ...
126123

127124

128125
@overload
129126
def desc_like(
130-
desc: dict[str, Desc], shape=None, dtype=None, coordinates=None
127+
desc: dict[str, Desc], shape=None, coordinates=None
131128
) -> dict[str, Desc]: ...
132129

133130

134-
def desc_like(desc, shape=None, dtype=None, coordinates=None):
131+
def desc_like(desc, shape=None, coordinates=None):
135132
if isinstance(desc, dict):
136-
return {k: desc_like(v, shape, dtype, coordinates) for k, v in desc.items()}
133+
return {k: desc_like(v, shape, coordinates) for k, v in desc.items()}
137134
if shape is None:
138135
shape = desc.shape
139-
if dtype is None:
140-
dtype = desc.dtype
141136
if coordinates is None:
142137
coordinates = desc.coordinates
143-
return Desc(shape, dtype, coordinates)
138+
return Desc(shape, coordinates)

data_prototype/image.py

+10-18
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
from typing import Sequence
22

33
import matplotlib.cm as mcm
4-
import matplotlib.colors as mcolors
54
import matplotlib.transforms as mtransforms
6-
import numpy as np
75

86
from .artist import Artist
97
from .description import Desc, desc_like
@@ -14,21 +12,15 @@ class Image(Artist):
1412
def __init__(self, container, edges=None, **kwargs):
1513
super().__init__(container, edges, **kwargs)
1614

17-
strdesc = Desc((), str)
18-
arrdesc = Desc(("M", "N"), np.float64)
19-
normdesc = Desc((), mcolors.Normalize, "norm")
20-
cmapdesc = Desc((), mcolors.Colormap, "cmap")
15+
strdesc = Desc(())
16+
arrdesc = Desc(("M", "N"))
17+
normdesc = Desc((), "norm")
18+
cmapdesc = Desc((), "cmap")
2119

2220
self._edges += [
23-
CoordinateEdge.from_coords(
24-
"A_pcolor", {"A": Desc(("M", "N"), np.float64)}, "data"
25-
),
26-
CoordinateEdge.from_coords(
27-
"A_rgb", {"A": Desc(("M", "N", 3), np.float64)}, "rgb"
28-
),
29-
CoordinateEdge.from_coords(
30-
"A_rgba", {"A": Desc(("M", "N", 4), np.float64)}, "rgba"
31-
),
21+
CoordinateEdge.from_coords("A_pcolor", {"A": Desc(("M", "N"))}, "data"),
22+
CoordinateEdge.from_coords("A_rgb", {"A": Desc(("M", "N", 3))}, "rgb"),
23+
CoordinateEdge.from_coords("A_rgba", {"A": Desc(("M", "N", 4))}, "rgba"),
3224
FuncEdge.from_func(
3325
"norm_obj",
3426
lambda norm: mcm._auto_norm_from_scale(norm),
@@ -51,12 +43,12 @@ def __init__(self, container, edges=None, **kwargs):
5143
"A_cmap",
5244
lambda A, cmap: cmap(A),
5345
{"A": desc_like(arrdesc, coordinates="norm"), "cmap": cmapdesc},
54-
{"A": Desc(("M", "N", 4), np.float64, coordinates="rgba")},
46+
{"A": Desc(("M", "N", 4), coordinates="rgba")},
5547
),
5648
DefaultEdge.from_default_value("cmap_def", "cmap", strdesc, "viridis"),
5749
DefaultEdge.from_default_value("norm_def", "norm", strdesc, "linear"),
5850
CoordinateEdge.from_coords(
59-
"A_rgba", {"A": Desc(("M", "N", 4), np.float64, "rgba")}, "display"
51+
"A_rgba", {"A": Desc(("M", "N", 4), "rgba")}, "display"
6052
),
6153
]
6254

@@ -68,7 +60,7 @@ def draw(self, renderer, edges: Sequence[Edge]) -> None:
6860
plt.show()
6961
conv = g.evaluator(
7062
self._container.describe(),
71-
{"A": Desc(("M", "N", 4), np.float64, "display")},
63+
{"A": Desc(("M", "N", 4), "display")},
7264
)
7365
query, _ = self._container.query(g)
7466
image = conv.evaluate(query)["A"]

data_prototype/line.py

+27-39
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,34 @@ class Line(Artist):
1616
def __init__(self, container, edges=None, **kwargs):
1717
super().__init__(container, edges, **kwargs)
1818

19-
colordesc = Desc((), str, "display") # ... this needs thinking...
20-
floatdesc = Desc((), float, "display")
21-
strdesc = Desc((), str, "display")
19+
scalar = Desc((), "display") # ... this needs thinking...
2220

2321
self._edges += [
2422
CoordinateEdge.from_coords("xycoords", {"x": "auto", "y": "auto"}, "data"),
25-
CoordinateEdge.from_coords("color", {"color": Desc((), str)}, "display"),
23+
CoordinateEdge.from_coords("color", {"color": Desc(())}, "display"),
24+
CoordinateEdge.from_coords("linewidth", {"linewidth": Desc(())}, "display"),
25+
CoordinateEdge.from_coords("linestyle", {"linestyle": Desc(())}, "display"),
2626
CoordinateEdge.from_coords(
27-
"linewidth", {"linewidth": Desc((), np.dtype("f8"))}, "display"
27+
"markeredgecolor", {"markeredgecolor": Desc(())}, "display"
2828
),
2929
CoordinateEdge.from_coords(
30-
"linestyle", {"linestyle": Desc((), str)}, "display"
30+
"markerfacecolor", {"markerfacecolor": Desc(())}, "display"
3131
),
3232
CoordinateEdge.from_coords(
33-
"markeredgecolor", {"markeredgecolor": Desc((), str)}, "display"
33+
"markersize", {"markersize": Desc(())}, "display"
3434
),
3535
CoordinateEdge.from_coords(
36-
"markerfacecolor", {"markerfacecolor": Desc((), str)}, "display"
36+
"markeredgewidth", {"markeredgewidth": Desc(())}, "display"
3737
),
38-
CoordinateEdge.from_coords(
39-
"markersize", {"markersize": Desc((), float)}, "display"
40-
),
41-
CoordinateEdge.from_coords(
42-
"markeredgewidth", {"markeredgewidth": Desc((), float)}, "display"
43-
),
44-
CoordinateEdge.from_coords("marker", {"marker": Desc((), str)}, "display"),
45-
DefaultEdge.from_default_value("color_def", "color", colordesc, "C0"),
46-
DefaultEdge.from_default_value("linewidth_def", "linewidth", floatdesc, 1),
47-
DefaultEdge.from_default_value("linestyle_def", "linestyle", strdesc, "-"),
48-
DefaultEdge.from_default_value(
49-
"mec_def", "markeredgecolor", colordesc, "C0"
50-
),
51-
DefaultEdge.from_default_value(
52-
"mfc_def", "markerfacecolor", colordesc, "C0"
53-
),
54-
DefaultEdge.from_default_value("ms_def", "markersize", floatdesc, 6),
55-
DefaultEdge.from_default_value("mew_def", "markeredgewidth", floatdesc, 1),
56-
DefaultEdge.from_default_value("marker_def", "marker", strdesc, "None"),
38+
CoordinateEdge.from_coords("marker", {"marker": Desc(())}, "display"),
39+
DefaultEdge.from_default_value("color_def", "color", scalar, "C0"),
40+
DefaultEdge.from_default_value("linewidth_def", "linewidth", scalar, 1),
41+
DefaultEdge.from_default_value("linestyle_def", "linestyle", scalar, "-"),
42+
DefaultEdge.from_default_value("mec_def", "markeredgecolor", scalar, "C0"),
43+
DefaultEdge.from_default_value("mfc_def", "markerfacecolor", scalar, "C0"),
44+
DefaultEdge.from_default_value("ms_def", "markersize", scalar, 6),
45+
DefaultEdge.from_default_value("mew_def", "markeredgewidth", scalar, 1),
46+
DefaultEdge.from_default_value("marker_def", "marker", scalar, "None"),
5747
]
5848
# Currently ignoring:
5949
# - cap/join style
@@ -70,22 +60,20 @@ def __init__(self, container, edges=None, **kwargs):
7060

7161
def draw(self, renderer, edges: Sequence[Edge]) -> None:
7262
g = Graph(list(edges) + self._edges)
73-
desc = Desc(("N",), np.dtype("f8"), "display")
74-
colordesc = Desc((), str, "display") # ... this needs thinking...
75-
floatdesc = Desc((), float, "display")
76-
strdesc = Desc((), str, "display")
63+
desc = Desc(("N",), "display")
64+
scalar = Desc((), "display") # ... this needs thinking...
7765

7866
require = {
7967
"x": desc,
8068
"y": desc,
81-
"color": colordesc,
82-
"linewidth": floatdesc,
83-
"linestyle": strdesc,
84-
"markeredgecolor": colordesc,
85-
"markerfacecolor": colordesc,
86-
"markersize": floatdesc,
87-
"markeredgewidth": floatdesc,
88-
"marker": strdesc,
69+
"color": scalar,
70+
"linewidth": scalar,
71+
"linestyle": scalar,
72+
"markeredgecolor": scalar,
73+
"markerfacecolor": scalar,
74+
"markersize": scalar,
75+
"markeredgewidth": scalar,
76+
"marker": scalar,
8977
}
9078

9179
conv = g.evaluator(self._container.describe(), require)

data_prototype/wrappers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def _query_and_transform(self, renderer) -> Dict[str, Any]:
132132

133133
# actually query the underlying data. This returns both the (raw) data
134134
# and key to use for caching.
135-
desc = Desc(("N",), np.dtype("f8"), coordinates="data")
135+
desc = Desc(("N",), coordinates="data")
136136
xy = {"x": desc, "y": desc}
137137
edges = [
138138
TransformEdge(

examples/animation.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
from data_prototype.conversion_node import FunctionConversionNode
2424

2525
from data_prototype.wrappers import FormattedText
26-
from data_prototype.artist import Line, CompatibilityArtist as CA
26+
from data_prototype.artist import CompatibilityArtist as CA
27+
from data_prototype.line import Line
2728

2829

2930
class SinOfTime:
@@ -33,10 +34,10 @@ class SinOfTime:
3334

3435
def describe(self):
3536
return {
36-
"x": Desc([self.N], float),
37-
"y": Desc([self.N], float),
38-
"phase": Desc([], float),
39-
"time": Desc([], float),
37+
"x": Desc((self.N,)),
38+
"y": Desc((self.N,)),
39+
"phase": Desc(()),
40+
"time": Desc(()),
4041
}
4142

4243
def query(

examples/data_frame.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
import numpy as np
1212
import pandas as pd
1313

14-
from data_prototype.artist import Line, CompatibilityArtist as CA
14+
from data_prototype.artist import CompatibilityArtist as CA
15+
from data_prototype.line import Line
1516
from data_prototype.containers import DataFrameContainer
1617

1718
th = np.linspace(0, 4 * np.pi, 256)

examples/lissajous.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ class Lissajous:
3232

3333
def describe(self):
3434
return {
35-
"x": Desc([self.N], float),
36-
"y": Desc([self.N], float),
37-
"time": Desc([], float),
38-
"sizes": Desc([], float),
39-
"paths": Desc([], float),
40-
"edgecolors": Desc([], str),
41-
"facecolors": Desc([self.N], str),
35+
"x": Desc((self.N,)),
36+
"y": Desc((self.N,)),
37+
"time": Desc(()),
38+
"sizes": Desc(()),
39+
"paths": Desc(()),
40+
"edgecolors": Desc(()),
41+
"facecolors": Desc((self.N,)),
4242
}
4343

4444
def query(

0 commit comments

Comments
 (0)