<!--
{% comment %}
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
{% end comment %}
-->

---
GENERAL NOTES:
 * Assign IDs for epics by default with a key range of 10
 * Keep epic tasks in the key range, otherwise create new epic
---

SYSTEMDS-10 Compiler Rework / Misc
 * 11 Support DML-bodied builtin functions                            OK
 * 12 Remove unnecessary HOP/LOP indirections                         OK
 * 13 Refactoring test cases into component/integration               OK
 * 14 Complete removal of external functions from all scripts
 * 15 Travis integration w/ subset of tests                           OK (removed for Github Actions)
 * 16 Remove instruction patching
 * 17 Refactoring of program block hierarchy                          OK
 * 18 Improve API for new dml-bodied builtin functions                OK
 * 19 Cleanup pass cpvar+rmvar to mvvar instructions                  OK
 
SYSTEMDS-20 New Data Model
 * 21 Finalize dense tensor blocks                                    OK
 * 22 Sparse double/float tensor blocks
 * 23 Sparse int/bool tensor blocks
 * 24 Initial tensor dml integration                                  OK
 * 25 Initial data tensor implementation
 * 26 Non-zero default value for sparse (row/col)
 * 27 Tensor buffer pool integration
 * 28 Tensor local readers and writers (textcell, binary)             OK
 * 29 Tensor local readers and writers (linearize csv)

SYSTEMDS-30 Builtin and Packaging
 * 31 Shell script for local runs                                     OK
 * 32 Shell script for spark runs                                     OK
 * 33 Cleanup hadoop dependency for local runs
 * 34 Wrapper blocks for sequence files
 * 35 Replace unnecessary dependencies w/ custom
 * 36 Shell script for AWS execution                                  OK
 * 37 Cleanup mvn package, compile, test                              OK
 * 38 Runscript rename, improve, fix cygwin                           OK

SYSTEMDS-40 Preprocessing builtins
 * 41 Add new winsorize builtin function                              OK
 * 42 Add new outlier builtin function                                OK
 * 43 Add new scale builtin function                                  OK
 * 44 SotA normalization primitives
 * 45 SotA outlier detection primitives
 * 46 Generalization of quantiles
 * 47 Add new normalize builtin function                              OK
 * 48 Extended transform encode/apply: feature hashing                OK

SYSTEMDS-50 I/O Formats
 * 51 Support for homogeneous JSON (local/distributed)
 * 52 Support for libsvm files (local/distributed)
 * 53 New sql data source (local, distributed)                        
 * 54 Support for is.na, is.nan, is.infinite                          OK
 * 55 Cleanup file formats, binary cell, input/output infos           OK
 * 56 Consolidate single/multi-threaded readers
 * 57 Support for hdf5 files (local/distributed)

SYSTEMDS-60 Update SystemML improvements
 * 61 Take over cumulative aggregate improvements                     OK
 * 62 Take over sparsity estimation improvements                      OK
 * 63 Take over fixes for transform w/ binning

SYSTEMDS-70 Lineage Tracing and Reuse                                 OK
 * 71 Basic collection of lineage traces                              OK
 * 72 Serialization and deserialization of lineage traces             OK
 * 73 Deduplication of lineage traces                                 OK
      (loops, nested loops, branchless loops)                         OK
 * 74 Performance features lineage tracing                            OK
 * 75 Reuse cache based on lineage traces                             OK
 * 76 Generate runtime plan from lineage trace                        OK
 * 77 New builtin function for obtaining lineage                      OK
 * 78 Extended lineage tracing (parfor, funs, codegen)                OK
 * 79 Reuse cache configuration options (cmd line options)            OK

SYSTEMDS-80 Improved distributed operations
 * 81 Avoid unnecessary replication on rmm
 * 82 Avoid unnecessary replication on binary

SYSTEMDS-100 Various Fixes
 * 101 Fix spark quantiles w/ multiple queries                        OK
 * 102 Fix parser issue after refactoring                             OK
 * 103 Fix handling of builtin functions w/ matching udfs             OK
 * 104 Fix failing tests due to incorrect parfor parameters           OK
 * 105 Fix all application/function tests (various issues)            OK
 * 106 Fix correctness of as.integer for negative numbers             OK
 * 107 Fix correctness IPA check dimension-preserving                 OK
 * 108 Fix codegen optimizer (early costing abort)                    OK
 * 109 Fix update-in-place w/ udf function calls                      OK
 
