<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Deprecated List (SystemDS 2.1.0-SNAPSHOT API)</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="Deprecated List (SystemDS 2.1.0-SNAPSHOT API)";
        }
    }
    catch(err) {
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li class="navBarCell1Rev">Deprecated</li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Deprecated API" class="title">Deprecated API</h1>
<h2 title="Contents">Contents</h2>
<ul>
<li><a href="#field">Deprecated Fields</a></li>
<li><a href="#method">Deprecated Methods</a></li>
</ul>
</div>
<div class="contentContainer"><a name="field">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<table class="deprecatedSummary" border="0" cellpadding="3" cellspacing="0" summary="Deprecated Fields table, listing deprecated fields, and an explanation">
<caption><span>Deprecated Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Field and Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="org/apache/sysds/parser/dml/DmlLexer.html#tokenNames">org.apache.sysds.parser.dml.DmlLexer.tokenNames</a>
<div class="block"><span class="deprecationComment">Use <a href="org/apache/sysds/parser/dml/DmlLexer.html#VOCABULARY"><code>DmlLexer.VOCABULARY</code></a> instead.</span></div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="org/apache/sysds/parser/dml/DmlParser.html#tokenNames">org.apache.sysds.parser.dml.DmlParser.tokenNames</a>
<div class="block"><span class="deprecationComment">Use <a href="org/apache/sysds/parser/dml/DmlParser.html#VOCABULARY"><code>DmlParser.VOCABULARY</code></a> instead.</span></div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
<a name="method">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<table class="deprecatedSummary" border="0" cellpadding="3" cellspacing="0" summary="Deprecated Methods table, listing deprecated methods, and an explanation">
<caption><span>Deprecated Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Method and Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="org/apache/sysds/runtime/instructions/spark/utils/FrameRDDConverterUtils.html#binaryBlockToDataFrame-org.apache.spark.sql.SQLContext-org.apache.spark.api.java.JavaPairRDD-org.apache.sysds.runtime.meta.DataCharacteristics-org.apache.sysds.common.Types.ValueType:A-">org.apache.sysds.runtime.instructions.spark.utils.FrameRDDConverterUtils.binaryBlockToDataFrame(SQLContext, JavaPairRDD&lt;Long, FrameBlock&gt;, DataCharacteristics, Types.ValueType[])</a></td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="org/apache/sysds/runtime/instructions/spark/utils/RDDConverterUtils.html#binaryBlockToDataFrame-org.apache.spark.sql.SQLContext-org.apache.spark.api.java.JavaPairRDD-org.apache.sysds.runtime.meta.DataCharacteristics-boolean-">org.apache.sysds.runtime.instructions.spark.utils.RDDConverterUtils.binaryBlockToDataFrame(SQLContext, JavaPairRDD&lt;MatrixIndexes, MatrixBlock&gt;, DataCharacteristics, boolean)</a></td>
</tr>
<tr class="altColor">
<td class="colOne"><a href="org/apache/sysds/runtime/matrix/data/LibMatrixDatagen.html#computeNNZperBlock-long-long-int-double-">org.apache.sysds.runtime.matrix.data.LibMatrixDatagen.computeNNZperBlock(long, long, int, double)</a></td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="org/apache/sysds/parser/dml/DmlLexer.html#getTokenNames--">org.apache.sysds.parser.dml.DmlLexer.getTokenNames()</a></td>
</tr>
<tr class="altColor">
<td class="colOne"><a href="org/apache/sysds/parser/dml/DmlParser.html#getTokenNames--">org.apache.sysds.parser.dml.DmlParser.getTokenNames()</a></td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="org/apache/sysds/runtime/lineage/LineageItemUtils.html#rDecompress-org.apache.sysds.runtime.lineage.LineageItem-">org.apache.sysds.runtime.lineage.LineageItemUtils.rDecompress(LineageItem)</a></td>
</tr>
<tr class="altColor">
<td class="colOne"><a href="org/apache/sysds/runtime/lineage/LineageItem.html#resetVisitStatus--">org.apache.sysds.runtime.lineage.LineageItem.resetVisitStatus()</a></td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="org/apache/sysds/runtime/lineage/LineageItem.html#resetVisitStatus-org.apache.sysds.runtime.lineage.LineageItem:A-">org.apache.sysds.runtime.lineage.LineageItem.resetVisitStatus(LineageItem[])</a></td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li class="navBarCell1Rev">Deprecated</li>
<li><a href="index-all.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
<li><a href="deprecated-list.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>
