Skip to content

Commit 61aa4ea

Browse files
committed
add b64 file for tests
1 parent c363f3e commit 61aa4ea

File tree

1 file changed

+82
-0
lines changed
  • packages/python/plotly/plotly/tests

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import numpy as np
2+
import base64
3+
4+
plotlyjsShortTypes = {
5+
"int8": "i1",
6+
"uint8": "u1",
7+
"int16": "i2",
8+
"uint16": "u2",
9+
"int32": "i4",
10+
"uint32": "u4",
11+
"float32": "f4",
12+
"float64": "f8",
13+
}
14+
15+
int8min = -128
16+
int8max = 127
17+
int16min = -32768
18+
int16max = 32767
19+
int32min = -2147483648
20+
int32max = 2147483647
21+
22+
uint8max = 255
23+
uint16max = 65535
24+
uint32max = 4294967295
25+
26+
27+
def b64(v):
28+
"""
29+
Convert numpy array to plotly.js typed array sepc
30+
If not possible return the original value
31+
"""
32+
33+
if not isinstance(v, np.ndarray):
34+
return v
35+
36+
dtype = str(v.dtype)
37+
38+
# convert default Big Ints until we could support them in plotly.js
39+
if dtype == "int64":
40+
max = v.max()
41+
min = v.min()
42+
if max <= int8max and min >= int8min:
43+
v = v.astype("int8")
44+
elif max <= int16max and min >= int16min:
45+
v = v.astype("int16")
46+
elif max <= int32max and min >= int32min:
47+
v = v.astype("int32")
48+
else:
49+
return v
50+
51+
elif dtype == "uint64":
52+
max = v.max()
53+
min = v.min()
54+
if max <= uint8max and min >= 0:
55+
v = v.astype("uint8")
56+
elif max <= uint16max and min >= 0:
57+
v = v.astype("uint16")
58+
elif max <= uint32max and min >= 0:
59+
v = v.astype("uint32")
60+
else:
61+
return v
62+
63+
dtype = str(v.dtype)
64+
65+
if dtype in plotlyjsShortTypes:
66+
arrObj = {
67+
"dtype": plotlyjsShortTypes[dtype],
68+
"bdata": base64.b64encode(v).decode("ascii"),
69+
}
70+
71+
if v.ndim > 1:
72+
arrObj["shape"] = str(v.shape)[1:-1]
73+
74+
print(arrObj)
75+
76+
return arrObj
77+
78+
return v
79+
80+
81+
def _b64(v):
82+
return b64(np.array(v))

0 commit comments

Comments
 (0)