SYSTEMDS-110 New Builtin Functions
 * 111 Time builtin function for script-level measurements            OK
 * 112 Image data augmentation builtin functions                      OK
 * 113 Builtin functions for linear regression algorithms             OK
 * 114 Builtin function for stepwise regression                       OK
 * 115 Builtin function for model debugging (slice finder)            OK
 * 116 Builtin function for kmeans                                    OK
 * 117 Builtin function for lm cross validation                       OK
 * 118 Builtin function for hyperparameter grid search                
 * 119 Builtin functions for l2svm and msvm                           OK

SYSTEMDS-120 Performance Features
 * 121 Avoid spark context creation on parfor result merge            OK
 * 122 Reduce thread contention on parfor left indexing               OK
 * 123 Avoid unnecessary spark context creation on explain            OK
 * 124 Improved cbind performance (small rhs)                         OK
 * 125 Parallel Sort (previously 191)                                 OK
 
SYSTEMDS-130 IPA and Size Propagation
 * 131 New IPA pass for function call forwarding                      OK
 * 132 Size propagation via data characteristics
 * 133 Hop Size Propagation for Tensors
 * 134 Increased repretition and fixpoint detection                   OK
 * 135 Fix IPA scalar propagation w/ named arguments                  OK

SYSTEMDS-140 Distributed Tensor Operations
 * 141 Infrastructure for spark tensor operations
 * 142 Basis tensor operations (datagen, aggregate, elementwise)
 
SYSTEMDS-150 Releases
 * 151 Fixing native BLAS instructions (MKL,OpenBLAS)                 OK
 * 152 Run script documentation                                       OK
 * 153 convert all occurrences SystemML/sysml to SystemDS/sysds       OK
 * 154 fix license headers in all touched files                       OK
 * 155 import release scripts from SystemML repo                      OK
 * 156 initial codestyle eclipse template                             OK
 * 157 Shell script simplification, cleanups and fixes for 0.2        OK

SYSTEMDS-160 Tensor Compiler/Runtime
 * 161 Local readers and writers for tensors (all formats)
 * 162 Spark binary tensor instructions
 
SYSTEMDS-170 Lineage full and partial reuse 
 * 171 Initial version of partial rewrites                            OK
 * 172 Parfor integration (blocked waiting for results)               OK
 * 173 Improved cost estimates                                        OK
 * 174 Reuse rewrite for rbind/cbind-tsmm/ba+*                        OK
 * 175 Refactoring of lineage rewrite code                            OK
 * 176 Reuse rewrite for cbind/rbind-elementwise */+
 * 177 Reuse rewrite for aggregate                                    OK
 * 178 Compiler assisted reuse (eg. CV, lmCG)
 * 179 Lineage handling for lists                                     OK

SYSTEMDS-180 New Builtin Functions II                                 OK
 * 181 Builtin function for naive bayes                               OK
 * 182 Builtin function for typeof (frame schema detection)           OK
 * 183 Builtin function detectSchema                                  OK
 * 184 Builtin function GNMF                                          OK
 * 185 Builtin function PNMF                                          OK
 * 186 Builtin function ALS-DS                                        OK
 * 187 Builtin function ALS-CG                                        OK
 * 188 Builtin function ALS                                           OK
 * 189 Builtin function mice (chained equation imputation)            OK

SYSTEMDS-190 New Builtin Functions III
 * 191 Builtin function multi logreg                                  OK
 * 192 Extended cmdline interface -b for calling builtin functions
 * 193 New outlierBySds builtin function (delete row/cell)            OK
 * 194 New outlierByIQR builtin function (delete row/cell)            OK
 * 195 Builtin function mice for nominal features                     OK
 * 196 Builtin function intersect (set intersection)                  OK
 * 197 Builtin function for functional dependency discovery           OK
 * 198 Extended slice finding (classification)                        OK
 * 199 Builtin function Multinominal Logistic Regression Predict      OK
 * 200 Builtin function Gaussian Mixture Model                        OK

SYSTEMDS-200 Various Fixes
 * 201 Fix spark append instruction zero columns                      OK
 * 202 Fix rewrite split DAG multiple removeEmpty (pending op)        OK
 * 203 Fix codegen outer compilation (MV operations)                  OK
 * 204 Fix rewrite simplify sequences of binary comparisons           OK
 * 205 Fix scoping of builtin dml-bodied functions (vs user-defined)
 * 206 Fix codegen outer template compilation (tsmm)                  OK
 * 207 Fix builtin function call hoisting from expressions            OK
 * 208 Fix bufferpool leak (live var analysis and createvar)          OK
 * 209 Fix performance sparse M-CV elementwise multiply               OK

