Visualize.Shape.LineNx (Visualize v0.2.25)

Copy Markdown View Source

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

batch_transform(xs, ys, x_domain, x_range, y_domain, y_range)

@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.

generate_path(xs, ys, opts \\ [])

@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 to Visualize.Shape.Curve.generate/3 (default: :linear)
  • :curve_opts - the curve's option keyword list (default: [])

generate_path_raw(xs, ys)

@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.

to_base64(xs, ys, x_domain, x_range, y_domain, y_range, opts \\ [])

@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.

to_binary(xs, ys, x_domain, x_range, y_domain, y_range, opts \\ [])

@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.