Nx-accelerated line generator for high-performance path generation.
Uses Nx tensors for batch coordinate transformation, significantly faster than per-point function application for large datasets.
Performance
For 2000+ data points, this is 5-10x faster than the standard Line generator because it transforms all coordinates in a single vectorized operation.
Usage
# Prepare data as tensor-friendly format
xs = Enum.map(data, & &1.x)
ys = Enum.map(data, & &1.y)
# Generate path with batch transformation
path = LineNx.generate_path(xs, ys,
x_domain: {0, 100},
x_range: {0, 800},
y_domain: {0, 100},
y_range: {600, 0}
)
Summary
Functions
Batch transform coordinates using Nx tensors. Returns lists of scaled x and y values.
Generates a path from x and y coordinate lists using Nx batch transformation.
Generates path from pre-scaled coordinates (no transformation needed). Use this when coordinates are already in pixel space.
Generates path and renders to base64-encoded binary. Ready for use in HTML data attributes.
Generates path and renders directly to binary format in one step. Most efficient for Canvas rendering - avoids intermediate IR.Element.
Functions
@spec batch_transform( [number()], [number()], {number(), number()}, {number(), number()}, {number(), number()}, {number(), number()} ) :: {[float()], [float()]}
Batch transform coordinates using Nx tensors. Returns lists of scaled x and y values.
@spec generate_path([number()], [number()], keyword()) :: Visualize.IR.Path.t()
Generates a path from x and y coordinate lists using Nx batch transformation.
Options:
:x_domain- {min, max} input domain for x values:x_range- {min, max} output range for x values:y_domain- {min, max} input domain for y values:y_range- {min, max} output range for y values:curve- curve type passed toVisualize.Shape.Curve.generate/3(default::linear):curve_opts- the curve's option keyword list (default:[])
@spec generate_path_raw([number()], [number()]) :: Visualize.IR.Path.t()
Generates path from pre-scaled coordinates (no transformation needed). Use this when coordinates are already in pixel space.
@spec to_base64( [number()], [number()], {number(), number()}, {number(), number()}, {number(), number()}, {number(), number()}, keyword() ) :: String.t()
Generates path and renders to base64-encoded binary. Ready for use in HTML data attributes.
@spec to_binary( [number()], [number()], {number(), number()}, {number(), number()}, {number(), number()}, {number(), number()}, keyword() ) :: binary()
Generates path and renders directly to binary format in one step. Most efficient for Canvas rendering - avoids intermediate IR.Element.