SYSTEMDS-210 Extended lists Operations
 * 211 Cbind and Rbind over lists of matrices                         OK
 * 212 Creation of empty lists                                        OK
 * 213 Add entries to lists                                           OK
 * 214 Removal of entries from lists                                  OK
 * 215 List expansion during dynamic recompilation                    OK
 * 216 New rewrite for tsmm/mm over list of folds                     OK

SYSTEMDS-220 Federated Tensors and Instructions
 * 221 Initial infrastructure federated operations                    OK
 * 222 Federated matrix-vector multiplication                         OK
 * 223 Federated unary aggregates                                     OK
 * 224 Federated frames                                               OK
 * 225 Federated elementwise operations                               OK
 * 226 Federated rbind and cbind                                      OK
 * 227 Federated worker setup and infrastructure                      OK
 * 228 Federated matrix-matrix multiplication                         OK
 * 229 Federated transform functionality

SYSTEMDS-230 Lineage Integration
 * 231 Use lineage in buffer pool
 * 232 Lineage of code generated operators                            OK
 * 233 Lineage cache and reuse of function results                    OK
 * 234 Lineage tracing for spark instructions                         OK
 * 235 Lineage tracing for remote-spark parfor                        OK
 * 236 Extended multi-level lineage cache for statement blocks        OK
 * 237 Unmark loop dependent operations                               OK
 * 238 Robustness parfor lineage merge (flaky tests)                  OK
 * 239 Make lineage accessible through python bindings                OK

SYSTEMDS-240 GPU Backend Improvements
 * 241 Dense GPU cumulative aggregates                                OK

SYSTEMDS-250 Extended Slice Finding
 * 251 Alternative slice enumeration approach                         OK
 * 252 Initial data slicing implementation Python                     OK
 * 253 Distributed slicing algorithms (task/data parallel)            OK
 * 254 Consolidation and fixes distributed slice finding              OK

SYSTEMDS-260 Misc Tools
 * 261 Stable marriage algorithm                                      OK
 * 262 Data augmentation tool for data cleaning                       OK
 * 263 ONNX graph importer (Python API, docs, tests)                  OK
 * 264 ONNX graph exporter
 * 265 Entity resolution pipelines and primitives                     OK

SYSTEMDS-270 Compressed Matrix Blocks
 * 271 Reintroduce compressed matrix blocks from SystemML             OK
 * 272 Simplify and speedup compression tests                         OK
 * 273 Refactor compressed Matrix Block to simplify responsibilities  OK
 * 273a Redesign allocation of ColGroups in ColGroupFactory
 * 274 Make the DDC Compression dictionary share correctly            OK
 * 275 Include compressionSettings in DMLConfiguration
 * 276 Allow Uncompressed Columns to be in sparse formats
 * 277 Sampling based estimators fix
 * 278 Compression-CoCode algorithm optimization
 * 278a Return ColGroups estimated compression ratio to Factory
 * 279 Add missing standard lossless compression techniques
 * 279a ColGroup FOR (Frame of reference) encoding
 * 279b ColGroup DEL (Delta) encoding
 * MINOR Reduce memory usage for compression statistics.
 * MINOR Make ContainsAZero() method in UncompressedBitMap

SYSTEMDS-280 New Rewrites
 * 281 New rewrites sum(rmEmpty), sum(table)                          OK
 * 282 New rewrite binary add chain to nary plus                      OK

SYSTEMDS-290 Misc Compiler Features
 * 291 Eval function calls of dml-bodied builtin functions            OK
 * 292 Eval function calls of native builtin functions (genate fun)
 * 293 Compiler rewrites for eval to normal function calls
 * 294 DML-bodied builtin functions with frames as main input
 
SYSTEMDS-300 Github Workflow/Actions
 * 301 Initial Setup of GitHub Actions for automatic testing          OK
 * 302 Workflow for Application tests                                 OK
 * 303 Workflow for Function tests                                    OK
 * 304 Workflow make documentation                                    OK
 * 305 Workflow run docker containers for speedup                     OK

