TABLES

From ASCEND
Revision as of 09:04, 17 February 2026 by Jpye (talk | contribs) (category)
Jump to navigation Jump to search

This document captures the current v0.5 concept for tabular data syntax in ASCEND. It is a language design draft, not a complete implementation specification.

Goals

  • Keep ASCEND’s explicit, type-aware style.
  • Minimize repetitive boilerplate for indexed data.
  • Support both compact in-model data and external datasets.
  • Preserve dimensional/unit checking as a first-class feature.

New Declarations

1) TABLE

Intended for two-axis table data mapped to existing arrays.

Header:

TABLE <array_name>[<row_index_set>,<col_index_set>] [POSITIONAL] [DEFAULT <expr>];

Body and ending:

...
END TABLE;
<source lang=ascend>

Rules:

* Default (non-<code>POSITIONAL</code>) form:
  * first row contains column labels.
  * subsequent rows contain row label followed by row values.
  * <code>:</code> after row label is optional.
* Sparse form:
  * no header row required.
  * each row uses <code><col_label>=<value></code> pairs.
  * <code>DEFAULT <expr></code> indicates unspecified cells are filled with the default.
  * <code>POSITIONAL</code> form:
  * no row/column labels in body.
  * values are interpreted positionally from set ordering.
* Row separator:
  * newline is the natural row separator.
  * <code>;</code> immediately before newline joins lines, so one logical row can wrap across physical lines.

Examples:

<source lang=ascend>
TABLE ship_cost[customer,facility];
    1 2 3
    1 2 4 5
    2 3;
    1 2
    3 4 2 1
    4 5 3 2
END TABLE;
TABLE ship_cost[customer,facility] DEFAULT 0;
    1: 1=2 2=4 3=5
    2: 1=3 2=1 3=2
    4 1=5 3=2
END TABLE;
TABLE c[city,city] POSITIONAL;
    0 89 22 11
    21 0 94 77
    11 19 0 35
    79 33 99 0
END TABLE;

2) VALUES

Intended for vectors and sparse ND assignments.

VALUES <array_name>[<index_set>, ...] [DEFAULT <expr>];
   <k1>[,<k2>...] = <value>;
   ...
END VALUES;

Example:

VALUES demand[customer] DEFAULT 0;
    1 = 45;
    2 = 30;
    3 = 40;
    4 = 35;
END VALUES;

3) DATASET

Intended for external files, especially large time-series and operational data.

DATASET <dataset_name> FROM "file.csv";
INDEX <set_name> FROM COLUMN <col_name> IS_A <type_name>;
<array_name>[<index_set>] FROM COLUMN <col_name> [{<units>}] [IS_A <type_name>];
...
END DATASET;

Example:

DATASET ops FROM "ops.csv";
    INDEX t FROM COLUMN timestamp IS_A time;
    load[t] FROM COLUMN load_MW {MW};
END DATASET;

Notes:

  • DATASET map targets must be indexed (name[...]).
  • If IS_A is omitted on a map line, a default type (planned: real_constant, dimensionless) can be assumed during compile/lowering.

Labels and Quoting

  • Identifier-like labels can be unquoted.
  • Labels with spaces/punctuation require symbol-constant quoting: 'New York'

Units Concept

  • Unit metadata may come from file metadata/rows (future data-handler behavior).
  • Inline units in DATASET mappings are allowed and should be checked for compatibility against declared type dimensions.