MultiTypeSymEntry

Usage

use MultiTypeSymEntry;

or

import MultiTypeSymEntry;
const genLogger = new Logger(logLevel, logChannel)
enum SymbolEntryType { AbstractSymEntry, TypedArraySymEntry, PrimitiveTypedArraySymEntry, ComplexTypedArraySymEntry, GenSymEntry, SegStringSymEntry, CompositeSymEntry, GenSparseSymEntry, SparseSymEntry, GeneratorSymEntry, AnythingSymEntry, UnknownSymEntry, None }
  • Internal Types we can use to build our Symbol type hierarchy.

  • We are making the types a little more concrete than using Strings

enum constant AbstractSymEntry
enum constant TypedArraySymEntry
enum constant PrimitiveTypedArraySymEntry
enum constant ComplexTypedArraySymEntry
enum constant GenSymEntry
enum constant SegStringSymEntry
enum constant CompositeSymEntry
enum constant GenSparseSymEntry
enum constant SparseSymEntry
enum constant GeneratorSymEntry
enum constant AnythingSymEntry
enum constant UnknownSymEntry
enum constant None
class AbstractSymEntry
  • This is the root of our SymbolTable Entry / Typing system.

  • All other SymEntry classes should inherit from this class

  • or one of its ancestors and ultimately everything should

  • be assignable/coercible to this class.

  • All subclasses should set & add their type to the assignableTypes

  • set so we can maintain & determine the type hierarchy.

var entryType : SymbolEntryType
var assignableTypes : set(SymbolEntryType)
var name = ""
proc init()
proc init(input)
proc setName(name: string)

Sets the name of the entry when it is added to the Symbol Table

proc isAssignableTo(entryType: SymbolEntryType) : bool
  • This can be used to help determine if a class can be

  • assigned / coerced / cast to another one in its hierarchy.

proc getSizeEstimate() : int
  • This is a hook for the ServerConfig.overMemLimit procedure

  • All concrete classes should override this method

proc entry__str__(thresh: int = 1, prefix: string = "", suffix: string = "", baseFormat: string = "") : string throws
  • Formats and returns data in this entry up to the specified threshold.

  • Arrays of size less than threshold will be printed in their entirety.

  • Arrays of size greater than or equal to threshold will print the first 3 and last 3 elements

  • arg thresh:

    threshold for data to return

  • type thresh:

    int

  • arg prefix:

    String to prepend to the front of the data string

  • type prefix:

    string

  • arg suffix:

    String to append to the tail of the data string

  • type suffix:

    string

  • arg baseFormat:

    String which represents the base format string for the data type

  • type baseFormat:

    string

  • returns:

    s (string) containing the array data

proc toSymEntry(gse: borrowed GenSymEntry, type etype, param dimensions = 1)

Casts a GenSymEntry to the specified type and returns it.

Arguments:

gse – generic sym entry

class GenSymEntry : AbstractSymEntry

This is a dummy class to avoid having to talk about specific instantiations of SymEntry. GenSymEntries can contain multiple SymEntries, but they represent a singular object. For example, SegArray contains the offsets and values array, but only the values are considered data.

var dtype : DType
var itemsize : int
var size : int = 0
var ndim : int = 1
var shape : string = "[0]"
proc init(type etype, len: int = 0, ndim: int = 1)

Create a 1D GenSymEntry from an array element type and length

override proc getSizeEstimate() : int
proc toSymEntry(type etype, param dimensions = 1)

Cast this GenSymEntry to borrowed SymEntry(etype)

This function will halt if the cast fails.

Arguments:

etype : typeSymEntry type parameter

override proc entry__str__(thresh: int = 1, prefix: string = "", suffix: string = "", baseFormat: string = "") : string throws

Formats and returns data in this entry up to the specified threshold. Arrays of size less than threshold will be printed in their entirety. Arrays of size greater than or equal to threshold will print the first 3 and last 3 elements

arg thresh:

threshold for data to return

type thresh:

int

arg prefix:

String to prepend to the front of the data string

type prefix:

string

arg suffix:

String to append to the tail of the data string

type suffix:

string

arg baseFormat:

String which represents the base format string for the data type

type baseFormat:

