Skip to content

[BUG]: Integer and string properties reject NumPy scalars #5827

Open

Description

@RaphaelFakhri

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

  1. camdecoster commented on Oct 19, 2026

    @camdecoster
    Contributor

    I'll review your PR and follow up there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions