This site contains documentation for v0.2 of the Intrepydd programming system being developed in the DDARING research project with contributors from Georgia Tech, UIUC, U.Michigan, and USC. Intrepydd is a Python-based domain-specific programming language for data analytics kernels, suitable for ahead-of-time compilation on current and future hardware platforms and accelerators. Intrepydd is not intended for writing complete/main programs. This release (v0.2) contains an implementation of an early version of the Intrepydd language. We welcome feedback from testers of this release; your feedback will influence future enhancements to the Intrepydd language, its implementation, and its documentation.
Intrepydd v0.2 supports the following classes of built-in functions and library
wrappers for
the convenience of the programmer. When an entry below corresponds to
a
standard Python function or library, we include a link to the Python
documentation and also summarize limitations in the Intrepydd version
relative to the Python version. We also use Intrepydd-style type
declarations for function prototypes to summarize the acceptable
parameters and types. For convenience, we use T
, T1
, T2
, etc. as
type parameters below to represent any Intrepydd numeric type: int32
, int64
, float32
, or float64
, and use BT
, BT1
, BT2
etc. as
type parameters to represent any numeric type or bool
.
Finally, note that all standard Python functions and libraries can be used without limitations in the Python main program that invokes Intrepydd functions.
Functions Reference. For a Jupyter-based summary and demo of many of the Intrepydd-supported functions, refer to the functions reference or its preview. The complete list of functions and libraries available in Intrepydd is included below. Many of the entries also include a link to a standard library API that is equivalent, or closely related, to the Intrepydd API.
Intrepydd supports the following subset of Python built-in functions:
(x: T1) -> T1
(iterable: Array(BT)) -> bool
(iterable: List(BT)) -> bool
(iterable: Array(BT)) -> bool
(iterable: List(BT)) -> bool
(s: Array(BT)) -> int64
(s: List(BT)) -> int64
(arr: Array(T)) -> T
(arr: Array(T)) -> T
(base: float64, exp: float64) -> float64
z
is not supported(v: BT)
(ls: List(BT))
(len: int64) -> List(int)
for ... in
, the prototype is (start: int64, stop: int64, step: int64) -> List(int)
(arr: Array(T)) -> T
Intrepydd supports the following subset of NumPy libraries. Each function name points to the Numpy reference page for the function, and can have some bullets to note its prototype in Intrepydd (often only supports a subset of parameters) and other differences from the Numpy version.
(arr: Array(T)) -> Array(double)
(val: T) -> double
(x1: Array(T1), x2: T2) -> Array(double)
(x1: T1, x2: Array(T2)) -> Array(double)
(x1: Array(T1), x2: Array(T2)) -> Array(double)
(x1: Array(T), x2: Array(T)) -> Array(T)
(arr: Array(T), eps: T) -> bool
(arr: Array(T)) -> Array(double)
(val: T) -> double
(arr: Array(T)) -> Array(double)
(val: T) -> double
(arr: Array(T)) -> Array(double)
(val: T) -> double
(x1: Array(T1), x2: T2) -> Array(double)
(x1: T1, x2: Array(T2)) -> Array(double)
(x1: Array(T1), x2: Array(T2)) -> Array(double)
(arr: Array(T)) -> Array(bool)
(shape: List(int32), dtype: T) -> Array()
(shape: List(int64), dtype: T) -> Array()
(shape: int64, dtype: T) -> Array()
order
is not supported. dtype
is supported by specifying a number of desired type.empty([2,3], int32())
(x1: Array(BT1), x2: BT2) -> Array(bool)
(x1: BT1, x2: Array(BT2)) -> Array(bool)
(x1: Array(BT1), x2: Array(BT2)) -> Array(bool)
(arr: Array(T)) -> Array(double)
(val: T) -> double
() -> float32
(x: T) -> float32
() -> float64
(x: T) -> float64
(x1: Array(T1), x2: T2) -> Array(bool)
(x1: T1, x2: Array(T2)) -> Array(bool)
(x1: Array(T1), x2: Array(T2)) -> Array(bool)
(x1: Array(T1), x2: T2) -> Array(bool)
(x1: T1, x2: Array(T2)) -> Array(bool)
(x1: Array(T1), x2: Array(T2)) -> Array(bool)
(arr1: Array(T1), arr2: Array(T2)) -> double
() -> int32
(x: T) -> int32
() -> int64
(x: T) -> int64
(arr: Array(T)) -> Array(bool)
(val: T) -> bool
(arr: Array(T)) -> Array(bool)
(val: T) -> bool
(x1: Array(T1), x2: T2) -> Array(bool)
(x1: T1, x2: Array(T2)) -> Array(bool)
(x1: Array(T1), x2: Array(T2)) -> Array(bool)
(x1: Array(T1), x2: T2) -> Array(double)
(x1: T1, x2: Array(T2)) -> Array(double)
(x1: Array(T1), x2: Array(T2)) -> Array(double)
(x1: T1, x2: T2) -> double
(x1: Array(T1), x2: T2) -> Array(bool)
(x1: T1, x2: Array(T2)) -> Array(bool)
(x1: Array(T1), x2: Array(T2)) -> Array(bool)
(arr: Array(T)) -> Array(T)
(x1: Array(T1), x2: T2) -> Array(double)
(x1: T1, x2: Array(T2)) -> Array(double)
(x1: Array(T1), x2: Array(T2)) -> Array(double)
(x1: Array(T), x2: Array(T)) -> Array(T)
(x1: Array(BT1), x2: BT2) -> Array(bool)
(x1: BT1, x2: Array(BT2)) -> Array(bool)
(x1: Array(BT1), x2: Array(BT2)) -> Array(bool)
(x1: Array(T1), x2: T2) -> Array(double)
(x1: T1, x2: Array(T2)) -> Array(double)
(x1: Array(T1), x2: Array(T2)) -> Array(double)
(x1: T1, x2: T2) -> double
(arr: Array(T)) -> T
(arr: Array(BT), i: int) -> int
shape(arr, index)
(arr: Array(T)) -> Array(double)
(val: T) -> double
(arr: Array(T)) -> Array(double)
(var: T) -> double
(x1: Array(T1), x2: T2) -> Array(double)
(x1: T1, x2: Array(T2)) -> Array(double)
(x1: Array(T1), x2: Array(T2)) -> Array(double)
(x1: Array(T), x2: Array(T)) -> Array(T)
(arr: Array(T)) -> Array(double)
(val: T) -> double
(arr: Array(T)) -> Array(T)
(shape: List(int32), dtype: BT) -> Array()
(shape: List(int64), dtype: BT) -> Array()
(shape: int64, dtype: BT) -> Array()
order
is not supported. dtype
is supported by specifying a number of desired type.zeros([2,3], int32())
matmult
)Intrepydd supports interfaces to the following subset of CombBLAS libraries for
sparse matrices.
Currently, only float64
is supported as an element type for sparse
matrices in Intrepydd. The
Triangle Counting
Jupyter notebook illustrates the use of Intrepydd to implement a
sparse matrix application, especially in the sections titled
“An Intrepydd version: Domain-specific wrappers”
and “Another Intrepydd version: “lowering” the implementation”.
(values: Array(float64), columns: Array(int32), indexes: Array(int32), nc: int32) -> SparseMat(float64)
values
,
columns
, indexes
, and nc
(number of columns) — with the values corresponding
to a CSR representation of spm.(nr: int32, nc: int32) -> SparseMat(float64)
nr
rows and nc
columns.(spm1, spm2) -> SparseMat(float64)
spm1
and spm2
as a sparse matrix.(spm1, spm2) -> Array(float64)
(spm, arr) -> Array(float64)
(arr, spm) -> Array(float64)
spm1
and spm2
as a dense matrix.
(spm1, spm2) -> SparseMat(float64)
(spm, arr) -> SparseMat(float64)
spm1
and spm2
as a sparse matrix.
(spm1, spm2) -> SparseMat(float64)
(spm, arr) -> SparseMat(float64)
spm1
and spm2
as a sparse matrix.
(spm, v: float64, r: int32, c: int32)
[r,c]
of sparse matrix spm
to v
.
If item [r,c]
already had a nonzero entry in spm
, its value is overwritten with v
.(spm, v: float64, r: int32, c: int32)
[r,c]
of sparse matrix spm
to v
; assume without checking that item [r,c]
does not already have a nonzero entry in spm
.(spm, values: Array(float64), columns: Array(int32), indexes: Array(int32))
(spm, arr) -> Array(float64)
spm
and dense vector arr
as a new dense vector.Note that the data types of arguments spm
, spm1
, and spm2
are
SparseMat(float64)
while the data type of arr
is Array(float64)
.