SYSTEMDS-310 Python Bindings
 * 311 Initial Python Binding for federated execution                 OK
 * 312 Python 3.6 compatibility                                       OK
 * 313 Python Documentation upload via Github Actions                 OK
 * 314 Python SystemDS context manager                                OK
 * 314a Change py4j interaction using py4j for termination not stdin
 * 315 Python Federated Matrices Tests                                OK
 * 316 Extended Python API (rand, lm, mm)                             OK
 * 317 Python Rerun with different inputs without recompilation
 * 318 Python Multiple outputs
 * 319 Python Caching of intermediates

SYSTEMDS-320 Merge SystemDS into Apache SystemML                      OK
 * 321 Merge histories of SystemDS and SystemML                       OK
 * 322 Change global package names                                    OK
 * 323 Fix licenses and notice file                                   OK 
 
SYSTEMDS-330 Lineage Tracing, Reuse and Integration
 * 331 Cache and reuse scalar outputs (instruction and multi-level)   OK
 * 332 Parfor integration with multi-level reuse                      OK
 * 333 Improve cache eviction with actual compute time                OK
 * 334 Cache scalars only with atleast one matrix inputs
 * 335 Weighted eviction policy (function(size,computetime,LRU time)) OK
 * 336 Better use of cache status to handle multithreading
 * 337 Adjust disk I/O speed by recording actual time taken           OK
 * 338 Extended lineage tracing (rmEmpty, lists), partial rewrites    OK
 * 339 Lineage tracing robustness (indexed updates, algorithms)
 
SYSTEMDS-340 Compiler Assisted Lineage Caching and Reuse
 * 341 Finalize unmarking of loop dependent operations
 * 342 Mark functions as last-use to enable early eviction
 * 343 Identify equal last level HOPs to ensure SB-level reuse
 * 344 Unmark functions/SBs containing non-determinism for caching    OK
 * 345 Compiler assisted cache configuration

SYSTEMDS-350 Data Cleaning Framework
 * 351 New builtin function for error correction by schema            OK
 * 352 New builtin function for error correction by length            Ok

SYSTEMDS-360 Privacy/Data Exchange Constraints
 * 361 Initial privacy meta data (compiler/runtime)                   OK
 * 362 Runtime privacy propagation
 * 363 Compile-time privacy propagation
 * 364 Error handling violated privacy constraints                    OK
 * 365 Extended privacy/data exchange constraints                     OK

SYSTEMDS-370 Lossy Compression Blocks
 * 371 ColGroup Quantization                                          OK (Naive Q8)
 * 321 ColGroup Base Data change (from Double to ??)

SYSTEMDS-380 Memory Footprint
 * 381 Matrix Block Memory footprint update

SYSTEMDS-390 New Builtin Functions IV
 * 391 New GLM builtin function (from algorithms)                     OK
 * 392 Builtin function for missing value imputation via FDs          OK
 * 393 Builtin to find Connected Components of a graph                OK
 * 394 Builtin for one-hot encoding of matrix (not frame), see table  OK
 * 395 SVM rework and utils (confusionMatrix, msvmPredict)            OK
 * 396 Builtin for counting number of distinct values                 OK
 * 397 Algorithm for neural collaborative filtering (NCF)             OK

SYSTEMDS-400 Spark Backend Improvements
 * 401 Fix output block indexes of rdiag (diagM2V)                    OK

SYSTEMDS-410 Lineage Tracing, Reuse and Integration II
 * 411 Improved handling of multi-level cache duplicates              OK 
 * 412 Robust lineage tracing (non-recursive, parfor)                 OK
 * 413 Cache and reuse MultiReturnBuiltin instructions                OK
 * 414 New rewrite for PCA --> lmDS pipeline                          OK
 * 415 MLContext lineage support (tracing and reuse correctness)      OK
 * 416 Lineage deduplication while, nested if, loop sequences         OK
 * 417 New rewrite for partial reuse in StepLM                        OK
 * 418 Performance lineage tracing and reuse probing small data       OK
 * 419 Performance and robustness partial rewrites                   

SYSTEMDS-420 Compiler Improvements
 * 421 Fix invalid IPA scalar propagation into functions              OK

SYSTEMDS-500 Documentation Webpage Reintroduction
 * 501 Make Documentation webpage framework                           OK

Others:
 * Break append instruction to cbind and rbind 

SYSTEMDS-510 IO formats
 * 511 Add protobuf support to write and read FrameBlocks to HDFS     OK

SYSTEMDS-520 Lineage Tracing, Reuse and Integration III
 * 521 New lineage option exposing cache policies                     OK

SYSTEMDS-610 Cleaning Pipelines
 * 611 Initial Brute force execution                                  OK


