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

plotly.js v2.28.0 compatibility needs huge rework of core API #441

Open
kMutagene opened this issue Feb 5, 2024 · 1 comment
Open

plotly.js v2.28.0 compatibility needs huge rework of core API #441

kMutagene opened this issue Feb 5, 2024 · 1 comment
Labels
Area: Core API Area: MissingAbstraction Plotly.js functionality that has to be implemented Type: Enhancement

Comments

@kMutagene
Copy link
Collaborator

https://github.com/plotly/plotly.js/releases/tag/v2.28.0 introduces an option to set objects for encoded typedarrays for basically all fields that provide data to traces (e.g. x and y for a cartesian plot).

an object with keys dtype, bdata, and optionally shape. In this 3rd form, dtype is one of f8, f4. i4, u4, i2, u2, i1, u1 or u1c for Uint8ClampedArray. In addition to shorthand dtype above one could also use the following forms: float64, float32, int32, uint32, int16, uint16, int8, uint8 or uint8c for Uint8ClampedArray. bdata is either a base64-encoded string or the ArrayBuffer of an integer or float typed array. For either multi-dimensional arrays you must also provide its dimensions separated by comma via shape. For example using dtype: f4 and shape: 5,100 you can declare a 2-D array that has 5 rows and 100 columns containing float32 values i.e. 4 bits per value. shape is optional for one dimensional arrays.

Plotly.NET's API is statically typed and currently uses sequences of #IConvertible for these fields. This was a clever trick because this allows setting any of the CLR runtime types Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, DateTime, Char, and String while also making it very easy to serialize.

The new way of setting data_arrays seems to have speed advantages, and is therefore worth to be supported well from our side. A straightforward way of implementing this in the API providing a new type, e.g.

type EncodedTypedArray {
    bdata: <string or maybe byte []?>
    dtype: <some type abstraction>
    shape: <some shape abstraction>
}

this type would also need functionality to encode the base64 string in a way that is understood by plotly.js. Maybe the python implementation's codebase can help here, as they seem to implement these functions as well.

Due to these large changes that also must be reflected on the CSharp lib, support for plotly.js >= v2.28.0 will be moved to the major release of Plotly.NET 6.0

@kMutagene kMutagene added this to the Plotly.NET 6.0 milestone Feb 5, 2024
@kMutagene kMutagene added Type: Enhancement Area: MissingAbstraction Plotly.js functionality that has to be implemented Area: Core API labels Feb 5, 2024
@kMutagene
Copy link
Collaborator Author

Alternative: implement a really basic version of this first that offloads base64 encoding, shape, and datatype selection purely to the user and just provide the EncodedTypedArray type and overloads for the API taking these as alternative arguments for data.

This way, it would be possible to add this to v5 or a minor release of v5.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: Core API Area: MissingAbstraction Plotly.js functionality that has to be implemented Type: Enhancement
Projects
None yet
Development

No branches or pull requests

1 participant