| AggBinaryOp | 
  | 
| AggUnaryOp | 
  | 
| BinaryOp | 
 Binary (cell operations): aij + bij
                Properties: 
                        Symbol: *, -, +, ... 
 | 
| DataGenOp | 
 A DataGenOp can be rand (or matrix constructor), sequence, and sample -
 these operators have different parameters and use a map of parameter type to hop position. 
 | 
| DataOp | 
 A DataOp can be either a persistent read/write or transient read/write - writes will always have at least one input,
  but all types can have parameters (e.g., for csv literals of delimiter, header, etc). 
 | 
| DnnOp | 
  | 
| FunctionOp | 
 This FunctionOp represents the call to a DML-bodied or external function. 
 | 
| Hop | 
 Hop is a High level operator, that is the first intermediate representation compiled from the definitions supplied in
 DML. 
 | 
| IndexingOp | 
  | 
| LeftIndexingOp | 
  | 
| LiteralOp | 
  | 
| MemoTable | 
 Memoization Table (hop id, worst-case matrix characteristics). 
 | 
| MultiThreadedHop | 
 Optional hop interface, to be implemented by multi-threaded hops. 
 | 
| NaryOp | 
 The NaryOp Hop allows for a variable number of operands. 
 | 
| OptimizerUtils | 
  | 
| ParameterizedBuiltinOp | 
 Defines the HOP for calling an internal function (with custom parameters) from a DML script. 
 | 
| QuaternaryOp | 
 Note: this hop should be called AggQuaternaryOp in consistency with AggUnaryOp and AggBinaryOp;
 however, since there does not exist a real QuaternaryOp yet - we can leave it as is for now. 
 | 
| ReorgOp | 
 Reorg (cell) operation: aij
                Properties: 
                        Symbol: ', rdiag, rshape, rsort
                        1 Operand (except sort and reshape take additional arguments)
        
                Semantic: change indices (in mapper or reducer)
 
 
  NOTE MB: reshape integrated here because (1) ParameterizedBuiltinOp requires name-value pairs for params
  and (2) most importantly semantic of reshape is exactly a reorg op. 
 | 
| TernaryOp | 
 Primary use cases for now, are
                quantile (<n-1-matrix>, <n-1-matrix>, <literal>):      quantile (A, w, 0.5)
                quantile (<n-1-matrix>, <n-1-matrix>, <scalar>):       quantile (A, w, s)
                interquantile (<n-1-matrix>, <n-1-matrix>, <scalar>):  interquantile (A, w, s)
 
 Keep in mind, that we also have binaries for it w/o weights. 
 | 
| UnaryOp | 
  |