Repository navigation
Description
Description
Graph object properties validated as integers (such as layout.xaxis.nticks, histogram.nbinsx and layout.updatemenus[].active) reject NumPy integer scalars, and properties validated as non-strict strings (such as name and text) reject NumPy integer and float32 scalars. Python int and float values of the same number are accepted, and number properties such as marker.size already accept NumPy scalars.
This breaks a common pattern: building one trace per value of a DataFrame column with Series.unique(), which returns NumPy scalars.
Expected: NumPy integers are accepted wherever a Python int is, and NumPy numbers are converted to strings the same way Python numbers are.
Steps to reproduce
import numpy as np
import pandas as pd
import plotly.graph_objects as go
df = pd.DataFrame({"year": [2020, 2021], "v": [1, 2]})
for label, call in [
("name", lambda: go.Scatter(name=df.year.unique()[0])),
("text", lambda: go.Scatter(text=np.float32(1.5))),
("nticks", lambda: go.Layout(xaxis_nticks=np.int64(5))),
("nbinsx", lambda: go.Histogram(nbinsx=np.int32(10))),
]:
try:
call()
print(label, "ok")
except ValueError as error:
print(label, str(error).splitlines()[1].strip())Actual:
name Invalid value of type 'numpy.int64' received for the 'name' property of scatter
text Invalid value of type 'numpy.float32' received for the 'text' property of scatter
nticks Invalid value of type 'numpy.int64' received for the 'nticks' property of layout.xaxis
nbinsx Invalid value of type 'numpy.int32' received for the 'nbinsx' property of histogram
Expected:
name ok
text ok
nticks ok
nbinsx ok
Notes
IntegerValidator checks isinstance(v, int) and StringValidator checks isinstance(v, (int, float)). NumPy integer types are not subclasses of int, so they fail both checks, while NumberValidator checks numbers.Number and accepts them. The error message for string properties says "A number that will be converted to a string", which a NumPy number is.
Reproduced with plotly 7.1.0 and current main (38374acd), NumPy 2.x, Python 3.12.
Activity
camdecoster commentedon Oct 19, 2026
I'll review your PR and follow up there.