string

returns:

s (string) containing the array data

proc attrib() : string throws
class SymEntry : GenSymEntry

Symbol table entry

type etype

generic element type array etype is different from dtype (chapel vs numpy)

param dimensions : int

number of dimensions, to be passed back to the GenSymEntry so that we are able to make it visible to the Python client

var tupShape : dimensions*int

the actual shape of the array, this has to live here, since GenSymEntry has to stay generic

var a = makeDistArray(...tupShape, etype)

‘a’ is the distributed array whose value and type are defined by makeDist{Dom,Array}() to support varying distributions

proc aD

Removed domain accessor, use a.domain instead

var max_bits : int = -1

only used with bigint pdarrays

proc init(a: [?D] ?etype, max_bits = -1)  where MyDmap != Dmap.defaultRectangular && a.isDefaultRectangular()

Create a SymEntry from a defaultRectangular array (when the server is configured to create distributed arrays)

Arguments:

a : [] ?etype – array

proc init(in a: [?D] ?etype, max_bits = -1)

Create a SymEntry from an array

proc init(args: int ...?N, type etype)

Create a SymEntry from a shape and element type

Args len:

size of each dimension

Arguments:

etype : type – type to be instantiated

proc deinit()

Verbose flag utility method

override proc entry__str__(thresh: int = 6, prefix: string = "[", suffix: string = "]", baseFormat: string = "%\?") : string throws

Formats and returns data in this entry up to the specified threshold. Arrays of size less than threshold will be printed in their entirety. Arrays of size greater than or equal to threshold will print the first 3 and last 3 elements

arg thresh:

threshold for data to return

type thresh:

int

arg prefix:

String to pre-pend to the front of the data string

type prefix:

string

arg suffix:

String to append to the tail of the data string

type suffix:

string

arg baseFormat:

String which represents the base format string for the data type

type baseFormat:

string

returns:

s (string) containing the array data

proc createSymEntry(shape: int ..., type etype) throws
proc createSymEntry(in a: [?D] ?etype, max_bits = -1) throws
class CompositeSymEntry : AbstractSymEntry

Base class for any entry that consists of multiple SymEntries that have varying types. These entries are related, but do not represent a single object. For Example, group by contains multiple SymEntries that are all considered part of the dataset.

var ndim : int = 1
var size : int = 0
proc init(len: int = 0)
proc attrib() : string throws
proc createTypedSymEntry(len: int, type t) throws
  • Factory method for creating a typed SymEntry and checking mem limits

  • arg len:

    the number of elements to allocate

  • type len:

    int

  • arg t:

    the element type

  • type t:

    type

class SegStringSymEntry : GenSymEntry
type etype = string
var offsetsEntry : shared SymEntry(int, 1)
var bytesEntry : shared SymEntry(uint(8), 1)
proc init(offsetsSymEntry: shared SymEntry(int), bytesSymEntry: shared SymEntry(uint(8)), type etype)
override proc getSizeEstimate() : int
override proc entry__str__(thresh: int = 1, prefix: string = "", suffix: string = "", baseFormat: string = "") : string throws
  • Formats and returns data in this entry up to the specified threshold.

  • Arrays of size less than threshold will be printed in their entirety.

  • Arrays of size greater than or equal to threshold will print the first 3 and last 3 elements

  • arg thresh:

    threshold for data to return

  • type thresh:

    int

  • arg prefix:

    String to prepend to the front of the data string

  • type prefix:

    string

  • arg suffix:

    String to append to the tail of the data string

  • type suffix:

    string

  • arg baseFormat:

    String which represents the base format string for the data type

  • type baseFormat:

    string

  • returns:

    s (string) containing the array data

class GenSparseSymEntry : AbstractSymEntry
var dtype : DType
var itemsize : int
var size : int = 0
var nnz : int = 0
var ndim : int = 2
var shape : string = "[0,0]"
var layoutStr : string = "UNKNOWN"
proc init(type etype, size: int = 0, nnz: int, ndim: int = 2, layoutStr: string)

Create a 1D GenSymEntry from an array element type and length

proc toSparseSymEntry(type etype, param dimensions = 2, param layout)

Cast this SparseGenSymEntry to borrowed SparseSymEntry(etype)

This function will halt if the cast fails.

Arguments:

etype : typeSparseSymEntry type parameter

override proc entry__str__(thresh: int = 1, prefix: string = "", suffix: string = "", baseFormat: string = "") : string throws

Formats and returns data in this entry up to the specified threshold. Arrays of size less than threshold will be printed in their entirety. Arrays of size greater than or equal to threshold will print the first 3 and last 3 elements

arg thresh:

threshold for data to return

type thresh:

int

arg prefix:

String to prepend to the front of the data string

type prefix:

string

arg suffix:

String to append to the tail of the data string

type suffix:

string

arg baseFormat:

String which represents the base format string for the data type

type baseFormat:

string

returns:

s (string) containing the array data

proc attrib() : string throws
proc layoutToStr(param l) param
class SparseSymEntry : GenSparseSymEntry

Symbol table entry

type etype

generic element type array etype is different from dtype (chapel vs numpy)

param dimensions : int

number of dimensions, to be passed back to the GenSparseSymEntry so that we are able to make it visible to the Python client

var tupShape : dimensions*int

the actual shape of the array, this has to live here, since GenSparseSymEntry has to stay generic For now, each dimension is assumed to be equal.

param matLayout : layout

layout of the sparse array: CSC or CSR

var a = makeSparseArray(tupShape[0], etype, matLayout)

‘a’ is the distributed sparse array

proc init(a, size, param matLayout, type eltType)

Create a SparseSymEntry from a shape and element type, etc.

Args len:

size of each dimension

Arguments:

etype : type – type to be instantiated

override proc entry__str__(thresh: int = 6, prefix: string = "noprefix", suffix: string = "nosuffix", baseFormat: string = "%\?") : string throws

Formats and returns data in this entry up to the specified threshold. Matrices with nnz less than threshold will be printed in their entirety. Matrices with nnz greater than or equal to threshold will print the first 3 and last 3 elements

arg thresh:

threshold for data to return

type thresh:

int

arg prefix:

String to pre-pend to the front of the data string

type prefix:

string

arg suffix:

String to append to the tail of the data string

type suffix:

string

arg baseFormat:

String which represents the base format string for the data type

type baseFormat:

string

returns:

s (string) containing the array data

proc deinit()

Verbose flag utility method

proc createSparseSymEntry(a, size, param matLayout, type eltType) throws
proc makeSparseArray(size, type eltType, param matLayout)
class GeneratorSymEntry : AbstractSymEntry
type etype
var generator : randomStream(etype)
var state : int
proc init(generator: randomStream(?etype), state: int = 1)
proc toGenSymEntry(entry: borrowed AbstractSymEntry) throws
  • Helper proc to cast AbstrcatSymEntry to GenSymEntry

proc toCompositeSymEntry(entry: borrowed AbstractSymEntry) throws
  • Helper proc to cast AbstractSymEntry to CompositeSymEntry

proc toSegStringSymEntry(entry: borrowed AbstractSymEntry) throws
  • Helper proc to cast AbstractSymEntry to SegStringSymEntry

proc toGenSparseSymEntry(entry: borrowed AbstractSymEntry) throws
  • Helper proc to cast AbstractSymEntry to GenSparseSymEntry

proc toGeneratorSymEntry(entry: borrowed AbstractSymEntry, type t) throws
  • Helper proc to cast AbstractSymEntry to GeneratorSymEntry

proc getArraySpecFromEntry(entry: borrowed AbstractSymEntry) throws
  • Temporary shim to ease transition to Typed Symbol Table Entries.

  • This attempts to retrieve the Dtype, size/array-length, and itemsize from a SymbolTable

  • entry if the entry type supports it. Returns default tuple of valuse otherwise.

  • arg entry:

    AbstractSymEntry or descendant

  • type entry:

    borrowed AbstractSymEntry

  • retruns:

    tuple of (dtype, entry.size, entry.itemsize)

  • Note: entry.size is generally the number of elements in the array

  • and is more synonymous with length

proc tupShapeString(shape) : string

Create a string to represent a JSON tuple of an array’s shape

proc tupShapeString(val: int, ndim: int) : string